Summary
Establish the foundational configuration system architecture for session-logger, including file location, JSON Schema validation, loading hierarchy, and extraction of hardcoded values into configurable settings.
This is a long-running issue that will evolve as new configurable options are added.
Relationship to Other Issues
Config File Location
Path: ~/.claude/plugins/settings/session-logger.json
Rationale:
- Follows Claude Code plugin architecture patterns
- Mirrors
~/.claude/plugins/cache/ structure
- Keeps plugin configs organized together
- Scales well as plugin ecosystem grows
- Clear separation from Claude Code's own
settings.json
Directory Structure:
~/.claude/
├── settings.json # Claude Code settings
├── plugins/
│ ├── cache/ # Installed plugins
│ ├── settings/ # Plugin configurations
│ │ └── session-logger.json # THIS FILE
│ └── installed_plugins.json
├── session-states/ # Runtime state (not config)
└── sesslogs/ # Log output (not config)
JSON Schema
Create config-schema.json for:
- IDE autocompletion via
$schema reference
- Validation at config load time
- Self-documenting configuration
- Type checking for all settings
Schema Location: Published to repo for $schema URL reference
Config File Example:
{
"$schema": "https://raw.githubusercontent.com/DazzleML/claude-session-logger/main/schemas/config-schema.json",
"version": "1.0",
"channels": { ... },
"performance": { ... },
"display": { ... }
}
Configuration Loading Hierarchy
Priority (highest to lowest):
1. Environment Variables CLAUDE_SESSLOG_*
2. Project Config {cwd}/.session-logger.json
3. Global Config ~/.claude/plugins/settings/session-logger.json
4. Built-in Defaults Hardcoded in code
Merging Strategy: Deep merge, arrays replace (not concatenate)
Settings to Extract from Hardcoded Values
Performance Settings
| Setting |
Current Location |
Default |
Type |
max_file_size_for_line_detection |
find_line_number() |
2097152 (2MB) |
int |
content_preview_length |
truncate_preview() |
20 |
int |
Display Settings
| Setting |
Current Location |
Default |
Type |
verbosity |
Config class |
2 |
int (0-4) |
datetime_mode |
Config class |
"full" |
enum |
pwd_enabled |
Config class |
false |
bool |
show_line_numbers |
implicit |
true |
bool |
Channel Routing (Issue #1)
| Setting |
Current Location |
Default |
Type |
channels.* |
hardcoded routing |
per-category |
object |
tool_routing.* |
N/A |
{} |
object |
Future Settings (Issues #2, #3, #4)
| Setting |
Issue |
Purpose |
linking.* |
#2 |
Bidirectional project links |
exports.* |
#3 |
Export auto-detection |
session_manager.* |
#4 |
Session manager paths |
Implementation Tasks
Environment Variable Pattern
# Override any setting via environment
CLAUDE_SESSLOG_VERBOSITY=4
CLAUDE_SESSLOG_PERFORMANCE_MAX_FILE_SIZE=4194304
CLAUDE_SESSLOG_DISPLAY_DATETIME=none
Error Handling
| Scenario |
Behavior |
| Config file missing |
Use defaults (zero-config works) |
| Invalid JSON |
Log warning, use defaults |
| Schema validation fails |
Log specific errors, use defaults for invalid fields |
| Permission denied |
Log warning, use defaults |
Success Criteria
Analysis
See 2026-02-01__22-42-51__configuration-system-design.md for detailed design analysis.
Summary
Establish the foundational configuration system architecture for session-logger, including file location, JSON Schema validation, loading hierarchy, and extraction of hardcoded values into configurable settings.
This is a long-running issue that will evolve as new configurable options are added.
Relationship to Other Issues
Config File Location
Path:
~/.claude/plugins/settings/session-logger.jsonRationale:
~/.claude/plugins/cache/structuresettings.jsonDirectory Structure:
JSON Schema
Create
config-schema.jsonfor:$schemareferenceSchema Location: Published to repo for
$schemaURL referenceConfig File Example:
{ "$schema": "https://raw.githubusercontent.com/DazzleML/claude-session-logger/main/schemas/config-schema.json", "version": "1.0", "channels": { ... }, "performance": { ... }, "display": { ... } }Configuration Loading Hierarchy
Priority (highest to lowest):
Merging Strategy: Deep merge, arrays replace (not concatenate)
Settings to Extract from Hardcoded Values
Performance Settings
max_file_size_for_line_detectionfind_line_number()content_preview_lengthtruncate_preview()Display Settings
verbositydatetime_modepwd_enabledshow_line_numbersChannel Routing (Issue #1)
channels.*tool_routing.*Future Settings (Issues #2, #3, #4)
linking.*exports.*session_manager.*Implementation Tasks
~/.claude/plugins/settings/directory on first runschemas/config-schema.jsonwith all settingsConfigLoaderclass with hierarchy supportCLAUDE_SESSLOG_*)docs/configuration.mdEnvironment Variable Pattern
# Override any setting via environment CLAUDE_SESSLOG_VERBOSITY=4 CLAUDE_SESSLOG_PERFORMANCE_MAX_FILE_SIZE=4194304 CLAUDE_SESSLOG_DISPLAY_DATETIME=noneError Handling
Success Criteria
$schemaAnalysis
See
2026-02-01__22-42-51__configuration-system-design.mdfor detailed design analysis.