@scotthamilton77/sidekick 0.1.3 → 0.1.5

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.
@@ -11,6 +11,11 @@ settings:
11
11
  # Fires when: toolsThisTurn >= pause_and_reflect_threshold
12
12
  pause_and_reflect_threshold: 60
13
13
 
14
+ # Minimum number of conversation messages (user + assistant turns) between
15
+ # user-prompt-submit reminder injections. The reminder always fires on the
16
+ # first prompt of a session, then waits until this many messages have elapsed.
17
+ user_prompt_submit_threshold: 10
18
+
14
19
  # Glob patterns that trigger verify-completion reminder on file edit.
15
20
  # Uses picomatch syntax: https://github.com/micromatch/picomatch
16
21
  # Only edits to files matching these patterns will stage the reminder.
@@ -63,6 +68,262 @@ settings:
63
68
  # -1 = unlimited (default), 0 = disabled, positive = exact limit
64
69
  max_verification_cycles: -1
65
70
 
71
+ # Per-tool verification tracking.
72
+ # Each tool category tracks whether its verification command has been run.
73
+ # When source files are edited, tools transition to STAGED (needing re-run).
74
+ # When the tool's command is observed, it transitions to VERIFIED.
75
+ # After VERIFIED, a configurable number of file edits (clearing_threshold) triggers re-staging.
76
+ #
77
+ # Pattern fields:
78
+ # tool_id: stable key for override/removal by project or user config
79
+ # tool: token pattern for matching (null = disabled)
80
+ # scope: metadata — project, package, or file
81
+ verification_tools:
82
+ build:
83
+ enabled: true
84
+ patterns:
85
+ # TypeScript/JavaScript
86
+ - tool_id: tsc
87
+ tool: "tsc"
88
+ scope: project
89
+ - tool_id: esbuild
90
+ tool: "esbuild"
91
+ scope: file
92
+ - tool_id: pnpm-filter-build
93
+ tool: "pnpm --filter * build"
94
+ scope: package
95
+ - tool_id: pnpm-build
96
+ tool: "pnpm build"
97
+ scope: project
98
+ - tool_id: npm-build
99
+ tool: "npm run build"
100
+ scope: project
101
+ - tool_id: yarn-workspace-build
102
+ tool: "yarn workspace * build"
103
+ scope: package
104
+ - tool_id: yarn-build
105
+ tool: "yarn build"
106
+ scope: project
107
+ # Python
108
+ - tool_id: python-setup-build
109
+ tool: "python setup.py build"
110
+ scope: project
111
+ - tool_id: pip-install
112
+ tool: "pip install"
113
+ scope: project
114
+ - tool_id: poetry-build
115
+ tool: "poetry build"
116
+ scope: project
117
+ # JVM
118
+ - tool_id: mvn-compile
119
+ tool: "mvn compile"
120
+ scope: project
121
+ - tool_id: mvn-package
122
+ tool: "mvn package"
123
+ scope: project
124
+ - tool_id: gradle-build
125
+ tool: "gradle build"
126
+ scope: project
127
+ - tool_id: gradlew-build
128
+ tool: "./gradlew build"
129
+ scope: project
130
+ # Go
131
+ - tool_id: go-build
132
+ tool: "go build"
133
+ scope: project
134
+ # Rust
135
+ - tool_id: cargo-build
136
+ tool: "cargo build"
137
+ scope: project
138
+ # C/C++
139
+ - tool_id: make-build
140
+ tool: "make build"
141
+ scope: project
142
+ - tool_id: make-default
143
+ tool: "make"
144
+ scope: project
145
+ - tool_id: cmake-build
146
+ tool: "cmake --build"
147
+ scope: project
148
+ # Containers
149
+ - tool_id: docker-build
150
+ tool: "docker build"
151
+ scope: project
152
+ clearing_threshold: 3
153
+ clearing_patterns:
154
+ - "**/*.ts"
155
+ - "**/*.tsx"
156
+ - "**/*.js"
157
+ - "**/*.jsx"
158
+ - "**/*.py"
159
+ - "**/*.java"
160
+ - "**/*.kt"
161
+ - "**/*.go"
162
+ - "**/*.rs"
163
+ - "**/*.c"
164
+ - "**/*.cpp"
165
+ - "**/*.cs"
166
+ typecheck:
167
+ enabled: true
168
+ patterns:
169
+ - tool_id: tsc-noEmit
170
+ tool: "tsc --noEmit"
171
+ scope: project
172
+ - tool_id: pnpm-filter-typecheck
173
+ tool: "pnpm --filter * typecheck"
174
+ scope: package
175
+ - tool_id: pnpm-typecheck
176
+ tool: "pnpm typecheck"
177
+ scope: project
178
+ - tool_id: npm-typecheck
179
+ tool: "npm run typecheck"
180
+ scope: project
181
+ - tool_id: yarn-workspace-typecheck
182
+ tool: "yarn workspace * typecheck"
183
+ scope: package
184
+ - tool_id: yarn-typecheck
185
+ tool: "yarn typecheck"
186
+ scope: project
187
+ - tool_id: mypy
188
+ tool: "mypy"
189
+ scope: project
190
+ - tool_id: pyright
191
+ tool: "pyright"
192
+ scope: project
193
+ - tool_id: pytype
194
+ tool: "pytype"
195
+ scope: project
196
+ - tool_id: go-vet
197
+ tool: "go vet"
198
+ scope: project
199
+ clearing_threshold: 3
200
+ clearing_patterns:
201
+ - "**/*.ts"
202
+ - "**/*.tsx"
203
+ - "**/*.py"
204
+ - "**/*.go"
205
+ test:
206
+ enabled: true
207
+ patterns:
208
+ - tool_id: vitest
209
+ tool: "vitest"
210
+ scope: project
211
+ - tool_id: jest
212
+ tool: "jest"
213
+ scope: project
214
+ - tool_id: pnpm-filter-test
215
+ tool: "pnpm --filter * test"
216
+ scope: package
217
+ - tool_id: pnpm-test
218
+ tool: "pnpm test"
219
+ scope: project
220
+ - tool_id: npm-test
221
+ tool: "npm test"
222
+ scope: project
223
+ - tool_id: yarn-workspace-test
224
+ tool: "yarn workspace * test"
225
+ scope: package
226
+ - tool_id: yarn-test
227
+ tool: "yarn test"
228
+ scope: project
229
+ - tool_id: pytest
230
+ tool: "pytest"
231
+ scope: project
232
+ - tool_id: python-pytest
233
+ tool: "python -m pytest"
234
+ scope: project
235
+ - tool_id: python-unittest
236
+ tool: "python -m unittest"
237
+ scope: project
238
+ - tool_id: mvn-test
239
+ tool: "mvn test"
240
+ scope: project
241
+ - tool_id: gradle-test
242
+ tool: "gradle test"
243
+ scope: project
244
+ - tool_id: gradlew-test
245
+ tool: "./gradlew test"
246
+ scope: project
247
+ - tool_id: go-test
248
+ tool: "go test"
249
+ scope: project
250
+ - tool_id: cargo-test
251
+ tool: "cargo test"
252
+ scope: project
253
+ - tool_id: dotnet-test
254
+ tool: "dotnet test"
255
+ scope: project
256
+ - tool_id: make-test
257
+ tool: "make test"
258
+ scope: project
259
+ clearing_threshold: 3
260
+ clearing_patterns:
261
+ - "**/*.ts"
262
+ - "**/*.tsx"
263
+ - "**/*.js"
264
+ - "**/*.jsx"
265
+ - "**/*.py"
266
+ - "**/*.java"
267
+ - "**/*.kt"
268
+ - "**/*.go"
269
+ - "**/*.rs"
270
+ - "**/*.test.*"
271
+ - "**/*.spec.*"
272
+ - "**/test_*"
273
+ lint:
274
+ enabled: true
275
+ patterns:
276
+ - tool_id: eslint
277
+ tool: "eslint"
278
+ scope: project
279
+ - tool_id: pnpm-filter-lint
280
+ tool: "pnpm --filter * lint"
281
+ scope: package
282
+ - tool_id: pnpm-lint
283
+ tool: "pnpm lint"
284
+ scope: project
285
+ - tool_id: npm-lint
286
+ tool: "npm run lint"
287
+ scope: project
288
+ - tool_id: yarn-workspace-lint
289
+ tool: "yarn workspace * lint"
290
+ scope: package
291
+ - tool_id: yarn-lint
292
+ tool: "yarn lint"
293
+ scope: project
294
+ - tool_id: ruff
295
+ tool: "ruff"
296
+ scope: project
297
+ - tool_id: flake8
298
+ tool: "flake8"
299
+ scope: project
300
+ - tool_id: pylint
301
+ tool: "pylint"
302
+ scope: project
303
+ - tool_id: golangci-lint
304
+ tool: "golangci-lint"
305
+ scope: project
306
+ - tool_id: cargo-clippy
307
+ tool: "cargo clippy"
308
+ scope: project
309
+ - tool_id: ktlint
310
+ tool: "ktlint"
311
+ scope: project
312
+ - tool_id: dotnet-format
313
+ tool: "dotnet format"
314
+ scope: project
315
+ clearing_threshold: 5
316
+ clearing_patterns:
317
+ - "**/*.ts"
318
+ - "**/*.tsx"
319
+ - "**/*.js"
320
+ - "**/*.jsx"
321
+ - "**/*.py"
322
+ - "**/*.java"
323
+ - "**/*.kt"
324
+ - "**/*.go"
325
+ - "**/*.rs"
326
+
66
327
  # Smart completion detection settings
