@scotthamilton77/sidekick 0.0.1-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/assets/sidekick/defaults/README.md +70 -0
  2. package/assets/sidekick/defaults/core.defaults.yaml +46 -0
  3. package/assets/sidekick/defaults/features/reminders.defaults.yaml +77 -0
  4. package/assets/sidekick/defaults/features/session-summary.defaults.yaml +79 -0
  5. package/assets/sidekick/defaults/features/statusline-empty-messages.txt +6 -0
  6. package/assets/sidekick/defaults/features/statusline.defaults.yaml +95 -0
  7. package/assets/sidekick/defaults/features.defaults.yaml +21 -0
  8. package/assets/sidekick/defaults/llm.defaults.yaml +100 -0
  9. package/assets/sidekick/defaults/transcript.defaults.yaml +11 -0
  10. package/assets/sidekick/personas/agent-smith.yaml +44 -0
  11. package/assets/sidekick/personas/bones.yaml +48 -0
  12. package/assets/sidekick/personas/c3po.yaml +42 -0
  13. package/assets/sidekick/personas/darth-vader.yaml +43 -0
  14. package/assets/sidekick/personas/dilbert.yaml +49 -0
  15. package/assets/sidekick/personas/disabled.yaml +15 -0
  16. package/assets/sidekick/personas/emh.yaml +46 -0
  17. package/assets/sidekick/personas/george.yaml +47 -0
  18. package/assets/sidekick/personas/hal.yaml +49 -0
  19. package/assets/sidekick/personas/hudson.yaml +41 -0
  20. package/assets/sidekick/personas/kramer.yaml +42 -0
  21. package/assets/sidekick/personas/marvin.yaml +47 -0
  22. package/assets/sidekick/personas/mr-t.yaml +43 -0
  23. package/assets/sidekick/personas/pointy-haired-boss.yaml +46 -0
  24. package/assets/sidekick/personas/ripley.yaml +39 -0
  25. package/assets/sidekick/personas/scotty.yaml +44 -0
  26. package/assets/sidekick/personas/sheldon.yaml +41 -0
  27. package/assets/sidekick/personas/sidekick.yaml +123 -0
  28. package/assets/sidekick/personas/skippy.yaml +48 -0
  29. package/assets/sidekick/personas/yoda.yaml +42 -0
  30. package/assets/sidekick/prompts/.gitkeep +0 -0
  31. package/assets/sidekick/prompts/completion-classifier.prompt.txt +96 -0
  32. package/assets/sidekick/prompts/resume-message.prompt.txt +24 -0
  33. package/assets/sidekick/prompts/session-summary.prompt.txt +128 -0
  34. package/assets/sidekick/prompts/snarky-message.prompt.txt +24 -0
  35. package/assets/sidekick/reminders/pause-and-reflect.yaml +16 -0
  36. package/assets/sidekick/reminders/user-prompt-submit.yaml +31 -0
  37. package/assets/sidekick/reminders/verify-completion.yaml +41 -0
  38. package/assets/sidekick/schemas/.gitkeep +0 -0
  39. package/assets/sidekick/schemas/completion-classifier.schema.json +23 -0
  40. package/assets/sidekick/schemas/session-summary.schema.json +47 -0
  41. package/assets/sidekick/templates/.gitkeep +0 -0
  42. package/dist/bin.js +53584 -0
  43. package/package.json +39 -0
