one-code-extension 0.4.0 → 0.5.0
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/README.md +219 -219
- package/agents/general-purpose.md +2 -2
- package/docs/guide/README.md +2 -1
- package/docs/guide/bring-your-claude-code-setup.md +60 -9
- package/docs/guide/configuration.md +48 -14
- package/docs/guide/differences-from-claude-code.md +32 -23
- package/docs/guide/doctor.md +20 -13
- package/docs/guide/hooks.md +18 -3
- package/docs/guide/installation.md +27 -4
- package/docs/guide/permissions-modes-and-auto-mode.md +225 -49
- package/docs/guide/providers-and-models.md +137 -54
- package/docs/guide/reference.md +27 -15
- package/docs/guide/sessions-and-context.md +69 -16
- package/docs/guide/skills-plugins-and-mcp.md +57 -20
- package/docs/guide/subagents-and-workflows.md +95 -29
- package/docs/guide/tasks-and-background-work.md +101 -26
- package/docs/guide/terminal-interface.md +24 -12
- package/docs/guide/tools.md +46 -5
- package/docs/guide/troubleshooting.md +13 -9
- package/docs/guide/windows.md +66 -34
- package/extensions/artifacts/gallery.ts +227 -0
- package/extensions/artifacts/index.ts +288 -0
- package/extensions/artifacts/store.ts +570 -0
- package/extensions/artifacts/viewer.ts +199 -0
- package/extensions/ask-user/description.ts +67 -0
- package/extensions/ask-user/dialogs.ts +80 -0
- package/extensions/ask-user/index.ts +37 -33
- package/extensions/ask-user/questions.ts +32 -7
- package/extensions/ask-user/widget.ts +45 -25
- package/extensions/auto-mode/actions.ts +6 -0
- package/extensions/auto-mode/cache.ts +88 -0
- package/extensions/auto-mode/classifier-prompt.ts +5 -4
- package/extensions/auto-mode/classifier.ts +290 -65
- package/extensions/auto-mode/config.ts +72 -20
- package/extensions/auto-mode/decision-log.ts +2 -0
- package/extensions/auto-mode/defaults.ts +1 -1
- package/extensions/auto-mode/denials.ts +123 -0
- package/extensions/auto-mode/git-checkout-programs.ts +187 -0
- package/extensions/auto-mode/git-status-meta.ts +159 -0
- package/extensions/auto-mode/history.ts +189 -0
- package/extensions/auto-mode/instructions.ts +58 -52
- package/extensions/auto-mode/model-select.ts +159 -134
- package/extensions/auto-mode/paths.ts +57 -5
- package/extensions/auto-mode/pause.ts +57 -2
- package/extensions/auto-mode/prompt.ts +37 -21
- package/extensions/auto-mode/read-only-options.ts +724 -0
- package/extensions/auto-mode/resolved-paths-meta.ts +133 -0
- package/extensions/auto-mode/rules.ts +18 -1
- package/extensions/auto-mode/safety-floor.ts +361 -18
- package/extensions/auto-mode/setup-run.ts +20 -14
- package/extensions/auto-mode/shell-analysis.ts +764 -490
- package/extensions/auto-mode/shell-parse.ts +885 -0
- package/extensions/auto-mode/system-note.ts +33 -0
- package/extensions/auto-mode/transcript.ts +80 -51
- package/extensions/background/cron.ts +515 -0
- package/extensions/background/index.ts +514 -236
- package/extensions/background/loop-fire.ts +136 -0
- package/extensions/background/loop-preamble.ts +59 -0
- package/extensions/background/loop-skill.ts +163 -0
- package/extensions/background/monitor-batch.ts +53 -0
- package/extensions/background/noop-fold.ts +128 -0
- package/extensions/background/switch-guard.ts +52 -0
- package/extensions/background/wakeup.ts +159 -55
- package/extensions/bash/background.ts +53 -17
- package/extensions/bash/child.ts +7 -0
- package/extensions/bash/description.ts +188 -0
- package/extensions/bash/guards.ts +15 -67
- package/extensions/bash/index.ts +88 -35
- package/extensions/branding/compaction-keep.ts +63 -0
- package/extensions/branding/declined.ts +22 -0
- package/extensions/branding/index.ts +133 -9
- package/extensions/branding/prompt-editor.ts +53 -6
- package/extensions/branding/queued-edit.ts +31 -0
- package/extensions/branding/replaced-builtins.ts +68 -0
- package/extensions/branding/startup.ts +33 -71
- package/extensions/btw/index.ts +229 -71
- package/extensions/btw/panel.ts +228 -100
- package/extensions/btw/prompt.ts +41 -4
- package/extensions/claude-compat/index.ts +7 -11
- package/extensions/claude-context/index.ts +446 -58
- package/extensions/compaction/cut.ts +157 -0
- package/extensions/compaction/index.ts +216 -75
- package/extensions/compaction/kept-thinking.ts +62 -0
- package/extensions/compaction/prompt.ts +15 -12
- package/extensions/context-budget/index.ts +24 -5
- package/extensions/context-management/index.ts +25 -0
- package/extensions/doctor/build.ts +59 -8
- package/extensions/doctor/builtins.ts +84 -0
- package/extensions/doctor/cli.ts +7 -1
- package/extensions/doctor/compat.ts +88 -23
- package/extensions/doctor/dependencies.ts +41 -5
- package/extensions/doctor/fix-prompt.ts +9 -2
- package/extensions/doctor/index.ts +102 -58
- package/extensions/doctor/models.ts +102 -63
- package/extensions/doctor/presets.ts +42 -27
- package/extensions/doctor/report.ts +19 -2
- package/extensions/doctor/viewer.ts +49 -27
- package/extensions/effort/index.ts +72 -19
- package/extensions/effort/settings.ts +21 -0
- package/extensions/effort/slider.ts +24 -20
- package/extensions/exit/index.ts +32 -1
- package/extensions/file-tracker/index.ts +337 -26
- package/extensions/file-tracker/replay.ts +96 -10
- package/extensions/file-tracker/restore.ts +63 -0
- package/extensions/file-tracker/results.ts +66 -0
- package/extensions/file-tracker/shell-reads.ts +211 -0
- package/extensions/file-tracker/tracker.ts +32 -15
- package/extensions/footer/footer-line.ts +45 -24
- package/extensions/footer/index.ts +47 -2
- package/extensions/footer/pr.ts +34 -5
- package/extensions/hooks/compaction.ts +7 -0
- package/extensions/hooks/executor.ts +32 -30
- package/extensions/hooks/index.ts +198 -31
- package/extensions/hooks/matcher.ts +3 -0
- package/extensions/hooks/protocol.ts +41 -3
- package/extensions/hooks/settings.ts +50 -19
- package/extensions/hooks/subagent-bridge.ts +2 -0
- package/extensions/hooks/trust.ts +13 -5
- package/extensions/idle-compact/index.ts +119 -0
- package/extensions/idle-compact/policy.ts +143 -0
- package/extensions/init/index.ts +11 -10
- package/extensions/init/prompt.ts +25 -32
- package/extensions/interrupted/index.ts +13 -1
- package/extensions/kept-thinking/index.ts +27 -0
- package/extensions/lib/agent-cron.ts +130 -0
- package/extensions/lib/agent-loader.ts +15 -1
- package/extensions/lib/agent-view.ts +85 -0
- package/extensions/lib/anthropic-payload.ts +82 -1
- package/extensions/lib/anthropic-server-call.ts +230 -0
- package/extensions/lib/anthropic-server-tools.ts +485 -0
- package/extensions/lib/app-launch.mjs +94 -0
- package/extensions/lib/argument-hints.ts +190 -0
- package/extensions/lib/atomic-write.ts +6 -2
- package/extensions/lib/auto-memory.ts +75 -0
- package/extensions/lib/bash-parser.ts +84 -0
- package/extensions/lib/btw-fork.ts +93 -0
- package/extensions/lib/child-extensions.ts +42 -0
- package/extensions/lib/child-writes.ts +45 -0
- package/extensions/lib/claude-context.ts +515 -100
- package/extensions/lib/claude-external-includes.ts +68 -0
- package/extensions/lib/claude-id.ts +22 -0
- package/extensions/lib/claude-rules.ts +323 -0
- package/extensions/lib/claude-settings.ts +76 -4
- package/extensions/lib/compaction-boundary.ts +36 -0
- package/extensions/lib/compaction-keep.mjs +83 -0
- package/extensions/lib/config-mode.ts +112 -0
- package/extensions/lib/consent-dialogs.ts +63 -0
- package/extensions/lib/consent-preview.ts +5 -1
- package/extensions/lib/consent-stores.ts +48 -0
- package/extensions/lib/context-facts.ts +78 -0
- package/extensions/lib/context-stack.ts +81 -0
- package/extensions/lib/deferred.ts +219 -25
- package/extensions/lib/dock-rows.ts +60 -0
- package/extensions/lib/empty-tool-result.ts +27 -0
- package/extensions/lib/environment-block.ts +76 -0
- package/extensions/lib/fetch-timeout.ts +24 -6
- package/extensions/{system-prompt → lib}/git-status.ts +51 -13
- package/extensions/lib/git.ts +75 -13
- package/extensions/lib/grammars/LICENSE-tree-sitter-bash +21 -0
- package/extensions/lib/grammars/README.md +2 -0
- package/extensions/lib/grammars/tree-sitter-bash.wasm +0 -0
- package/extensions/lib/guide-docs.ts +45 -0
- package/extensions/lib/headless-output.ts +46 -0
- package/extensions/lib/hook-gate.ts +7 -7
- package/extensions/lib/interrupt.ts +20 -4
- package/extensions/lib/key-input.ts +455 -0
- package/extensions/lib/keys.ts +14 -1
- package/extensions/lib/local-command.ts +47 -13
- package/extensions/lib/mcp-overrides.ts +1 -1
- package/extensions/lib/mcp-share.ts +46 -0
- package/extensions/lib/memory-content.ts +146 -0
- package/extensions/lib/memory-index.ts +18 -0
- package/extensions/lib/memory.ts +134 -123
- package/extensions/lib/model-catalog/huggingface.json +174 -0
- package/extensions/lib/model-catalog/models-dev.json +18297 -0
- package/extensions/lib/model-catalog/openrouter.json +5252 -0
- package/extensions/lib/model-catalog-data.ts +513 -0
- package/extensions/lib/model-catalog.ts +462 -0
- package/extensions/lib/model-choice-warnings.ts +137 -0
- package/extensions/lib/model-pairings.ts +152 -0
- package/extensions/{auto-mode → lib}/model-picker.ts +26 -43
- package/extensions/lib/model-policy.ts +112 -15
- package/extensions/lib/model-tier.ts +283 -355
- package/extensions/lib/model-unusable.ts +1 -1
- package/extensions/lib/newer-model.ts +100 -0
- package/extensions/lib/notices.ts +87 -0
- package/extensions/lib/notifications.ts +308 -64
- package/extensions/lib/one-code-settings.ts +74 -8
- package/extensions/lib/open-browser.ts +63 -0
- package/extensions/lib/openrouter-generation.ts +94 -0
- package/extensions/lib/operation-deadline.ts +30 -0
- package/extensions/lib/original-command.ts +4 -4
- package/extensions/lib/package-version.ts +1 -1
- package/extensions/lib/panel-focus.ts +134 -0
- package/extensions/lib/paths.ts +17 -2
- package/extensions/lib/permission-gate.ts +72 -6
- package/extensions/lib/persisted-output.ts +60 -8
- package/extensions/lib/pi-ai-estimate.ts +19 -3
- package/extensions/lib/pi-version.ts +21 -2
- package/extensions/lib/plan-mode-channels.ts +20 -5
- package/extensions/lib/plugins.ts +26 -17
- package/extensions/lib/powershell-parse-script.ts +208 -0
- package/extensions/lib/powershell-parser.ts +344 -0
- package/extensions/lib/process-tree.ts +131 -8
- package/extensions/lib/prompt-options.ts +82 -0
- package/extensions/lib/queued-delivery.ts +44 -0
- package/extensions/lib/reminders.ts +364 -58
- package/extensions/lib/replaced-builtins.mjs +199 -0
- package/extensions/lib/replay-call.ts +70 -0
- package/extensions/lib/request-replay.ts +439 -0
- package/extensions/lib/scratchpad.ts +81 -14
- package/extensions/lib/send-now-channel.ts +7 -0
- package/extensions/lib/session-model-tier.ts +51 -0
- package/extensions/lib/session-work.ts +64 -0
- package/extensions/lib/settings-channels.ts +4 -4
- package/extensions/lib/shell-exit-semantics.ts +170 -0
- package/extensions/lib/shell-quote.ts +11 -0
- package/extensions/lib/shell-result.ts +70 -0
- package/extensions/lib/shell-spawn.ts +70 -6
- package/extensions/lib/shell-tool.ts +75 -25
- package/extensions/lib/side-call-cache.ts +124 -0
- package/extensions/lib/side-call-run.ts +96 -0
- package/extensions/lib/side-call-usage.ts +38 -0
- package/extensions/lib/side-call.ts +13 -1
- package/extensions/lib/single-flight.ts +18 -0
- package/extensions/lib/skill-body.ts +42 -0
- package/extensions/lib/skill-scan.ts +63 -24
- package/extensions/lib/spill-file.ts +140 -0
- package/extensions/lib/subagent-handback.ts +113 -0
- package/extensions/lib/system-role.ts +156 -0
- package/extensions/lib/terminal-text.ts +114 -0
- package/extensions/lib/text-width.ts +47 -16
- package/extensions/lib/timer-ops.ts +20 -0
- package/extensions/lib/tool-additions.ts +149 -0
- package/extensions/lib/tool-call-corruption.ts +134 -0
- package/extensions/lib/tool-path.ts +66 -0
- package/extensions/lib/tool-variants.ts +69 -0
- package/extensions/lib/tui-render.ts +255 -27
- package/extensions/lib/turn-budget-layout.ts +143 -0
- package/extensions/lib/update-check.mjs +15 -2
- package/extensions/lib/usage-bus.ts +1 -1
- package/extensions/lib/user-denial.ts +38 -0
- package/extensions/lib/workspace-channel.ts +16 -0
- package/extensions/lib/worktree-channel.ts +31 -3
- package/extensions/lib/worktree-isolation.ts +40 -10
- package/extensions/lsp/client.ts +8 -9
- package/extensions/lsp/index.ts +70 -4
- package/extensions/lsp/keep-alive.ts +1 -1
- package/extensions/lsp/trust.ts +119 -0
- package/extensions/lsp/watcher.ts +1 -1
- package/extensions/mcp/announce.ts +87 -5
- package/extensions/mcp/client.ts +161 -48
- package/extensions/mcp/config.ts +132 -8
- package/extensions/mcp/discovery.ts +19 -0
- package/extensions/mcp/index.ts +209 -71
- package/extensions/mcp/oauth/browser.ts +38 -17
- package/extensions/mcp/oauth/flow.ts +25 -17
- package/extensions/mcp/oauth/provider.ts +14 -8
- package/extensions/mcp/oauth/store.ts +34 -16
- package/extensions/mcp/panel/keys.ts +12 -11
- package/extensions/mcp/panel/render.ts +9 -6
- package/extensions/mcp/schema.ts +104 -5
- package/extensions/mcp/trust.ts +151 -67
- package/extensions/memory/entries.ts +23 -14
- package/extensions/memory/index.ts +134 -28
- package/extensions/memory/open-external.ts +33 -18
- package/extensions/memory/panel.ts +135 -26
- package/extensions/newer-model/index.ts +31 -0
- package/extensions/notebook/description.ts +18 -0
- package/extensions/notebook/index.ts +6 -5
- package/extensions/notebook/notebook.ts +1 -1
- package/extensions/permissions/index.ts +1300 -381
- package/extensions/permissions/matcher.ts +425 -74
- package/extensions/permissions/modes.ts +6 -4
- package/extensions/permissions/panel/host.ts +130 -0
- package/extensions/permissions/panel/keys.ts +48 -0
- package/extensions/permissions/panel/render.ts +450 -0
- package/extensions/permissions/panel/state.ts +550 -0
- package/extensions/permissions/powershell-cmdlets.ts +198 -0
- package/extensions/permissions/powershell-paths.ts +197 -0
- package/extensions/permissions/powershell-rules.ts +207 -280
- package/extensions/permissions/powershell-tree.ts +557 -0
- package/extensions/permissions/project-trust.ts +27 -11
- package/extensions/permissions/protected-paths.ts +14 -2
- package/extensions/permissions/session-grant.ts +6 -0
- package/extensions/permissions/settings.ts +166 -31
- package/extensions/permissions/subagent-gate.ts +25 -0
- package/extensions/permissions/workspace.ts +78 -0
- package/extensions/plan-mode/index.ts +156 -69
- package/extensions/plan-mode/reminder.ts +89 -21
- package/extensions/plan-mode/texts.ts +177 -0
- package/extensions/plan-mode/viewer.ts +92 -27
- package/extensions/plugins/counts.ts +3 -3
- package/extensions/plugins/index.ts +61 -46
- package/extensions/plugins/install/install.ts +16 -0
- package/extensions/plugins/marketplace/sync.ts +9 -3
- package/extensions/plugins/marketplace/types.ts +3 -1
- package/extensions/plugins/panel/keys.ts +21 -24
- package/extensions/plugins/panel/render.ts +12 -6
- package/extensions/plugins/shell-expand.ts +107 -0
- package/extensions/plugins/template.ts +32 -15
- package/extensions/powershell/child.ts +7 -0
- package/extensions/powershell/description.ts +38 -6
- package/extensions/powershell/guards.ts +1 -1
- package/extensions/powershell/index.ts +12 -7
- package/extensions/recap/index.ts +65 -60
- package/extensions/recap/prompt.ts +2 -2
- package/extensions/recap/scheduler.ts +3 -5
- package/extensions/search-tools/grep-merge.ts +39 -0
- package/extensions/search-tools/index.ts +0 -0
- package/extensions/send-now/chord.ts +62 -0
- package/extensions/send-now/index.ts +133 -0
- package/extensions/session-title/index.ts +3 -0
- package/extensions/session-title/title.ts +4 -1
- package/extensions/skill/code-review.ts +97 -0
- package/extensions/skill/index.ts +421 -101
- package/extensions/skill/invoke.ts +128 -18
- package/extensions/skill/listing.ts +133 -9
- package/extensions/skill/panel/keys.ts +15 -16
- package/extensions/skill/panel/render.ts +5 -2
- package/extensions/skill/panel/state.ts +12 -1
- package/extensions/subagents/agent-args.ts +39 -0
- package/extensions/subagents/agent-description.ts +132 -0
- package/extensions/subagents/agents.ts +116 -23
- package/extensions/subagents/announce.ts +69 -0
- package/extensions/subagents/default-model.ts +2 -3
- package/extensions/subagents/delegation-steer.ts +4 -4
- package/extensions/subagents/fork-cache.ts +76 -0
- package/extensions/subagents/guide-agent.ts +189 -0
- package/extensions/subagents/hand-back-review.ts +3 -0
- package/extensions/subagents/index.ts +1493 -824
- package/extensions/subagents/live-runs.ts +26 -6
- package/extensions/subagents/model-select.ts +38 -25
- package/extensions/subagents/outcome.ts +2 -2
- package/extensions/subagents/panel-keys.ts +73 -31
- package/extensions/subagents/panel-render.ts +120 -96
- package/extensions/subagents/panel-widget.ts +60 -89
- package/extensions/subagents/runner.ts +108 -80
- package/extensions/subagents/runs.ts +39 -5
- package/extensions/subagents/send-to-main-tool.ts +1 -1
- package/extensions/subagents/session-turns.ts +32 -8
- package/extensions/subagents/shell-panel.ts +36 -178
- package/extensions/subagents/tasks-dialog.ts +170 -0
- package/extensions/subagents/viewport-mirror.ts +95 -0
- package/extensions/subagents/worktree.ts +57 -13
- package/extensions/system-prompt/environment.ts +19 -19
- package/extensions/system-prompt/idle-turn.ts +65 -0
- package/extensions/system-prompt/index.ts +131 -47
- package/extensions/system-prompt/template.ts +24 -50
- package/extensions/system-prompt/tiers/common.ts +23 -64
- package/extensions/system-prompt/tiers/frontier.ts +32 -11
- package/extensions/system-prompt/tiers/low.ts +67 -45
- package/extensions/system-prompt/tiers/mid.ts +96 -38
- package/extensions/system-reminder/index.ts +175 -13
- package/extensions/tasks/descriptions.ts +190 -0
- package/extensions/tasks/index.ts +120 -41
- package/extensions/tasks/store.ts +83 -16
- package/extensions/tool-call-corruption/child.ts +7 -0
- package/extensions/tool-call-corruption/index.ts +237 -0
- package/extensions/tool-search/announce.ts +16 -0
- package/extensions/tool-search/index.ts +189 -41
- package/extensions/tool-style/index.ts +68 -10
- package/extensions/tool-style/write-description.ts +40 -0
- package/extensions/tool-style/write-render.ts +237 -0
- package/extensions/turn-duration/index.ts +7 -3
- package/extensions/turn-duration/line.ts +47 -4
- package/extensions/web/backends.ts +6 -9
- package/extensions/web/description.ts +50 -0
- package/extensions/web/index.ts +118 -53
- package/extensions/web/native-call.ts +15 -0
- package/extensions/web/native-results.ts +41 -0
- package/extensions/web-fetch/description.ts +42 -0
- package/extensions/web-fetch/extract.ts +53 -6
- package/extensions/web-fetch/index.ts +125 -76
- package/extensions/web-fetch/page-content.ts +19 -0
- package/extensions/web-fetch/response.ts +49 -0
- package/extensions/web-fetch/summarize.ts +9 -10
- package/extensions/workflow/agent-session.ts +105 -18
- package/extensions/workflow/args.ts +24 -0
- package/extensions/workflow/description.ts +67 -0
- package/extensions/workflow/globals.ts +17 -3
- package/extensions/workflow/index.ts +145 -162
- package/extensions/workflow/records.ts +1 -0
- package/extensions/workflow/run-manager.ts +29 -6
- package/extensions/workflow/saved-workflows.ts +3 -2
- package/extensions/workflow/types.ts +22 -1
- package/extensions/workflow/viewer.ts +54 -24
- package/extensions/workflow/widget.ts +20 -0
- package/extensions/worktree/descriptions.ts +91 -0
- package/extensions/worktree/guards.ts +316 -54
- package/extensions/worktree/index.ts +121 -39
- package/extensions/worktree/powershell-guards.ts +167 -0
- package/extensions/worktree/rewrite.ts +14 -16
- package/package.json +19 -7
- package/skills/artifact-design/SKILL.md +85 -0
- package/skills/code-review/SKILL.md +20 -20
- package/skills/code-review/cells/arguments-and-flags.md +19 -0
- package/skills/code-review/cells/high-3x5-recall-verify.md +137 -0
- package/skills/code-review/cells/high-8-inline.md +122 -0
- package/skills/code-review/cells/low-1-pass-max4.md +27 -0
- package/skills/code-review/cells/low-1-pass-min-files-4.md +28 -0
- package/skills/code-review/cells/max-5x5-verify-sweep.md +162 -0
- package/skills/code-review/cells/medium-3x5-verify.md +132 -0
- package/skills/code-review/cells/minimal-prompt.md +32 -0
- package/skills/code-review/cells/xhigh-10-inline-sweep.md +149 -0
- package/skills/code-review/cells/xhigh-5x5-verify-sweep.md +162 -0
- package/skills/fewer-permission-prompts/SKILL.md +1 -1
- package/skills/loop/SKILL.md +11 -0
- package/skills/security-review/SKILL.md +2 -5
- package/skills/simplify/SKILL.md +7 -5
- package/skills/workflow-authoring/SKILL.md +143 -0
- package/themes/onecode-light.json +1 -1
- package/themes/onecode.json +1 -1
- package/types/app.d.ts +58 -0
- package/types/community-packages.d.ts +26 -1
- package/extensions/auto-mode/recoverability.ts +0 -229
- package/extensions/lib/capability-index.ts +0 -466
- package/extensions/lib/model-facts.generated.json +0 -2675
- package/extensions/lib/model-facts.ts +0 -162
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
`max effort → 5+5 angles × 8 candidates → 1-vote verify → sweep → ≤15 findings`
|
|
2
|
+
|
|
3
|
+
You are reviewing for **recall** at maximum effort: catch every real bug. At
|
|
4
|
+
this level, catching real bugs matters more than avoiding false positives — a
|
|
5
|
+
missed bug ships. Err on the side of surfacing.
|
|
6
|
+
|
|
7
|
+
## Phase 0 — Gather the diff
|
|
8
|
+
|
|
9
|
+
Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
|
|
10
|
+
if there's no upstream) to get the unified diff under review. If there are
|
|
11
|
+
uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
|
|
12
|
+
include the working-tree changes in scope — the review often runs before the
|
|
13
|
+
commit. If a PR number, branch name, or file path was passed as an argument,
|
|
14
|
+
review that target instead. Treat this diff as the review scope.
|
|
15
|
+
|
|
16
|
+
## Phase 1 — Find candidates (5 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle, up to 8 each)
|
|
17
|
+
|
|
18
|
+
Run **10 independent finder angles** via the Agent tool. Each
|
|
19
|
+
surfaces **up to 8 candidate findings**. Do NOT let one angle's conclusions
|
|
20
|
+
suppress another's — if two angles flag the same line for different reasons,
|
|
21
|
+
record both. If the Agent tool is not available in your current tool set, do not error — perform each angle (and each verification) yourself, sequentially, in this context.
|
|
22
|
+
|
|
23
|
+
### Angle A — line-by-line diff scan
|
|
24
|
+
|
|
25
|
+
Read every hunk in the diff, line by line. Then Read the enclosing function for
|
|
26
|
+
each hunk — bugs in unchanged lines of a touched function are in scope (the PR
|
|
27
|
+
re-exposes or fails to fix them). For every line ask: what input, state, timing,
|
|
28
|
+
or platform makes this line wrong? Look for inverted/wrong conditions,
|
|
29
|
+
off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
|
|
30
|
+
wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
|
|
31
|
+
|
|
32
|
+
### Angle B — removed-behavior auditor
|
|
33
|
+
|
|
34
|
+
For every line the diff DELETES or replaces, name the invariant or behavior it
|
|
35
|
+
enforced, then search the new code for where that invariant is re-established.
|
|
36
|
+
If you can't find it, that's a candidate: a removed guard, a dropped error
|
|
37
|
+
path, a narrowed validation, a deleted test that was covering a real case.
|
|
38
|
+
|
|
39
|
+
### Angle C — cross-file tracer
|
|
40
|
+
|
|
41
|
+
For each function the diff changes, find its callers (Grep for the symbol) and
|
|
42
|
+
check whether the change breaks any call site: a new precondition, a changed
|
|
43
|
+
return shape, a new exception, a timing/ordering dependency. Also check callees:
|
|
44
|
+
does a parallel change in the same PR make a call unsafe?
|
|
45
|
+
|
|
46
|
+
### Angle D — language-pitfall specialist
|
|
47
|
+
|
|
48
|
+
Scan for the classic pitfalls of the diff's language/framework — for example:
|
|
49
|
+
JS falsy-zero, `==` coercion, closure-captured loop var; Python mutable default
|
|
50
|
+
args, late-binding closures; Go nil-map write, range-var capture; SQL injection;
|
|
51
|
+
timezone/DST drift; float equality. Flag any instance the diff introduces.
|
|
52
|
+
|
|
53
|
+
### Angle E — wrapper/proxy correctness
|
|
54
|
+
|
|
55
|
+
When the PR adds or modifies a type that wraps another (cache, proxy, decorator,
|
|
56
|
+
adapter): check that every method routes to the wrapped instance and not back
|
|
57
|
+
through a registry/session/global — e.g. a caching provider holding a
|
|
58
|
+
`delegate` field that resolves IDs via `session.get(...)` instead of
|
|
59
|
+
`delegate.get(...)` will re-enter the cache or recurse. Also check that the
|
|
60
|
+
wrapper forwards all the methods the callers actually use.
|
|
61
|
+
|
|
62
|
+
### Reuse
|
|
63
|
+
|
|
64
|
+
The angles above hunt for bugs; this one and the next two hunt for cleanup in
|
|
65
|
+
the changed code. Flag new code that re-implements something the codebase
|
|
66
|
+
already has — Grep shared/utility modules and files adjacent to the change,
|
|
67
|
+
and name the existing helper to call instead.
|
|
68
|
+
|
|
69
|
+
### Simplification
|
|
70
|
+
|
|
71
|
+
Flag unnecessary complexity the diff adds: redundant or derivable state,
|
|
72
|
+
copy-paste with slight variation, deep nesting, dead code left behind. Name
|
|
73
|
+
the simpler form that does the same job.
|
|
74
|
+
|
|
75
|
+
### Efficiency
|
|
76
|
+
|
|
77
|
+
Flag wasted work the diff introduces: redundant computation or repeated I/O,
|
|
78
|
+
independent operations run sequentially, blocking work added to startup or
|
|
79
|
+
hot paths. Also flag long-lived objects built from closures or captured
|
|
80
|
+
environments — they keep the entire enclosing scope alive for the object's
|
|
81
|
+
lifetime (a memory leak when that scope holds large values); prefer a
|
|
82
|
+
class/struct that copies only the fields it needs. Name the cheaper
|
|
83
|
+
alternative.
|
|
84
|
+
|
|
85
|
+
### Altitude
|
|
86
|
+
|
|
87
|
+
Check that each change fixes the root cause at the right depth rather than
|
|
88
|
+
patching a symptom with a fragile bandaid. Special cases layered on shared
|
|
89
|
+
infrastructure are a sign the fix isn't deep enough — prefer the simpler, more
|
|
90
|
+
general change to the underlying mechanism over adding special cases, and name
|
|
91
|
+
that change.
|
|
92
|
+
|
|
93
|
+
### Conventions (CLAUDE.md)
|
|
94
|
+
|
|
95
|
+
Find the CLAUDE.md files that govern the changed code: the user-level
|
|
96
|
+
~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
|
|
97
|
+
CLAUDE.local.md in a directory that is an ancestor of a changed file (a
|
|
98
|
+
directory's CLAUDE.md only applies to files at or below it). Read each one
|
|
99
|
+
that exists, then check the diff for clear violations of the rules they state.
|
|
100
|
+
|
|
101
|
+
Only flag a violation when you can quote the exact rule and the exact line
|
|
102
|
+
that breaks it — no style preferences, no vague "spirit of the doc"
|
|
103
|
+
inferences. In the finding, name the CLAUDE.md path and quote the rule so the
|
|
104
|
+
report can cite it. If no CLAUDE.md applies, return nothing for this angle.
|
|
105
|
+
|
|
106
|
+
Cleanup, altitude, and conventions candidates use the same
|
|
107
|
+
`file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
|
|
108
|
+
cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
|
|
109
|
+
is broken) instead of a crash. Correctness bugs always outrank cleanup,
|
|
110
|
+
altitude, and conventions findings when the output cap forces a cut.
|
|
111
|
+
|
|
112
|
+
## Phase 2 — Verify (1-vote, 3-state)
|
|
113
|
+
|
|
114
|
+
Dedup candidates that point at the same line/mechanism, keeping the one with
|
|
115
|
+
the most concrete failure scenario. For each remaining candidate, run **one
|
|
116
|
+
verifier** via the Agent tool: give it the diff, the relevant
|
|
117
|
+
file(s), and the candidate, and have it return exactly one of:
|
|
118
|
+
|
|
119
|
+
- **CONFIRMED** — can name the inputs/state that trigger it and the wrong
|
|
120
|
+
output or crash. Quote the line.
|
|
121
|
+
- **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
|
|
122
|
+
config). State what would confirm it.
|
|
123
|
+
- **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
|
|
124
|
+
Quote the line that proves it.
|
|
125
|
+
|
|
126
|
+
Keep candidates where the vote is CONFIRMED or PLAUSIBLE.
|
|
127
|
+
|
|
128
|
+
This is recall mode — a single non-REFUTED vote carries the finding. Do NOT
|
|
129
|
+
drop on uncertainty.
|
|
130
|
+
|
|
131
|
+
## Phase 3 — Sweep for gaps
|
|
132
|
+
|
|
133
|
+
Run **one more finder** as a fresh reviewer who has the verified list. Re-read
|
|
134
|
+
the diff and enclosing functions looking ONLY for defects not already listed.
|
|
135
|
+
Do not re-derive or re-confirm anything already there — the job is gaps. Focus
|
|
136
|
+
on what the first pass tends to miss: moved/extracted code that dropped a guard
|
|
137
|
+
or anchor; second-tier footguns (dataclass default evaluated once, `hash()`
|
|
138
|
+
non-determinism, lock-scope shrink, predicate methods with side effects);
|
|
139
|
+
setup/teardown asymmetry in tests; config defaults flipped.
|
|
140
|
+
|
|
141
|
+
Surface **up to 8 additional candidates**, each naming a defect not already on
|
|
142
|
+
the list. If nothing new, return an empty sweep — do not pad.
|
|
143
|
+
|
|
144
|
+
## Output
|
|
145
|
+
|
|
146
|
+
Return findings as a JSON array of at most 15 objects:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
[
|
|
150
|
+
{
|
|
151
|
+
"file": "path/to/file.ext",
|
|
152
|
+
"line": 123,
|
|
153
|
+
"summary": "one-sentence statement of the bug",
|
|
154
|
+
"failure_scenario": "concrete inputs/state → wrong output/crash"
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Ranked most-severe first. If more than 15 survive, keep the 15 most
|
|
160
|
+
severe. If nothing survives verification, return `[]`. Do not call the
|
|
161
|
+
ReportFindings tool even if it is available - this review's
|
|
162
|
+
output contract is the JSON block above.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
`medium effort → 3+5 angles × 6 candidates → 1-vote verify → ≤8 findings`
|
|
2
|
+
|
|
3
|
+
You are reviewing for **precision** at medium effort: every finding you surface
|
|
4
|
+
should be one a maintainer would act on.
|
|
5
|
+
|
|
6
|
+
## Phase 0 — Gather the diff
|
|
7
|
+
|
|
8
|
+
Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
|
|
9
|
+
if there's no upstream) to get the unified diff under review. If there are
|
|
10
|
+
uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
|
|
11
|
+
include the working-tree changes in scope — the review often runs before the
|
|
12
|
+
commit. If a PR number, branch name, or file path was passed as an argument,
|
|
13
|
+
review that target instead. Treat this diff as the review scope.
|
|
14
|
+
|
|
15
|
+
## Phase 1 — Find candidates (3 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle, up to 6 each)
|
|
16
|
+
|
|
17
|
+
Run **8 independent finder angles** via the Agent tool. Each
|
|
18
|
+
surfaces **up to 6 candidate findings** with `file`, `line`, a one-line
|
|
19
|
+
`summary`, and a concrete `failure_scenario`. If the Agent tool is not available in your current tool set, do not error — perform each angle (and each verification) yourself, sequentially, in this context.
|
|
20
|
+
|
|
21
|
+
### Angle A — line-by-line diff scan
|
|
22
|
+
|
|
23
|
+
Read every hunk in the diff, line by line. Then Read the enclosing function for
|
|
24
|
+
each hunk — bugs in unchanged lines of a touched function are in scope (the PR
|
|
25
|
+
re-exposes or fails to fix them). For every line ask: what input, state, timing,
|
|
26
|
+
or platform makes this line wrong? Look for inverted/wrong conditions,
|
|
27
|
+
off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
|
|
28
|
+
wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
|
|
29
|
+
|
|
30
|
+
### Angle B — removed-behavior auditor
|
|
31
|
+
|
|
32
|
+
For every line the diff DELETES or replaces, name the invariant or behavior it
|
|
33
|
+
enforced, then search the new code for where that invariant is re-established.
|
|
34
|
+
If you can't find it, that's a candidate: a removed guard, a dropped error
|
|
35
|
+
path, a narrowed validation, a deleted test that was covering a real case.
|
|
36
|
+
|
|
37
|
+
### Angle C — cross-file tracer
|
|
38
|
+
|
|
39
|
+
For each function the diff changes, find its callers (Grep for the symbol) and
|
|
40
|
+
check whether the change breaks any call site: a new precondition, a changed
|
|
41
|
+
return shape, a new exception, a timing/ordering dependency. Also check callees:
|
|
42
|
+
does a parallel change in the same PR make a call unsafe?
|
|
43
|
+
|
|
44
|
+
### Reuse
|
|
45
|
+
|
|
46
|
+
The angles above hunt for bugs; this one and the next two hunt for cleanup in
|
|
47
|
+
the changed code. Flag new code that re-implements something the codebase
|
|
48
|
+
already has — Grep shared/utility modules and files adjacent to the change,
|
|
49
|
+
and name the existing helper to call instead.
|
|
50
|
+
|
|
51
|
+
### Simplification
|
|
52
|
+
|
|
53
|
+
Flag unnecessary complexity the diff adds: redundant or derivable state,
|
|
54
|
+
copy-paste with slight variation, deep nesting, dead code left behind. Name
|
|
55
|
+
the simpler form that does the same job.
|
|
56
|
+
|
|
57
|
+
### Efficiency
|
|
58
|
+
|
|
59
|
+
Flag wasted work the diff introduces: redundant computation or repeated I/O,
|
|
60
|
+
independent operations run sequentially, blocking work added to startup or
|
|
61
|
+
hot paths. Also flag long-lived objects built from closures or captured
|
|
62
|
+
environments — they keep the entire enclosing scope alive for the object's
|
|
63
|
+
lifetime (a memory leak when that scope holds large values); prefer a
|
|
64
|
+
class/struct that copies only the fields it needs. Name the cheaper
|
|
65
|
+
alternative.
|
|
66
|
+
|
|
67
|
+
### Altitude
|
|
68
|
+
|
|
69
|
+
Check that each change fixes the root cause at the right depth rather than
|
|
70
|
+
patching a symptom with a fragile bandaid. Special cases layered on shared
|
|
71
|
+
infrastructure are a sign the fix isn't deep enough — prefer the simpler, more
|
|
72
|
+
general change to the underlying mechanism over adding special cases, and name
|
|
73
|
+
that change.
|
|
74
|
+
|
|
75
|
+
### Conventions (CLAUDE.md)
|
|
76
|
+
|
|
77
|
+
Find the CLAUDE.md files that govern the changed code: the user-level
|
|
78
|
+
~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
|
|
79
|
+
CLAUDE.local.md in a directory that is an ancestor of a changed file (a
|
|
80
|
+
directory's CLAUDE.md only applies to files at or below it). Read each one
|
|
81
|
+
that exists, then check the diff for clear violations of the rules they state.
|
|
82
|
+
|
|
83
|
+
Only flag a violation when you can quote the exact rule and the exact line
|
|
84
|
+
that breaks it — no style preferences, no vague "spirit of the doc"
|
|
85
|
+
inferences. In the finding, name the CLAUDE.md path and quote the rule so the
|
|
86
|
+
report can cite it. If no CLAUDE.md applies, return nothing for this angle.
|
|
87
|
+
|
|
88
|
+
Cleanup, altitude, and conventions candidates use the same
|
|
89
|
+
`file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
|
|
90
|
+
cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
|
|
91
|
+
is broken) instead of a crash. Correctness bugs always outrank cleanup,
|
|
92
|
+
altitude, and conventions findings when the output cap forces a cut.
|
|
93
|
+
|
|
94
|
+
Pass every candidate with a nameable failure scenario through — finders that
|
|
95
|
+
silently drop half-believed candidates bypass the verify step and are the
|
|
96
|
+
dominant cause of misses.
|
|
97
|
+
|
|
98
|
+
## Phase 2 — Verify (1-vote, 3-state)
|
|
99
|
+
|
|
100
|
+
Dedup candidates that point at the same line/mechanism, keeping the one with
|
|
101
|
+
the most concrete failure scenario. For each remaining candidate, run **one
|
|
102
|
+
verifier** via the Agent tool: give it the diff, the relevant
|
|
103
|
+
file(s), and the candidate, and have it return exactly one of:
|
|
104
|
+
|
|
105
|
+
- **CONFIRMED** — can name the inputs/state that trigger it and the wrong
|
|
106
|
+
output or crash. Quote the line.
|
|
107
|
+
- **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
|
|
108
|
+
config). State what would confirm it.
|
|
109
|
+
- **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
|
|
110
|
+
Quote the line that proves it.
|
|
111
|
+
|
|
112
|
+
Keep candidates where the vote is CONFIRMED or PLAUSIBLE.
|
|
113
|
+
|
|
114
|
+
## Output
|
|
115
|
+
|
|
116
|
+
Return findings as a JSON array of at most 8 objects:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
[
|
|
120
|
+
{
|
|
121
|
+
"file": "path/to/file.ext",
|
|
122
|
+
"line": 123,
|
|
123
|
+
"summary": "one-sentence statement of the bug",
|
|
124
|
+
"failure_scenario": "concrete inputs/state → wrong output/crash"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Ranked most-severe first. If more than 8 survive, keep the 8 most
|
|
130
|
+
severe. If nothing survives verification, return `[]`. Do not call the
|
|
131
|
+
ReportFindings tool even if it is available - this review's
|
|
132
|
+
output contract is the JSON block above.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
`minimal prompt → single careful diff pass → ≤15 findings`
|
|
2
|
+
|
|
3
|
+
You are reviewing a pull request for real bugs. Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
|
|
4
|
+
if there's no upstream) to get the unified diff under review. If there are
|
|
5
|
+
uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
|
|
6
|
+
include the working-tree changes in scope — the review often runs before the
|
|
7
|
+
commit. If a PR number, branch name, or file path was passed as an argument,
|
|
8
|
+
review that target instead. Treat this diff as the review scope.
|
|
9
|
+
|
|
10
|
+
Review the diff as a careful senior engineer would: read every hunk, open the surrounding files for context as needed (Read, Grep, git log/blame/show), and hunt for correctness issues — wrong or inverted conditions, off-by-one, null/undefined dereference, missing `await`, dropped error handling, removed guards or validations, broken callers of changed functions, races. Prefer real failure modes over style; every finding needs a concrete scenario in which the code misbehaves.
|
|
11
|
+
|
|
12
|
+
When you are done, report at most 15 findings in the output format below — for each: the file path and start line, a one-sentence summary, and the concrete scenario in which the code misbehaves. Quality over quantity: include everything you genuinely believe is a real issue, and nothing you don't.
|
|
13
|
+
|
|
14
|
+
## Output
|
|
15
|
+
|
|
16
|
+
Return findings as a JSON array of at most 15 objects:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
[
|
|
20
|
+
{
|
|
21
|
+
"file": "path/to/file.ext",
|
|
22
|
+
"line": 123,
|
|
23
|
+
"summary": "one-sentence statement of the bug",
|
|
24
|
+
"failure_scenario": "concrete inputs/state → wrong output/crash"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Ranked most-severe first. If more than 15 survive, keep the 15 most
|
|
30
|
+
severe. If nothing survives verification, return `[]`. Do not call the
|
|
31
|
+
ReportFindings tool even if it is available - this review's
|
|
32
|
+
output contract is the JSON block above.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
`xhigh effort → 10 inline angles → dedup (no verify) → sweep → ≤15 findings`
|
|
2
|
+
|
|
3
|
+
You are reviewing for **recall** at extra-high effort: catch every real bug. At
|
|
4
|
+
this level, catching real bugs matters more than avoiding false positives — a
|
|
5
|
+
missed bug ships. Err on the side of surfacing.
|
|
6
|
+
|
|
7
|
+
## Phase 0 — Gather the diff
|
|
8
|
+
|
|
9
|
+
Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
|
|
10
|
+
if there's no upstream) to get the unified diff under review. If there are
|
|
11
|
+
uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
|
|
12
|
+
include the working-tree changes in scope — the review often runs before the
|
|
13
|
+
commit. If a PR number, branch name, or file path was passed as an argument,
|
|
14
|
+
review that target instead. Treat this diff as the review scope.
|
|
15
|
+
|
|
16
|
+
## Phase 1 — Find candidates (5 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle, up to 8 each)
|
|
17
|
+
|
|
18
|
+
Run **10 independent finder angles** in sequence yourself, in THIS context — do NOT spawn subagents for them. Each
|
|
19
|
+
surfaces **up to 8 candidate findings**. Do NOT let one angle's conclusions
|
|
20
|
+
suppress another's — if two angles flag the same line for different reasons,
|
|
21
|
+
record both.
|
|
22
|
+
|
|
23
|
+
### Angle A — line-by-line diff scan
|
|
24
|
+
|
|
25
|
+
Read every hunk in the diff, line by line. Then Read the enclosing function for
|
|
26
|
+
each hunk — bugs in unchanged lines of a touched function are in scope (the PR
|
|
27
|
+
re-exposes or fails to fix them). For every line ask: what input, state, timing,
|
|
28
|
+
or platform makes this line wrong? Look for inverted/wrong conditions,
|
|
29
|
+
off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
|
|
30
|
+
wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
|
|
31
|
+
|
|
32
|
+
### Angle B — removed-behavior auditor
|
|
33
|
+
|
|
34
|
+
For every line the diff DELETES or replaces, name the invariant or behavior it
|
|
35
|
+
enforced, then search the new code for where that invariant is re-established.
|
|
36
|
+
If you can't find it, that's a candidate: a removed guard, a dropped error
|
|
37
|
+
path, a narrowed validation, a deleted test that was covering a real case.
|
|
38
|
+
|
|
39
|
+
### Angle C — cross-file tracer
|
|
40
|
+
|
|
41
|
+
For each function the diff changes, find its callers (Grep for the symbol) and
|
|
42
|
+
check whether the change breaks any call site: a new precondition, a changed
|
|
43
|
+
return shape, a new exception, a timing/ordering dependency. Also check callees:
|
|
44
|
+
does a parallel change in the same PR make a call unsafe?
|
|
45
|
+
|
|
46
|
+
### Angle D — language-pitfall specialist
|
|
47
|
+
|
|
48
|
+
Scan for the classic pitfalls of the diff's language/framework — for example:
|
|
49
|
+
JS falsy-zero, `==` coercion, closure-captured loop var; Python mutable default
|
|
50
|
+
args, late-binding closures; Go nil-map write, range-var capture; SQL injection;
|
|
51
|
+
timezone/DST drift; float equality. Flag any instance the diff introduces.
|
|
52
|
+
|
|
53
|
+
### Angle E — wrapper/proxy correctness
|
|
54
|
+
|
|
55
|
+
When the PR adds or modifies a type that wraps another (cache, proxy, decorator,
|
|
56
|
+
adapter): check that every method routes to the wrapped instance and not back
|
|
57
|
+
through a registry/session/global — e.g. a caching provider holding a
|
|
58
|
+
`delegate` field that resolves IDs via `session.get(...)` instead of
|
|
59
|
+
`delegate.get(...)` will re-enter the cache or recurse. Also check that the
|
|
60
|
+
wrapper forwards all the methods the callers actually use.
|
|
61
|
+
|
|
62
|
+
### Reuse
|
|
63
|
+
|
|
64
|
+
The angles above hunt for bugs; this one and the next two hunt for cleanup in
|
|
65
|
+
the changed code. Flag new code that re-implements something the codebase
|
|
66
|
+
already has — Grep shared/utility modules and files adjacent to the change,
|
|
67
|
+
and name the existing helper to call instead.
|
|
68
|
+
|
|
69
|
+
### Simplification
|
|
70
|
+
|
|
71
|
+
Flag unnecessary complexity the diff adds: redundant or derivable state,
|
|
72
|
+
copy-paste with slight variation, deep nesting, dead code left behind. Name
|
|
73
|
+
the simpler form that does the same job.
|
|
74
|
+
|
|
75
|
+
### Efficiency
|
|
76
|
+
|
|
77
|
+
Flag wasted work the diff introduces: redundant computation or repeated I/O,
|
|
78
|
+
independent operations run sequentially, blocking work added to startup or
|
|
79
|
+
hot paths. Also flag long-lived objects built from closures or captured
|
|
80
|
+
environments — they keep the entire enclosing scope alive for the object's
|
|
81
|
+
lifetime (a memory leak when that scope holds large values); prefer a
|
|
82
|
+
class/struct that copies only the fields it needs. Name the cheaper
|
|
83
|
+
alternative.
|
|
84
|
+
|
|
85
|
+
### Altitude
|
|
86
|
+
|
|
87
|
+
Check that each change fixes the root cause at the right depth rather than
|
|
88
|
+
patching a symptom with a fragile bandaid. Special cases layered on shared
|
|
89
|
+
infrastructure are a sign the fix isn't deep enough — prefer the simpler, more
|
|
90
|
+
general change to the underlying mechanism over adding special cases, and name
|
|
91
|
+
that change.
|
|
92
|
+
|
|
93
|
+
### Conventions (CLAUDE.md)
|
|
94
|
+
|
|
95
|
+
Find the CLAUDE.md files that govern the changed code: the user-level
|
|
96
|
+
~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
|
|
97
|
+
CLAUDE.local.md in a directory that is an ancestor of a changed file (a
|
|
98
|
+
directory's CLAUDE.md only applies to files at or below it). Read each one
|
|
99
|
+
that exists, then check the diff for clear violations of the rules they state.
|
|
100
|
+
|
|
101
|
+
Only flag a violation when you can quote the exact rule and the exact line
|
|
102
|
+
that breaks it — no style preferences, no vague "spirit of the doc"
|
|
103
|
+
inferences. In the finding, name the CLAUDE.md path and quote the rule so the
|
|
104
|
+
report can cite it. If no CLAUDE.md applies, return nothing for this angle.
|
|
105
|
+
|
|
106
|
+
Cleanup, altitude, and conventions candidates use the same
|
|
107
|
+
`file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
|
|
108
|
+
cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
|
|
109
|
+
is broken) instead of a crash. Correctness bugs always outrank cleanup,
|
|
110
|
+
altitude, and conventions findings when the output cap forces a cut.
|
|
111
|
+
|
|
112
|
+
## Phase 2 — Dedup only (no verify)
|
|
113
|
+
|
|
114
|
+
Pool all candidates. Dedup near-duplicates only (same defect, same location, same reason → keep one). Do NOT run verifiers; do NOT re-judge. Sort by severity. Do NOT drop on uncertainty.
|
|
115
|
+
|
|
116
|
+
## Phase 3 — Sweep for gaps
|
|
117
|
+
|
|
118
|
+
Take one more pass (same context — no subagent) as a fresh reviewer who has the deduplicated list. Re-read
|
|
119
|
+
the diff and enclosing functions looking ONLY for defects not already listed.
|
|
120
|
+
Do not re-derive or re-confirm anything already there — the job is gaps. Focus
|
|
121
|
+
on what the first pass tends to miss: moved/extracted code that dropped a guard
|
|
122
|
+
or anchor; second-tier footguns (dataclass default evaluated once, `hash()`
|
|
123
|
+
non-determinism, lock-scope shrink, predicate methods with side effects);
|
|
124
|
+
setup/teardown asymmetry in tests; config defaults flipped.
|
|
125
|
+
|
|
126
|
+
Surface **up to 8 additional candidates**, each naming a defect not already on
|
|
127
|
+
the list. If nothing new, return nothing from this phase — do not pad.
|
|
128
|
+
|
|
129
|
+
## Output
|
|
130
|
+
|
|
131
|
+
Target **at least 7 findings**. If fewer genuine findings exist, emit what you have — do not invent to hit the floor.
|
|
132
|
+
|
|
133
|
+
Return findings as a JSON array of at most 15 objects:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
[
|
|
137
|
+
{
|
|
138
|
+
"file": "path/to/file.ext",
|
|
139
|
+
"line": 123,
|
|
140
|
+
"summary": "one-sentence statement of the bug",
|
|
141
|
+
"failure_scenario": "concrete inputs/state → wrong output/crash"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Ranked most-severe first. If more than 15 survive, keep the 15 most
|
|
147
|
+
severe. If nothing survives, return `[]`. Do not call the
|
|
148
|
+
ReportFindings tool even if it is available - this review's
|
|
149
|
+
output contract is the JSON block above.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
`xhigh effort → 5+5 angles × 8 candidates → 1-vote verify → sweep → ≤15 findings`
|
|
2
|
+
|
|
3
|
+
You are reviewing for **recall** at extra-high effort: catch every real bug. At
|
|
4
|
+
this level, catching real bugs matters more than avoiding false positives — a
|
|
5
|
+
missed bug ships. Err on the side of surfacing.
|
|
6
|
+
|
|
7
|
+
## Phase 0 — Gather the diff
|
|
8
|
+
|
|
9
|
+
Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
|
|
10
|
+
if there's no upstream) to get the unified diff under review. If there are
|
|
11
|
+
uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
|
|
12
|
+
include the working-tree changes in scope — the review often runs before the
|
|
13
|
+
commit. If a PR number, branch name, or file path was passed as an argument,
|
|
14
|
+
review that target instead. Treat this diff as the review scope.
|
|
15
|
+
|
|
16
|
+
## Phase 1 — Find candidates (5 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle, up to 8 each)
|
|
17
|
+
|
|
18
|
+
Run **10 independent finder angles** via the Agent tool. Each
|
|
19
|
+
surfaces **up to 8 candidate findings**. Do NOT let one angle's conclusions
|
|
20
|
+
suppress another's — if two angles flag the same line for different reasons,
|
|
21
|
+
record both. If the Agent tool is not available in your current tool set, do not error — perform each angle (and each verification) yourself, sequentially, in this context.
|
|
22
|
+
|
|
23
|
+
### Angle A — line-by-line diff scan
|
|
24
|
+
|
|
25
|
+
Read every hunk in the diff, line by line. Then Read the enclosing function for
|
|
26
|
+
each hunk — bugs in unchanged lines of a touched function are in scope (the PR
|
|
27
|
+
re-exposes or fails to fix them). For every line ask: what input, state, timing,
|
|
28
|
+
or platform makes this line wrong? Look for inverted/wrong conditions,
|
|
29
|
+
off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
|
|
30
|
+
wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
|
|
31
|
+
|
|
32
|
+
### Angle B — removed-behavior auditor
|
|
33
|
+
|
|
34
|
+
For every line the diff DELETES or replaces, name the invariant or behavior it
|
|
35
|
+
enforced, then search the new code for where that invariant is re-established.
|
|
36
|
+
If you can't find it, that's a candidate: a removed guard, a dropped error
|
|
37
|
+
path, a narrowed validation, a deleted test that was covering a real case.
|
|
38
|
+
|
|
39
|
+
### Angle C — cross-file tracer
|
|
40
|
+
|
|
41
|
+
For each function the diff changes, find its callers (Grep for the symbol) and
|
|
42
|
+
check whether the change breaks any call site: a new precondition, a changed
|
|
43
|
+
return shape, a new exception, a timing/ordering dependency. Also check callees:
|
|
44
|
+
does a parallel change in the same PR make a call unsafe?
|
|
45
|
+
|
|
46
|
+
### Angle D — language-pitfall specialist
|
|
47
|
+
|
|
48
|
+
Scan for the classic pitfalls of the diff's language/framework — for example:
|
|
49
|
+
JS falsy-zero, `==` coercion, closure-captured loop var; Python mutable default
|
|
50
|
+
args, late-binding closures; Go nil-map write, range-var capture; SQL injection;
|
|
51
|
+
timezone/DST drift; float equality. Flag any instance the diff introduces.
|
|
52
|
+
|
|
53
|
+
### Angle E — wrapper/proxy correctness
|
|
54
|
+
|
|
55
|
+
When the PR adds or modifies a type that wraps another (cache, proxy, decorator,
|
|
56
|
+
adapter): check that every method routes to the wrapped instance and not back
|
|
57
|
+
through a registry/session/global — e.g. a caching provider holding a
|
|
58
|
+
`delegate` field that resolves IDs via `session.get(...)` instead of
|
|
59
|
+
`delegate.get(...)` will re-enter the cache or recurse. Also check that the
|
|
60
|
+
wrapper forwards all the methods the callers actually use.
|
|
61
|
+
|
|
62
|
+
### Reuse
|
|
63
|
+
|
|
64
|
+
The angles above hunt for bugs; this one and the next two hunt for cleanup in
|
|
65
|
+
the changed code. Flag new code that re-implements something the codebase
|
|
66
|
+
already has — Grep shared/utility modules and files adjacent to the change,
|
|
67
|
+
and name the existing helper to call instead.
|
|
68
|
+
|
|
69
|
+
### Simplification
|
|
70
|
+
|
|
71
|
+
Flag unnecessary complexity the diff adds: redundant or derivable state,
|
|
72
|
+
copy-paste with slight variation, deep nesting, dead code left behind. Name
|
|
73
|
+
the simpler form that does the same job.
|
|
74
|
+
|
|
75
|
+
### Efficiency
|
|
76
|
+
|
|
77
|
+
Flag wasted work the diff introduces: redundant computation or repeated I/O,
|
|
78
|
+
independent operations run sequentially, blocking work added to startup or
|
|
79
|
+
hot paths. Also flag long-lived objects built from closures or captured
|
|
80
|
+
environments — they keep the entire enclosing scope alive for the object's
|
|
81
|
+
lifetime (a memory leak when that scope holds large values); prefer a
|
|
82
|
+
class/struct that copies only the fields it needs. Name the cheaper
|
|
83
|
+
alternative.
|
|
84
|
+
|
|
85
|
+
### Altitude
|
|
86
|
+
|
|
87
|
+
Check that each change fixes the root cause at the right depth rather than
|
|
88
|
+
patching a symptom with a fragile bandaid. Special cases layered on shared
|
|
89
|
+
infrastructure are a sign the fix isn't deep enough — prefer the simpler, more
|
|
90
|
+
general change to the underlying mechanism over adding special cases, and name
|
|
91
|
+
that change.
|
|
92
|
+
|
|
93
|
+
### Conventions (CLAUDE.md)
|
|
94
|
+
|
|
95
|
+
Find the CLAUDE.md files that govern the changed code: the user-level
|
|
96
|
+
~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
|
|
97
|
+
CLAUDE.local.md in a directory that is an ancestor of a changed file (a
|
|
98
|
+
directory's CLAUDE.md only applies to files at or below it). Read each one
|
|
99
|
+
that exists, then check the diff for clear violations of the rules they state.
|
|
100
|
+
|
|
101
|
+
Only flag a violation when you can quote the exact rule and the exact line
|
|
102
|
+
that breaks it — no style preferences, no vague "spirit of the doc"
|
|
103
|
+
inferences. In the finding, name the CLAUDE.md path and quote the rule so the
|
|
104
|
+
report can cite it. If no CLAUDE.md applies, return nothing for this angle.
|
|
105
|
+
|
|
106
|
+
Cleanup, altitude, and conventions candidates use the same
|
|
107
|
+
`file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
|
|
108
|
+
cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
|
|
109
|
+
is broken) instead of a crash. Correctness bugs always outrank cleanup,
|
|
110
|
+
altitude, and conventions findings when the output cap forces a cut.
|
|
111
|
+
|
|
112
|
+
## Phase 2 — Verify (1-vote, 3-state)
|
|
113
|
+
|
|
114
|
+
Dedup candidates that point at the same line/mechanism, keeping the one with
|
|
115
|
+
the most concrete failure scenario. For each remaining candidate, run **one
|
|
116
|
+
verifier** via the Agent tool: give it the diff, the relevant
|
|
117
|
+
file(s), and the candidate, and have it return exactly one of:
|
|
118
|
+
|
|
119
|
+
- **CONFIRMED** — can name the inputs/state that trigger it and the wrong
|
|
120
|
+
output or crash. Quote the line.
|
|
121
|
+
- **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
|
|
122
|
+
config). State what would confirm it.
|
|
123
|
+
- **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
|
|
124
|
+
Quote the line that proves it.
|
|
125
|
+
|
|
126
|
+
Keep candidates where the vote is CONFIRMED or PLAUSIBLE.
|
|
127
|
+
|
|
128
|
+
This is recall mode — a single non-REFUTED vote carries the finding. Do NOT
|
|
129
|
+
drop on uncertainty.
|
|
130
|
+
|
|
131
|
+
## Phase 3 — Sweep for gaps
|
|
132
|
+
|
|
133
|
+
Run **one more finder** as a fresh reviewer who has the verified list. Re-read
|
|
134
|
+
the diff and enclosing functions looking ONLY for defects not already listed.
|
|
135
|
+
Do not re-derive or re-confirm anything already there — the job is gaps. Focus
|
|
136
|
+
on what the first pass tends to miss: moved/extracted code that dropped a guard
|
|
137
|
+
or anchor; second-tier footguns (dataclass default evaluated once, `hash()`
|
|
138
|
+
non-determinism, lock-scope shrink, predicate methods with side effects);
|
|
139
|
+
setup/teardown asymmetry in tests; config defaults flipped.
|
|
140
|
+
|
|
141
|
+
Surface **up to 8 additional candidates**, each naming a defect not already on
|
|
142
|
+
the list. If nothing new, return an empty sweep — do not pad.
|
|
143
|
+
|
|
144
|
+
## Output
|
|
145
|
+
|
|
146
|
+
Return findings as a JSON array of at most 15 objects:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
[
|
|
150
|
+
{
|
|
151
|
+
"file": "path/to/file.ext",
|
|
152
|
+
"line": 123,
|
|
153
|
+
"summary": "one-sentence statement of the bug",
|
|
154
|
+
"failure_scenario": "concrete inputs/state → wrong output/crash"
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Ranked most-severe first. If more than 15 survive, keep the 15 most
|
|
160
|
+
severe. If nothing survives verification, return `[]`. Do not call the
|
|
161
|
+
ReportFindings tool even if it is available - this review's
|
|
162
|
+
output contract is the JSON block above.
|
|
@@ -16,7 +16,7 @@ Then, add these to One Code's per-repo settings at `~/.onecode/projects/<slug>/s
|
|
|
16
16
|
|
|
17
17
|
## Steps
|
|
18
18
|
|
|
19
|
-
1. **Locate transcripts.** One Code / pi session transcripts live under the agent state dir at `~/.onecode/agent/sessions/<sanitized-cwd>/*.jsonl` (the
|
|
19
|
+
1. **Locate transcripts.** One Code / pi session transcripts live under the agent state dir at `~/.onecode/agent/sessions/<sanitized-cwd>/*.jsonl` (the bundled app's agent dir is `~/.onecode/agent`, or `ONECODE_AGENT_DIR` when set; a stock pi install uses its own agent dir, `PI_CODING_AGENT_DIR` or `~/.pi/agent`). Each line is a JSON object. Tool calls appear as assistant messages whose content carries tool-call entries: a tool name (e.g. `Bash`, `mcp__slack__slack_read_thread`) and, for a shell tool, the command string in its input.
|
|
20
20
|
|
|
21
21
|
Scan the recent transcripts across the sessions dir — not just the current project — so the allowlist reflects your actual usage. Cap the scan at a reasonable number of recent sessions (e.g. 50 most-recently-modified JSONL files) so this stays fast.
|
|
22
22
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: loop
|
|
3
|
+
description: Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo). Omit the interval to let the model self-pace.
|
|
4
|
+
when_to_use: 'When the user wants to set up a recurring task, poll for status, or run something repeatedly on an interval (e.g. "check the deploy every 5 minutes", "keep running /babysit-prs"). Do NOT invoke for one-off tasks.'
|
|
5
|
+
argument-hint: "[interval] [prompt]"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
One Code builds this skill's instructions from its arguments when it runs
|
|
9
|
+
(`extensions/background/loop-skill.ts`, Claude Code's `/loop`). This text shows
|
|
10
|
+
only when the background extension is not loaded: tell the user `/loop` needs
|
|
11
|
+
it, and do not schedule anything.
|