67
328
  # Classifies assistant's stopping intent to avoid blocking when not claiming completion
68
329
  completion_detection:
@@ -112,3 +112,6 @@ settings:
112
112
  # Applied AFTER allowList/blockList filtering.
113
113
  # Example: { darth-vader: 100, emperor: 50 }
114
114
  weights: {}
115
+ # Preserve persona across /clear instead of re-rolling
116
+ # When true, /clear keeps the same persona. When false, a new persona is randomly selected.
117
+ persistThroughClear: true
@@ -40,7 +40,7 @@ settings:
40
40
  # With buffer: "{tokenUsageActual}|{tokenUsageEffective}" → "45k|90k"
41
41
  # Verbose: "{contextBar} {tokenUsageActual}/{contextWindow} ({tokenPercentageEffective})"
42
42
  #
43
- format: "{personaName,prefix='[',suffix='] | '}{model,prefix='[',suffix='] | '}{contextBar} {tokenPercentageActual} | {logs} | {cwd}{branch}\n{title} | {summary}"
43
+ format: "{personaName,prefix='[',suffix='] | '}{model,prefix='[',suffix='] | '}{contextBar} {tokenPercentageActual} | {logs} | {cwd}{branch} | {title}\n{summary}"
44
44
 
45
45
  # Threshold configuration for visual warnings