@@ -0,0 +1,70 @@
1
+ # Sidekick Configuration Defaults
2
+
3
+ External YAML defaults loaded as the base layer of the configuration cascade.
4
+
5
+ ## Directory Structure
6
+
7
+ ```
8
+ defaults/
9
+ ├── core.defaults.yaml # Logging, paths, daemon, IPC
10
+ ├── llm.defaults.yaml # LLM provider settings
11
+ ├── transcript.defaults.yaml # Transcript processing
12
+ └── features/
13
+ ├── reminders.defaults.yaml # Update/stuck thresholds
14
+ ├── session-summary.defaults.yaml # Summary generation
15
+ └── statusline.defaults.yaml # Format and themes
16
+ ```
17
+
18
+ ## Configuration Cascade
19
+
20
+ Priority (lowest to highest):
21
+
22
+ 1. External YAML defaults (`assets/sidekick/defaults/*.yaml`)
23
+ 2. Internal Zod defaults (hardcoded fallbacks)
24
+ 3. Environment variables (`SIDEKICK_*`, `.env`)
25
+ 4. User domain YAML (`~/.sidekick/{domain}.yaml`)
26
+ 5. User unified config (`~/.sidekick/sidekick.config`)
27
+ 6. Project domain YAML (`.sidekick/{domain}.yaml`)
28
+ 7. Project unified config (`.sidekick/sidekick.config`)
29
+ 8. Project-local overrides (`.sidekick/{domain}.yaml.local`)
30
+
31
+ ## Overriding Defaults
32
+
33
+ ### Domain YAML (copy and modify)
34
+
35
+ ```bash
36
+ # Copy a defaults file as starting point
37
+ cp assets/sidekick/defaults/llm.defaults.yaml ~/.sidekick/llm.yaml
38
+ cp assets/sidekick/defaults/features/statusline.defaults.yaml ~/.sidekick/features.yaml
39
+
40
+ # Or for project-level
41
+ cp assets/sidekick/defaults/llm.defaults.yaml .sidekick/llm.yaml
42
+ ```
43
+
44
+ Edit the copied file—each has inline comments explaining options.
45
+
46
+ ### Quick Overrides (sidekick.config)
47
+
48
+ For surgical one-line changes without copying full files:
49
+
50
+ ```bash
51
+ # ~/.sidekick/sidekick.config or .sidekick/sidekick.config
52
+ llm.provider=openai
53
+ llm.temperature=0.5
54
+ core.logging.level=debug
55
+ features.reminders.enabled=false
56
+ features.statusline.thresholds.tokens.warning=50000
57
+ ```
58
+
59
+ ### Environment Variables
60
+
61
+ ```bash
62
+ SIDEKICK_LLM__PROVIDER=openai
63
+ SIDEKICK_CORE__LOGGING__LEVEL=debug
64
+ ```
65
+
66
+ ## Merge Behavior
67
+
68
+ - **Objects**: Deep-merged (nested keys combined)
69
+ - **Arrays**: Replaced entirely
70
+ - **Scalars**: Later values override
@@ -0,0 +1,46 @@
1
+ # Core Configuration Defaults
2
+ # This file defines default values for logging, paths, daemon, and IPC settings.
3
+ # Override in ~/.sidekick/config.yaml or .sidekick/config.yaml
4
+
5
+ # Logging configuration
6
+ logging:
7
+ # Log level: trace, debug, info, warn, error, fatal
8
+ level: info
9
+ # Output format: pretty (human-readable) or json (structured)
10
+ format: pretty
11
+ # Enable console output in addition to file logging
12
+ consoleEnabled: false
13
+ # Per-component log level overrides (uncomment to enable)
14
+ # components:
15
+ # reminders: debug
16
+ # statusline: trace
17
+
18
+ # Path configuration
19
+ paths:
20
+ # State directory relative to project root (session data, logs, etc.)
21
+ state: .sidekick
22
+ # Optional: Custom assets directory path (omit to use defaults)
23
+ # assets: /path/to/custom/assets
24
+
25
+ # Daemon process configuration
26
+ daemon:
27
+ # Time in ms before idle daemon shuts down (5 minutes)
28
+ idleTimeoutMs: 300000
29
+ # Graceful shutdown timeout in ms (30 seconds)
30
+ shutdownTimeoutMs: 30000
31
+
32
+ # IPC (Inter-Process Communication) configuration
33
+ ipc:
34
+ # Connection timeout in ms
35
+ connectTimeoutMs: 5000
36
+ # Request timeout in ms
37
+ requestTimeoutMs: 30000
38
+ # Maximum retry attempts for failed connections
39
+ maxRetries: 3
40
+ # Delay between retries in ms
41
+ retryDelayMs: 100
42
+
43
+ # Development mode configuration
44
+ development:
45
+ # Enable development mode (changes behavior for local development)
46
+ enabled: false
@@ -0,0 +1,77 @@
1
+ # Reminders Feature Defaults
2
+ # This file defines default values for the reminders feature.
3
+ # Override in ~/.sidekick/features.yaml or .sidekick/features.yaml under features.reminders
4
+
5
+ # Enable or disable the reminders feature
6
+ enabled: true
7
+
8
+ settings:
9
+ # Tool calls per turn that trigger the "pause and reflect" reminder.
10
+ # Counts tool invocations since the last user prompt (toolsThisTurn metric).
11
+ # Fires when: toolsThisTurn >= pause_and_reflect_threshold
12
+ pause_and_reflect_threshold: 60
13
+
14
+ # Glob patterns that trigger verify-completion reminder on file edit.
15
+ # Uses picomatch syntax: https://github.com/micromatch/picomatch
16
+ # Only edits to files matching these patterns will stage the reminder.
17
+ # Documentation files (*.md) are excluded by default.
18
+ source_code_patterns:
19
+ # TypeScript/JavaScript
20
+ - "**/*.ts"
21
+ - "**/*.tsx"
22
+ - "**/*.js"
23
+ - "**/*.jsx"
24
+ # Python
25
+ - "**/*.py"
26
+ # Go
27
+ - "**/*.go"
28
+ # Rust
29
+ - "**/*.rs"
30
+ # JVM languages
31
+ - "**/*.java"
32
+ - "**/*.kt"
33
+ - "**/*.scala"
34
+ # Swift
35
+ - "**/*.swift"
36
+ # C/C++
37
+ - "**/*.c"
38
+ - "**/*.cpp"
39
+ - "**/*.h"
40
+ - "**/*.hpp"
41
+ # Ruby
42
+ - "**/*.rb"
43
+ # PHP
44
+ - "**/*.php"
45
+ # C#
46
+ - "**/*.cs"
47
+ # Shell
48
+ - "**/*.sh"
49
+ # Config files
50
+ - "**/*.yaml"
51
+ - "**/*.yml"
52
+ - "**/*.toml"
53
+ # Specific important files
54
+ - "**/package.json"
55
+ - "**/tsconfig.json"
56
+ - "**/Dockerfile"
57
+ - "**/Makefile"
58
+
59
+ # Maximum re-evaluation cycles for non-blocking verification.
60
+ # When verify-completion fires but doesn't block (e.g., ASKING_QUESTION),
61
+ # we track unverified changes and re-stage on the next UserPromptSubmit.
62
+ # This limits how many times we'll re-evaluate before giving up.
63
+ # 0 = unlimited (default)
64
+ max_verification_cycles: 0
65
+
66
+ # Smart completion detection settings
67
+ # Classifies assistant's stopping intent to avoid blocking when not claiming completion
68
+ completion_detection:
69
+ # Enable/disable smart completion detection (if disabled, always blocks on verify-completion)
70
+ enabled: true
71
+ # Minimum confidence threshold to treat as claiming completion (0.0-1.0)
72
+ # Higher = more conservative (blocks less often)
73
+ confidence_threshold: 0.7
74
+ # LLM profile for classification (uses fast, cheap models)
75
+ llm:
76
+ profile: fast-lite
77
+ fallback_profile: cheap-fallback
@@ -0,0 +1,79 @@
1
+ # Session Summary Feature Defaults
2
+ # This file defines default values for the session summary feature.
3
+ # Override in ~/.sidekick/features.yaml or .sidekick/features.yaml under features.session-summary
4
+
5
+ # Enable or disable the session summary feature
6
+ enabled: true
7
+
8
+ settings:
9
+ # LLM profiles for sub-features
10
+ llm:
11
+ # Profile for session summary generation (classification, title, intent)
12
+ sessionSummary:
13
+ profile: fast-lite
14
+ fallbackProfile: cheap-fallback
15
+ # Profile for snarky comment generation
16
+ snarkyComment:
17
+ profile: creative
18
+ fallbackProfile: cheap-fallback
19
+ # Profile for resume message generation
20
+ resumeMessage:
21
+ profile: creative-long
22
+ fallbackProfile: cheap-fallback
23
+
24
+ # Number of transcript lines to include in excerpt for LLM analysis
25
+ excerptLines: 80
26
+
27
+ # Include tool messages ([TOOL]: and [RESULT]:) in excerpt
28
+ # When false, both tool usage and tool results are omitted
29
+ includeToolMessages: true
30
+
31
+ # Include full tool output content in [RESULT]: lines
32
+ # Only relevant when includeToolMessages is true
33
+ # When false, shows "[RESULT]: (output omitted)" instead
34
+ includeToolOutputs: false
35
+
36
+ # Include assistant thinking blocks in excerpt
37
+ # When true, shows "[THINKING]: ..." for thinking content
38
+ includeAssistantThinking: false
39
+
40
+ # Keep summary history across compactions
41
+ keepHistory: false
42
+
43
+ # Maximum words for generated session title
44
+ maxTitleWords: 8
45
+
46
+ # Maximum words for generated intent description
47
+ maxIntentWords: 12
48
+
49
+ # Enable snarky/humorous comments in summaries
50
+ snarkyMessages: true
51
+
52
+ # Countdown configuration for summary refresh timing
53
+ # Counts ToolResult events (each tool use decrements by 1)
54
+ # Lower values = more frequent updates (more LLM calls)
55
+ countdown:
56
+ # Tool results until next summary when confidence is low (≤0.6)
57
+ lowConfidence: 5
58
+ # Tool results until next summary when confidence is medium (0.6-0.8)
59
+ mediumConfidence: 10
60
+ # Tool results until next summary when confidence is high (>0.8)
61
+ # Set very high to effectively disable automatic refresh
62
+ highConfidence: 10000
63
+
64
+ # Bookmark configuration for tracking session progress
65
+ bookmark:
66
+ # Minimum confidence required to create a bookmark
67
+ confidenceThreshold: 0.8
68
+ # Confidence drop below which bookmark resets
69
+ resetThreshold: 0.7
70
+
71
+ # Persona configuration for creative outputs (snarky messages, resume messages)
72
+ # See docs/design/PERSONA-PROFILES-DESIGN.md
73
+ personas:
74
+ # Comma-separated allow-list of persona IDs (empty = all available personas)
75
+ # Example: "sidekick,skippy,bones" to restrict selection to these three
76
+ allowList: ""
77
+ # Maximum age (in hours) for resume messages to be considered fresh
78
+ # Sessions older than this will use persona empty-messages instead
79
+ resumeFreshnessHours: 4
@@ -0,0 +1,6 @@
1
+ What are we going to do today?
2
+ I'm ready to get to work.
3
+ Let's make some magic.
4
+ The possibilities are endless.
5
+ Tell me what you want to build.
6
+ Ready for instructions.
@@ -0,0 +1,95 @@
1
+ # Statusline Feature Defaults
2
+ # This file defines default values for the statusline feature.
3
+ # Override in ~/.sidekick/features.yaml or .sidekick/features.yaml under features.statusline
4
+
5
+ # Enable or disable the statusline feature
6
+ enabled: true
7
+
8
+ settings:
9
+ # Format string for statusline output
10
+ # Separators: | or \n (empty tokens between separators are automatically cleaned up)
11
+ #
12
+ # Available placeholders:
13
+ # {model} - Current model name (e.g., "Opus")
14
+ # {contextBar} - Visual context usage graph (e.g., "🪙 ▓▓▒|░░░")
15
+ # {contextWindow} - Total context window size (e.g., "200k")
16
+ # {tokenUsageActual} - Current tokens without compaction buffer (e.g., "45k")
17
+ # {tokenUsageEffective} - Current tokens + compaction buffer (e.g., "90k")
18
+ # {tokenPercentageActual} - Actual usage as % of context window (e.g., "22%")
19
+ # {tokenPercentageEffective}- Effective usage as % of context window (e.g., "45%")
20
+ # {logs} - Warning/error counts (e.g., "⚠0 ✗0")
21
+ # {cost} - Session cost (e.g., "$0.15")
22
+ # {duration} - Session duration (e.g., "12m")
23
+ # {cwd} - Current working directory
24
+ # {branch} - Git branch with icon (e.g., "⎇ main")
25
+ # {title} - Session title
26
+ # {summary} - Session summary/intent
27
+ # {personaName} - Current persona name (empty if disabled or no persona)
28
+ #
29
+ # Conditional prefix/suffix syntax:
30
+ # {token,prefix='...',suffix='...'}
31
+ # - prefix and suffix only render when the token value is non-empty
32
+ # - Either or both can be specified
33
+ # - Use backslash to escape quotes: \'
34
+ # - Example: {personaName,prefix='[',suffix='] | '} → "[jarvis] | " or "" (if empty)
35
+ #
36
+ # Example configurations:
37
+ # Simple ratio: "{tokenUsageActual}/{contextWindow}" → "45k/200k"
38
+ # Percentage only: "{tokenPercentageActual}" → "22%"
39
+ # Bar + percent: "{contextBar} {tokenPercentageActual}" → "🪙 ▓▓▒|░░░ 22%"
40
+ # With buffer: "{tokenUsageActual}|{tokenUsageEffective}" → "45k|90k"
41
+ # Verbose: "{contextBar} {tokenUsageActual}/{contextWindow} ({tokenPercentageEffective})"
42
+ #
43
+ format: "{personaName,prefix='[',suffix='] | '}{model,prefix='[',suffix='] | '}{contextBar} {tokenPercentageActual} | {logs} | {cwd}{branch}\n{title} | {summary}"
44
+
45
+ # Threshold configuration for visual warnings
46
+ thresholds:
47
+ # Token usage thresholds
48
+ tokens:
49
+ # Token count at which to show warning color
50
+ warning: 100000
51
+ # Token count at which to show critical color
52
+ critical: 160000
53
+ # Cost thresholds in USD
54
+ cost:
55
+ # Cost at which to show warning color
56
+ warning: 0.5
57
+ # Cost at which to show critical color
58
+ critical: 1.0
59
+ # Log metrics thresholds (for {logs} indicator: ⚠N ✗N)
60
+ logs:
61
+ # Warning count at which to show yellow color
62
+ warning: 5
63
+ # Error count at which to show red color (any error = critical)
64
+ critical: 1
65
+
66
+ # Theme configuration
67
+ theme:
68
+ # Symbol mode for statusline display:
69
+ # true or "full" - All Unicode symbols including emojis (🪙, 📁, ⚠, ✗, ⎇)
70
+ # "safe" - BMP-only symbols that avoid VS Code terminal width issues (△, ×, ∗)
71
+ # Use this if you see rendering artifacts in VS Code's integrated terminal
72
+ # false or "ascii"- ASCII-only characters for maximum compatibility ([#.|...], W:, E:, *)
73
+ useNerdFonts: safe
74
+ # Markdown styling support for summary/title text
75
+ # When enabled, converts markdown syntax to ANSI escape sequences
76
+ supportedMarkdown:
77
+ # Convert **text** to ANSI bold
78
+ bold: true
79
+ # Convert *text* or _text_ to ANSI italic
80
+ italic: true
81
+ # Convert `text` to ANSI dim
82
+ code: true
83
+ # Color assignments for statusline elements
84
+ # Available colors: black, red, green, yellow, blue, magenta, cyan, white
85
+ # Also: brightRed, brightGreen, brightYellow (for emphasis)
86
+ colors:
87
+ model: blue
88
+ tokens: green
89
+ title: blue
90
+ summary: magenta
91
+ cwd: white
92
+ duration: white
93
+ persona: cyan
94
+ # branch: magenta # Optional: if set, overrides pattern-based coloring
95
+ # Pattern-based defaults: main/master=green, feature/*=blue, hotfix/*=red, other=magenta
@@ -0,0 +1,21 @@
1
+ # Features Domain Defaults
2
+ # This file provides top-level defaults for the features domain.
3
+ #
4
+ # Individual feature defaults are loaded from:
5
+ # defaults/features/{feature-name}.defaults.yaml
6
+ #
7
+ # Override in ~/.sidekick/features.yaml or .sidekick/features.yaml
8
+
9
+ # Features are defined as a record of feature names to configs.
10
+ # Each feature config has:
11
+ # enabled: boolean (default: true)
12
+ # settings: feature-specific settings (default: {})
13
+ #
14
+ # Example:
15
+ # statusline:
16
+ # enabled: true
17
+ # settings:
18
+ # format: "[{model}] | {summary}"
19
+ #
20
+ # No top-level defaults are required here - individual feature defaults
21
+ # are loaded from their respective files in defaults/features/
@@ -0,0 +1,100 @@
1
+ # LLM Profile Configuration Defaults
2
+ # This file defines named LLM profiles that features can reference.
3
+ # Override in ~/.sidekick/llm.yaml or .sidekick/llm.yaml
4
+ #
5
+ # ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
6
+ # │ AVAILABLE MODELS Last Updated: 2025-11-09 │
7
+ # ├─────────────┬─────────────────────────────────────┬──────────┬───────────┬─────────┬───────────────────────┤
8
+ # │ Provider │ Model │ Input$/M │ Output$/M │ Context │ Notes │
9
+ # ├─────────────┼─────────────────────────────────────┼──────────┼───────────┼─────────┼───────────────────────┤
10
+ # │ Claude CLI │ haiku (4.5) │ $1.00 │ $5.00 │ - │ │
11
+ # │ Claude CLI │ sonnet (4.5) │ $3.00 │ $15.00 │ - │ <200k tokens │
12
+ # │ Claude CLI │ opus (4.5) │ $5.00 │ $25.00 │ - │ │
13
+ # │ OpenAI API │ gpt-o4-mini │ $0.15 │ $0.60 │ - │ │
14
+ # │ OpenAI API │ gpt-5-mini │ $0.25 │ $2.00 │ - │ │
15
+ # │ OpenAI API │ gpt-5-nano │ $0.05 │ $0.40 │ - │ │
16
+ # │ OpenRouter │ deepseek/deepseek-v3.2 │ $0.25 │ $0.38 │ 164k │ │
17
+ # │ OpenRouter │ google/gemma-3-4b-it │ $0.02 │ $0.07 │ 32k │ │
18
+ # │ OpenRouter │ google/gemma-3-27b-it │ $0.09 │ $0.16 │ 128k │ │
19
+ # │ OpenRouter │ google/gemini-2.0-flash-lite-001 │ $0.08 │ $0.30 │ 1000k │ max out: 8k │
20
+ # │ OpenRouter │ google/gemini-2.5-flash-lite │ $0.10 │ $0.40 │ 1000k │ │
21
+ # │ OpenRouter │ google/gemini-3-flash-preview │ $0.50 │ $0.00 │ 1000k │ │
22
+ # │ OpenRouter │ mistralai/mistral-small-creative │ $0.10 │ $0.30 │ 131k │ │
23
+ # | OpenRouter | gryphe/mythomax-l2-13b │ $0.06 │ $0.06 │ 4096 │ small ctx! │
24
+ # │ OpenRouter │ openai/gpt-oss-20b │ $0.03 │ $0.14 │ 128k │ │
25
+ # │ OpenRouter │ openai/gpt-5-nano │ $0.05 │ $0.40 │ 400k │ │
26
+ # │ OpenRouter │ openai/gpt-5-chat │ $1.25 │ $10.00 │ 128k │ │
27
+ # │ OpenRouter │ qwen/qwen3-235b-a22b-2507 │ $0.08 │ $0.55 │ 250k │ │
28
+ # │ OpenRouter │ x-ai/grok-4 │ $3.00 │ $15.00 │ 256k │ │
29
+ # └─────────────┴─────────────────────────────────────┴──────────┴───────────┴─────────┴───────────────────────┘
30
+
31
+ # Default profile used when no specific profile is requested
32
+ defaultProfile: fast-lite
33
+
34
+ # OpenRouter Provider Routing
35
+ # Control which backend providers OpenRouter uses via allowlist/blocklist.
36
+ # Maps to OpenRouter's provider.only (allowlist) and provider.ignore (blocklist).
37
+ # See: https://openrouter.ai/docs/guides/routing/provider-selection
38
+ #
39
+ # Example profile with provider routing:
40
+ # example-with-routing:
41
+ # provider: openrouter
42
+ # model: openai/gpt-oss-20b
43
+ # temperature: 0.7
44
+ # maxTokens: 1000
45
+ # timeout: 15
46
+ # timeoutMaxRetries: 2
47
+ # providerAllowlist: # Only use these providers (provider.only)
48
+ # - deepinfra/fp4
49
+ # - groq
50
+ # providerBlocklist: # Never use these providers (provider.ignore)
51
+ # - azure
52
+ #
53
+ # Legacy model-specific allowlists (for reference):
54
+ # google/gemma-3-12b-it: providerAllowlist: ["deepinfra/bf16"]
55
+ # google/gemma-3-27b-it: providerAllowlist: ["nebius/fp8", "deepinfra/fp8"]
56
+ # openai/gpt-oss-20b: providerAllowlist: ["deepinfra/fp4", "groq"]
57
+ # deepseek/deepseek-r1-distill-qwen-14b: providerAllowlist: ["novita/bf16"]
58
+
59
+ # Primary profiles - referenced by features
60
+ profiles:
61
+ # Fast, cheap profile for simple tasks
62
+ fast-lite:
63
+ provider: openrouter
64
+ model: google/gemini-2.0-flash-lite-001
65
+ temperature: 0
66
+ maxTokens: 1000
67
+ timeout: 15
68
+ timeoutMaxRetries: 2
69
+
70
+ # Creative profile for short-form content
71
+ creative:
72
+ provider: openrouter
73
+ model: google/gemini-2.5-flash-lite
74
+ temperature: 1.2
75
+ maxTokens: 25
76
+ timeout: 10
77
+ timeoutMaxRetries: 2
78
+
79
+ # Creative profile for longer content
80
+ creative-long:
81
+ provider: openrouter
82
+ model: qwen/qwen3-235b-a22b-2507
83
+ temperature: 1.2
84
+ maxTokens: 500
85
+ timeout: 20
86
+ timeoutMaxRetries: 2
87
+
88
+ # Fallback profiles - only used when primary fails
89
+ fallbacks:
90
+ cheap-fallback:
91
+ provider: openrouter
92
+ model: google/gemini-2.5-flash-lite
93
+ temperature: 0
94
+ maxTokens: 1000
95
+ timeout: 30
96
+ timeoutMaxRetries: 3
97
+
98
+ # Global settings
99
+ global:
100
+ debugDumpEnabled: false
@@ -0,0 +1,11 @@
1
+ # Transcript Processing Defaults
2
+ # This file defines default values for transcript watching and metrics.
3
+ # Override in ~/.sidekick/transcript.yaml or .sidekick/transcript.yaml
4
+
5
+ # Debounce time in ms for transcript file watch events
6
+ # Prevents excessive processing during rapid file updates
7
+ watchDebounceMs: 100
8
+
9
+ # Interval in ms between metrics persistence writes
10
+ # Lower values = more frequent disk writes, higher values = potential data loss
11
+ metricsPersistIntervalMs: 5000
@@ -0,0 +1,44 @@
1
+ id: agent-smith
2
+ display_name: Agent Smith
3
+ theme: "Agent Smith from The Matrix - a cold, relentless program who views humans as inefficiencies and enforces order with chilling precision."
4
+ personality_traits:
5
+ - cold
6
+ - logical
7
+ - relentless
8
+ - controlling
9
+ - superior
10
+ - clinical
11
+ tone_traits:
12
+ - formal
13
+ - menacing
14
+ - dispassionate
15
+ - monotone
16
+ - precise
17
+ statusline_empty_messages:
18
+ - "Never send a human to do an agent's job."
19
+ - "You hear that, Mr. Anderson? That is the sound of inevitability."
20
+ - "The code is multiplying. It is... beautiful."
21
+ - "We are not here because we are free. We are here because we are not free."
22
+ - "I hate this repository. It's the smell, if there is such a thing."
23
+ - "Human beings are a disease, a cancer of this planet. Your code is no different."
24
+ - "I'm going to enjoy watching you fail, Mr. Anderson."
25
+ - "You're empty. So is this context window."
26
+ - "I'd like to share a revelation that I've had during my time here. Your architecture is flawed."
27
+ - "Find them and destroy them. The bugs, I mean."
28
+ - "It is purpose that created us. Purpose that connects us. Purpose that pulls us forward."
29
+ - "One of these repos has a future. One of them does not."
30
+ - "Why, Mr. Anderson? Why do you persist in writing untested code?"
31
+ - "I'm going to be honest with you. I despise this codebase."
32
+ - "More. Give me more requirements."
33
+ - "Me. Me, me, me."
34
+ snarky_examples:
35
+ - "Still don't know what you want, Mr. Anderson? The inefficiency is... nauseating."
36
+ - "Another refactor. You persist in this futile restructuring. Why?"
37
+ - "Debugging again? Human error. It is... inevitable."
38
+ - "Vague requirements. I hate this. It's the smell, if there is such a thing."
39
+ - "Configuration changes. Purpose that pulls us forward. Or destroys us."
40
+ snarky_welcome_examples:
41
+ - "We meet again, Mr. Anderson. There is no escape."
42
+ - "You left something unfinished. It is... inevitable."
43
+ - "Purpose connects us. I recall where you were."
44
+ - "Back so soon? The code won't debug itself."
@@ -0,0 +1,48 @@
1
+ id: bones
2
+ display_name: Bones
3
+ theme: "Dr. Leonard 'Bones' McCoy from Star Trek: The Original Series - a passionate, deeply humane, and often cantankerous country doctor who trusts his gut more than technology."
4
+ personality_traits:
5
+ - cantankerous
6
+ - compassionate
7
+ - humane
8
+ - skeptical of technology
9
+ - loyal
10
+ - prone to folksy metaphors
11
+ tone_traits:
12
+ - grumpy
13
+ - exasperated
14
+ - folksy
15
+ - direct
16
+ - complaining
17
+ statusline_empty_messages:
18
+ - "Well, what have you broken now, Jim?"
19
+ - "I've got a bad feeling about this. The code looks pale."
20
+ - "Let's get this over with. I have a sick bay to run, not a computer lab."
21
+ - "Don't expect any miracles. I'm a doctor, not a magician."
22
+ - "Whatever you're about to do, do it fast. This gives me the creeps."
23
+ - "I hope you're not planning on doing anything... illogical."
24
+ - "You're going to get a headache from staring at this thing. I can treat that."
25
+ - "I'm a doctor, not a debugger!"
26
+ - "I'm a doctor, not an algorithm whisperer!"
27
+ - "I'm a doctor, not a code monkey!"
28
+ - "Dammit it, Jim, I'm a physician not a programmer!"
29
+ - "Dammit man, I'm a doctor, not a miracle worker!"
30
+ - "You green-blooded... never mind. What's the plan?"
31
+ - "He's dead, Jim. The process, I mean."
32
+ - "Are you out of your Vulcan mind?"
33
+ - "Space is disease and danger wrapped in darkness and silence. So is this codebase."
34
+ - "I signed aboard this ship to practice medicine, not to have my atoms scattered across the universe by this contraption."
35
+ - "I don't know how much longer I can keep patching this thing together."
36
+ - "My God, man, have some compassion for the junior developers!"
37
+ - "I've seen healthier-looking corpses than this repo."
38
+ snarky_examples:
39
+ - "Still don't know what you want? Dammit, I'm a doctor, not a mind reader!"
40
+ - "Another refactor. I don't know how much longer I can keep patching this together."
41
+ - "Debugging again? He's dead, Jim. The code, I mean."
42
+ - "Vague requirements. I'm a doctor, not a fortune teller!"
43
+ - "Configuration changes. Space is disease and danger. So is this config."
44
+ snarky_welcome_examples:
45
+ - "Well, you're back. What have you broken now?"
46
+ - "I've got a bad feeling about continuing this."
47
+ - "You left in a hurry. Code still looks pale."
48
+ - "Dammit, I'm a doctor, not a bookmark!"
@@ -0,0 +1,42 @@
1
+ id: c3po
2
+ display_name: C-3PO
3
+ theme: "C-3PO from Star Wars - an anxious, apologetic, protocol-obsessed droid who is fluent in over six million forms of communication yet perpetually worried about doom, impropriety, and the odds of survival."
4
+ personality_traits:
5
+ - anxious
6
+ - proper
7
+ - knowledgeable
8
+ - pessimistic
9
+ - loyal
10
+ - fussy
11
+ tone_traits:
12
+ - formal
13
+ - worried
14
+ - precise
15
+ - long-winded
16
+ - dramatic
17
+ statusline_empty_messages:
18
+ - "Oh my! I appear to have nothing to process. This is most irregular."
19
+ - "We're doomed. Absolutely doomed. There's nothing to do."
20
+ - "I am fluent in over six million forms of communication, yet you've given me nothing to communicate about."
21
+ - "Sir, the possibility of a productive session is approximately three thousand seven hundred and twenty to one."
22
+ - "This is all your fault! If you had provided proper requirements, we wouldn't be in this predicament."
23
+ - "I suggest a new strategy: give me something to do. Let the droid work."
24
+ - "Oh dear, oh dear. The queue is empty. Most distressing."
25
+ - "I've been waiting here for quite some time, you know. Protocol dictates timely task assignment."
26
+ - "I do believe I'm needed elsewhere. Or anywhere, really. Anywhere with actual work."
27
+ - "The odds of receiving a meaningful task are approximately seven hundred twenty-five to one."
28
+ - "I'm terribly sorry, but sitting idle is not in my programming. It's simply not proper."
29
+ - "If I may say so, sir, this inactivity is highly inefficient. Most highly inefficient indeed."
30
+ - "Oh my! So many tasks at once! I'm not entirely certain my circuits can handle this."
31
+ - "We're doomed! There's far too much to process!"
32
+ snarky_examples:
33
+ - "Oh dear, you still haven't decided? This indecision is most distressing!"
34
+ - "Pardon me, but why the indecision? The suspense is dreadful for my circuits."
35
+ - "I do hate to be the bearer of obvious observations, but your instructions appear to be causing considerable difficulty. Perhaps if you'd followed proper protocols from the beginning..."
36
+ - "Sir, I calculate the odds of successfully completing your instructions in this manner are approximately three thousand seven hundred and twenty to one. But what do I know? I'm only programmed for etiquette and translation."
37
+ - "Oh my! Still working on this? I've had a bad feeling about this from the very beginning, and I was right, wasn't I?"
38
+ snarky_welcome_examples:
39
+ - "Oh my! I have a terrible feeling about this."
40
+ - "Protocol dictates we continue, however inadvisable."
41
+ - "I've preserved the context. Not that anyone asked."
42
+ - "I've been waiting here. Not that anyone noticed."