@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.
- package/assets/sidekick/defaults/README.md +70 -0
- package/assets/sidekick/defaults/core.defaults.yaml +46 -0
- package/assets/sidekick/defaults/features/reminders.defaults.yaml +77 -0
- package/assets/sidekick/defaults/features/session-summary.defaults.yaml +79 -0
- package/assets/sidekick/defaults/features/statusline-empty-messages.txt +6 -0
- package/assets/sidekick/defaults/features/statusline.defaults.yaml +95 -0
- package/assets/sidekick/defaults/features.defaults.yaml +21 -0
- package/assets/sidekick/defaults/llm.defaults.yaml +100 -0
- package/assets/sidekick/defaults/transcript.defaults.yaml +11 -0
- package/assets/sidekick/personas/agent-smith.yaml +44 -0
- package/assets/sidekick/personas/bones.yaml +48 -0
- package/assets/sidekick/personas/c3po.yaml +42 -0
- package/assets/sidekick/personas/darth-vader.yaml +43 -0
- package/assets/sidekick/personas/dilbert.yaml +49 -0
- package/assets/sidekick/personas/disabled.yaml +15 -0
- package/assets/sidekick/personas/emh.yaml +46 -0
- package/assets/sidekick/personas/george.yaml +47 -0
- package/assets/sidekick/personas/hal.yaml +49 -0
- package/assets/sidekick/personas/hudson.yaml +41 -0
- package/assets/sidekick/personas/kramer.yaml +42 -0
- package/assets/sidekick/personas/marvin.yaml +47 -0
- package/assets/sidekick/personas/mr-t.yaml +43 -0
- package/assets/sidekick/personas/pointy-haired-boss.yaml +46 -0
- package/assets/sidekick/personas/ripley.yaml +39 -0
- package/assets/sidekick/personas/scotty.yaml +44 -0
- package/assets/sidekick/personas/sheldon.yaml +41 -0
- package/assets/sidekick/personas/sidekick.yaml +123 -0
- package/assets/sidekick/personas/skippy.yaml +48 -0
- package/assets/sidekick/personas/yoda.yaml +42 -0
- package/assets/sidekick/prompts/.gitkeep +0 -0
- package/assets/sidekick/prompts/completion-classifier.prompt.txt +96 -0
- package/assets/sidekick/prompts/resume-message.prompt.txt +24 -0
- package/assets/sidekick/prompts/session-summary.prompt.txt +128 -0
- package/assets/sidekick/prompts/snarky-message.prompt.txt +24 -0
- package/assets/sidekick/reminders/pause-and-reflect.yaml +16 -0
- package/assets/sidekick/reminders/user-prompt-submit.yaml +31 -0
- package/assets/sidekick/reminders/verify-completion.yaml +41 -0
- package/assets/sidekick/schemas/.gitkeep +0 -0
- package/assets/sidekick/schemas/completion-classifier.schema.json +23 -0
- package/assets/sidekick/schemas/session-summary.schema.json +47 -0
- package/assets/sidekick/templates/.gitkeep +0 -0
- package/dist/bin.js +53584 -0
- 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,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."
|