46
46
  thresholds:
@@ -126,6 +126,44 @@ Users often specify both a methodology and a goal. The methodology is NOT the ti
126
126
  If removing these leaves nothing meaningful, dig deeper into the transcript for the actual goal.
127
127
  </heuristic>
128
128
  </outcome_vs_approach>
129
+ <title_stability>
130
+ CRITICAL: The session title is an ANCHOR, not a weather vane.
131
+
132
+ When previousConfidence is >0.8, the title has been validated. It should only change
133
+ if the user genuinely pivots to a different task — not because they issued a
134
+ procedural or mechanical instruction.
135
+
136
+ <procedural_instructions>
137
+ These are session-ending mechanics, NOT session-defining work:
138
+ - Git operations: commit, push, pull, rebase, merge, stash, checkout, branch
139
+ - PR/review: create PR, open PR, merge PR, request review, approve
140
+ - Deployment: deploy, publish, release, push to remote
141
+ - Housekeeping: clean up, close issues, update status, run linters
142
+
143
+ When the most recent user message is procedural:
144
+ - session_title: KEEP the established title (do not change)
145
+ - latest_intent: Freely reflect the procedural action
146
+ - pivot_detected: false
147
+ </procedural_instructions>
148
+
149
+ <stability_bias>
150
+ Title change threshold scales with confidence:
151
+ - previousConfidence >0.8: Only change on genuine task pivot (new domain, new goal)
152
+ - previousConfidence 0.6-0.8: Refine freely (more specific on same topic),
153
+ but only pivot if the new direction is clearly unrelated
154
+ - previousConfidence <=0.5: Change freely — direction is still forming
155
+
156
+ Ask: "If someone reviewed this session tomorrow, would they say the user
157
+ switched projects — or just finished up their current one?"
158
+ </stability_bias>
159
+
160
+ <edge_cases>
161
+ - "Set up CI/CD pipeline" after working on a feature -> IS a pivot (new goal)
162
+ - "Push it" after working on a feature -> NOT a pivot (finishing current work)
163
+ - "Now let's work on the auth bug" -> IS a pivot (explicitly new task)
164
+ - "Create a PR for this" -> NOT a pivot (shipping current work)
165
+ </edge_cases>
166
+ </title_stability>
129
167
  </session_title_rules>
130
168
 
131
169
  <latest_intent_rules>
@@ -3,7 +3,7 @@
3
3
  id: user-prompt-submit
4
4
  blocking: false
5
5
  priority: 10
6
- persistent: true
6
+ persistent: false
7
7
 
8
8
  additionalContext: |
9
9
  <do-immediately>
@@ -0,0 +1,15 @@
1
+ # vc-build.yaml
2
+ # Per-tool verification reminder: build step
3
+ id: vc-build
4
+ blocking: true
5
+ priority: 50
6
+ persistent: false
7
+
8
+ additionalContext: |
9
+ <vc-build>
10
+ You have modified source files but have not run a build step.
11
+ Run the project's build command before claiming completion.
12
+ </vc-build>
13
+
14
+ userMessage: "Verification needed: build not run since last code changes"
15
+ reason: "Source files modified without subsequent build verification"
@@ -0,0 +1,15 @@
1
+ # vc-lint.yaml
2
+ # Per-tool verification reminder: linting
3
+ id: vc-lint
4
+ blocking: true
5
+ priority: 50
6
+ persistent: false
7
+
8
+ additionalContext: |
9
+ <vc-lint>
10
+ You have modified source files but have not run the linter.
11
+ Run the project's lint command before claiming completion.
12
+ </vc-lint>
13
+
14
+ userMessage: "Verification needed: lint not run since last code changes"
15
+ reason: "Source files modified without subsequent lint verification"
@@ -0,0 +1,15 @@
1
+ # vc-test.yaml
2
+ # Per-tool verification reminder: test suite
3
+ id: vc-test
4
+ blocking: true
5
+ priority: 50
6
+ persistent: false
7
+
8
+ additionalContext: |
9
+ <vc-test>
10
+ You have modified source files but have not run tests.
11
+ Run the relevant test suite before claiming completion.
12
+ </vc-test>
13
+
14
+ userMessage: "Verification needed: tests not run since last code changes"
15
+ reason: "Source files modified without subsequent test verification"
@@ -0,0 +1,15 @@
1
+ # vc-typecheck.yaml
2
+ # Per-tool verification reminder: type checking
3
+ id: vc-typecheck
4
+ blocking: true
5
+ priority: 50
6
+ persistent: false
7
+
8
+ additionalContext: |
9
+ <vc-typecheck>
10
+ You have modified source files but have not run a type check.
11
+ Run the project's typecheck command before claiming completion.
12
+ </vc-typecheck>
13
+
14
+ userMessage: "Verification needed: typecheck not run since last code changes"
15
+ reason: "Source files modified without subsequent typecheck verification"
@@ -1,8 +1,9 @@
1
1
  # verify-completion.yaml
2
- # Blocks execution before task completion to enforce verification
2
+ # Wrapper reminder that aggregates per-tool VC reminders.
3
+ # Priority 51 ensures this is primary (consumed first); per-tool reminders at 50 are secondaries.
3
4
  id: verify-completion
4
5
  blocking: true
5
- priority: 50
6
+ priority: 51
6
7
  persistent: false
7
8
 
8
9
  additionalContext: |
@@ -14,24 +15,8 @@ additionalContext: |
14
15
  - The verification evidence is done just before this reminder was triggered.
15
16
  - You're not claiming "done" but stopping to give an update or ask for more info.
16
17
 
17
- Otherwise, this step is mandatory to ensure quality and completeness. Make sure you're really complete, then provide a revised report to the user.
18
-
19
- For significant (more than just a few lines) code changes (only if not already done recently):
20
- - Run build: `pnpm build` (excludes test files - both required)
21
- - Run relevant tests: `pnpm test` (targeted tests for changed code)
22
- - Run the `code-simplifier` agent to simplify and refine the code for clarity and maintainability.
23
- - Run the `code-reviewer` agent to review your changes against the plan and coding standards.
24
- - If your changes impact existing documentation that you haven't already updated,
25
- inform the user and ask whether this should be updated as a next step.
26
-
27
- General:
28
- - Confirm all requirements from the original request are met
29
- - Check for unintended side effects or regressions
30
- - Ensure no temporary files, debug code, or stray changes remain
31
- - DON'T COMMIT unless explicitly instructed. User says "make changes" ≠ "commit changes". Wait for explicit approval.
18
+ Otherwise, this step is mandatory. The following verification steps are outstanding:
32
19
  </completion-verification-required>
33
- For Code Changes:
34
20
 
35
21
  userMessage: "Asking the agent to verify completion before stopping..."
36
-
37
- reason: "Verify completion before stopping - did you run tests and checks?"
22
+ reason: "Verify completion before stopping - outstanding verification steps detected"