@caddis/cli 0.4.30 → 0.4.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/bundles/antigravity-plugin/mcp_ping_server.py +1 -1
  2. package/bundles/antigravity-plugin/plugin.json +1 -1
  3. package/bundles/antigravity-plugin/scripts/caddis_adhoc.py +301 -66
  4. package/bundles/antigravity-plugin/scripts/caddis_exit.py +15 -0
  5. package/bundles/antigravity-plugin/scripts/caddis_frontmatter.py +145 -0
  6. package/bundles/antigravity-plugin/scripts/caddis_gate.py +33 -10
  7. package/bundles/antigravity-plugin/scripts/caddis_governor.py +5 -2
  8. package/bundles/antigravity-plugin/scripts/caddis_lanes.py +13 -1
  9. package/bundles/antigravity-plugin/scripts/caddis_migrate_dir.py +1 -1
  10. package/bundles/antigravity-plugin/scripts/caddis_spawn.py +2 -2
  11. package/bundles/antigravity-plugin/scripts/caddis_tidy.py +9 -14
  12. package/bundles/antigravity-plugin/scripts/claudster_doctor.py +66 -0
  13. package/bundles/antigravity-plugin/scripts/new-machine.ps1 +1 -1
  14. package/bundles/antigravity-plugin/scripts/oss_ask.py +6 -5
  15. package/bundles/antigravity-plugin/scripts/oss_model.py +1 -1
  16. package/bundles/antigravity-plugin/scripts/oss_review.py +84 -15
  17. package/bundles/antigravity-plugin/scripts/secret_filter.py +316 -0
  18. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +9 -4
  19. package/bundles/antigravity-plugin/skills/_registry.md +5 -3
  20. package/bundles/antigravity-plugin/skills/catchup/SKILL.md +37 -2
  21. package/bundles/antigravity-plugin/skills/cross-review/SKILL.md +1 -1
  22. package/bundles/antigravity-plugin/skills/digress/SKILL.md +1 -1
  23. package/bundles/antigravity-plugin/skills/handoff/SKILL.md +8 -1
  24. package/bundles/antigravity-plugin/skills/implement/SKILL.md +3 -1
  25. package/bundles/antigravity-plugin/skills/install-statusline/SKILL.md +105 -0
  26. package/bundles/antigravity-plugin/skills/mmr/SKILL.md +14 -8
  27. package/bundles/antigravity-plugin/skills/resume/SKILL.md +2 -32
  28. package/bundles/antigravity-plugin/skills/review/SKILL.md +2 -96
  29. package/bundles/antigravity-plugin/skills/review-pr/SKILL.md +100 -0
  30. package/bundles/antigravity-plugin/skills/statusline/SKILL.md +2 -101
  31. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  32. package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +3 -3
  33. package/bundles/antigravity-plugin-extras/skills/data-lineage/SKILL.md +1 -1
  34. package/bundles/antigravity-plugin-extras/skills/golden-plan/SKILL.md +1 -1
  35. package/bundles/codex/.codex/config.toml.example +0 -16
  36. package/bundles/codex/AGENTS.md +2 -2
  37. package/bundles/manifest.json +3 -3
  38. package/dist/claude-deepseek.js +1 -1
  39. package/dist/claude-glm.js +1 -1
  40. package/dist/claude-oss.js +1 -1
  41. package/dist/cli.js +1 -1
  42. package/package.json +1 -1
@@ -6,14 +6,19 @@ description: Multi-Model Review & Runner (MMR) — run an ad-hoc task in an isol
6
6
  # /caddis:mmr — Multi-Model Review & Runner
7
7
 
8
8
  Execute an ad-hoc task across model lanes (GLM-5.3 → Codex Sol → Claude) inside an isolated
9
- git worktree with automated test gates and second-vendor review (DeepSeek). Destroys the worktree
10
- immediately on completion (zero worktree leaks) and leaves the output on a clean branch with a
11
- simple Verdict Card.
9
+ git worktree with automated test gates and second-vendor review (DeepSeek). A full PASS commits
10
+ code changes and removes the worktree. A FAIL or PENDING keeps the worktree for inspection or
11
+ Claude-lane work. The result appears in a Verdict Card.
12
12
 
13
13
  When invoked without a task prompt (or with a git range), `/mmr` runs a direct cross-model diff review.
14
14
 
15
15
  The user typed: **$ARGUMENTS**. Route it to one of the commands below: `keep`, `drop` or `status`
16
- as given; a git range to `review --range`; empty to `review`; anything else is the task for `run`.
16
+ as given; a git range such as `origin/main..HEAD` to `review --range`; empty to `review`;
17
+ anything else is the task for `run`. Pass supported run flags such as `--type` with the task.
18
+ An unknown flag returns a usage error.
19
+
20
+ The exit codes follow `caddis_exit.py`: 0 clean, 1 blocked, 2 advisory, 3 could not run,
21
+ 4 error or bad usage. In particular, `caddis_adhoc.py` returns 4 for bad usage.
17
22
 
18
23
  ## Natural Language Triggers
19
24
  You can trigger MMR naturally without typing the full slash command:
@@ -39,8 +44,9 @@ python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_adhoc.py" "<task description>"
39
44
  - **Failover Cascade:** Automatically cascades from GLM to Codex to Claude if a lane is out of budget.
40
45
  - **Local Test Gates:** Runs project test gates before review.
41
46
  - **Cross-Vendor Review:** DeepSeek or GLM reviews the diff.
42
- - **Immediate Worktree Cleanup:** Stashes/commits results to `lane/adhoc-<slug>` and immediately removes the worktree. Zero open worktrees remain.
43
- - **Verdict Card:** Prints PASS/FAIL summary with diff stats and next actions.
47
+ - **Worktree result:** PASS commits code changes to `lane/adhoc-<slug>` and removes the worktree. FAIL keeps it. A Claude-lane `PENDING` keeps it and prints the `NEXT:` step. Gates that never ran show `Gates: not run`.
48
+ - **No-op and gate failures:** A run with no code changes fails and keeps its worktree. A pytest gate that collects no tests also fails.
49
+ - **Verdict Card:** Prints PASS, FAIL, or PENDING with diff stats and next actions.
44
50
 
45
51
  ### 2. Keep the Result
46
52
  ```bash
@@ -54,7 +60,7 @@ python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_adhoc.py" keep
54
60
  ```bash
55
61
  python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_adhoc.py" drop
56
62
  ```
57
- - Deletes the branch `lane/adhoc-<slug>`.
63
+ - Removes a kept worktree, prunes its registration, and deletes the task branch.
58
64
  - Deletes the ephemeral plan file and run logs.
59
65
  - Workspace remains clean and untouched.
60
66
 
@@ -72,7 +78,7 @@ python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_adhoc.py" review [--range <range>]
72
78
  # Shorthand (no args):
73
79
  python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_adhoc.py"
74
80
  ```
75
- - Fast cross-model review of working tree or git range (e.g., `origin/main..HEAD`).
81
+ - Fast cross-model review of working tree or git range (e.g., `origin/main..HEAD`). A range can also be passed directly as the first argument.
76
82
 
77
83
  ---
78
84
 
@@ -1,36 +1,6 @@
1
1
  ---
2
2
  name: resume
3
- description: Pop the most recently parked workstream off the stack and resume it at its exact resume point
3
+ description: Renamed to /caddis:catchup (alias, removed next release)
4
4
  ---
5
5
 
6
- # /caddis:resume — pop the parked task and pick it back up
7
-
8
- A digression is finished; return to the task you parked with `/digress`. This pops the top frame off the
9
- workstream stack, restates where you were, realigns `relay.md`, and immediately continues the work — the
10
- user should not have to remember or re-state anything.
11
-
12
- ## Step 1 — read the stack
13
- Read `.caddis/workstreams.json`. If it is **absent, unparseable, `version != 1`, or `stack` is empty**,
14
- say exactly `Nothing is parked.` and stop. Do nothing else.
15
-
16
- ## Step 2 — pop the top frame
17
- The top of stack is the **last** element of `stack` (LIFO — most recently parked). Remove it and write the
18
- rest of the file back (preserve `version` and any other frames + unknown fields). This is the one write
19
- this command makes to the state file.
20
-
21
- ## Step 3 — restate + realign relay.md
22
- Restate the popped frame to the user: its `plan`, `phase`, and `resumePointer` (and `repo` if set — the
23
- parked task lives in another repo, so say which). Then edit `.caddis/relay.md`'s `## Next step` section
24
- **in place** so it matches the popped frame's `resumePointer` — preserve every other section of relay.md
25
- untouched. (If relay.md or that section is absent, skip this edit silently; the restatement above is enough.)
26
-
27
- ## Step 4 — resume the work
28
- Begin executing the `resumePointer` immediately. Ask nothing — the frame already carries the next action.
29
- If the parked plan lives in another `repo`, note that the user may need to open that repo first, then
30
- proceed there.
31
-
32
- ## Rules
33
- - **Never** run a destructive or history-rewriting git action (no `git checkout`, `git reset`, `git stash`,
34
- branch switches). Resuming is metadata-only.
35
- - Pop exactly one frame per invocation (the LIFO top). Run `/resume` again to pop the next.
36
- - Only real paths and verified facts — restate the frame as written; do not embellish the resume point.
6
+ This command was renamed to /caddis:catchup. Run /caddis:catchup now in its pop-and-resume mode with the same arguments ($ARGUMENTS); if $ARGUMENTS is empty, pass `last` as the name, so this alias still pops the most recently parked task as /caddis:resume always did. Tell the user once: "/caddis:resume is renamed to /caddis:catchup; the old name will be removed in the next release."
@@ -1,100 +1,6 @@
1
1
  ---
2
2
  name: review
3
- description: Review someone else's OPEN pull request end to end — what changed, what CI says, what is risky — then approve or request changes. Never approves on its own.
3
+ description: Renamed to /caddis:review-pr (alias, removed next release)
4
4
  ---
5
5
 
6
- # /caddis:review — review an open PR, then decide
7
-
8
- Review pull request **$ARGUMENTS** and walk the operator to an approve-or-not decision.
9
-
10
- > **This is the only caddis review surface aimed at a PULL REQUEST.** The others review a local
11
- > diff: `/caddis:gate-review` (adversarial, same vendor), `/caddis:cross-review` (a different
12
- > vendor's model). `/caddis:ship-pr` and `/caddis:ship-merge` create and merge PRs. This one is for
13
- > the case none of those covers — somebody else has opened a PR and you have to decide about it.
14
- >
15
- > Do not reimplement the review itself. Gather the context, then hand the diff to
16
- > `/caddis:gate-review` (or Claude Code's native `/code-review`, which is better where it exists).
17
-
18
- ## Absolute rule
19
-
20
- **Never approve, request changes, merge, or close on the operator's behalf.** Present the evidence
21
- and the exact command; the human runs it. An approval is the one human judgement in the pipeline —
22
- a review tool that also approves has removed the thing it was built to protect.
23
-
24
- ## 1. Resolve the PR
25
-
26
- `$ARGUMENTS` is a PR number, optionally followed by `owner/repo`. With no repo, use the current
27
- directory's `origin`. If the number is missing, list the open PRs and stop.
28
-
29
- ```bash
30
- gh pr view <n> --repo <owner/repo> --json number,title,author,state,isDraft,mergeStateStatus,reviewDecision,baseRefName,headRefName,additions,deletions,changedFiles,url
31
- ```
32
-
33
- **Stop and say so, before reviewing anything**, if:
34
- - the PR is **merged or closed** — there is nothing to decide;
35
- - it is a **draft** — say so and ask whether to continue;
36
- - **the operator is the author.** GitHub does not allow approving your own PR. Say it plainly, and
37
- say the alternatives: have someone else approve it, or merge with an admin bypass
38
- (`gh pr merge <n> --squash --admin`). Do not silently produce a review they cannot submit.
39
-
40
- ## 2. Gather what the decision needs
41
-
42
- Four things, and report them even when they are boring — "CI is green" is information:
43
-
44
- ```bash
45
- gh pr checks <n> --repo <owner/repo> # every check and its state
46
- gh pr diff <n> --repo <owner/repo> # the change itself
47
- gh pr view <n> --repo <owner/repo> --comments # review comments, and any bot review
48
- ```
49
-
50
- If an automated review has already commented, **read it and say whether you agree**. Two reviews
51
- that disagree is a finding; two that agree is worth stating once, not twice.
52
-
53
- `mergeStateStatus` explains a blocked PR without guessing: `BLOCKED` (needs a review),
54
- `BEHIND` (needs *Update branch*), `UNSTABLE` (a check failed), `DIRTY` (conflicts).
55
-
56
- ## 3. Review the diff
57
-
58
- Hand it to `/caddis:gate-review` — or the native `/code-review` on Claude Code. Then, on top of its
59
- verdict, check the things that have actually cost this fleet time, because a generic reviewer will
60
- not know to look:
61
-
62
- - **A gate that cannot fail.** A check whose failure path cannot execute — piped to `Out-Null`,
63
- wrapped in a `catch{}` a native non-zero exit can never trigger, or asserting something too broad
64
- to attribute. It manufactures confidence. Worse than no check.
65
- - **A wall-clock assertion.** A timing threshold on a shared runner measures load, not the code.
66
- Assert ordering instead.
67
- - **Staged directories.** `git add -A` / `git add .` sweeps in files nobody reviewed.
68
- - **CI shell assumptions.** The runner may be Windows PowerShell 5.1, where a native command's
69
- stderr becomes a terminating error under `$ErrorActionPreference='Stop'`, and where `Should -Be`
70
- (Pester 4 syntax) fails on a Pester 3 runner.
71
- - **Deploy-script changes.** If the pipeline runs the deploy script from a checkout it also updates,
72
- the change does not take effect on the deploy that delivers it. Budget two deploys.
73
- - **Verification by proxy.** An HTTP 200 or a version string is not proof a page renders.
74
- - **Credentials.** A token scoped to the wrong host; a permission raised to make a test pass; a
75
- secret in a URL where git will echo it into a log.
76
- - **A doc the change makes untrue.** Comments and runbooks that were accurate until this diff.
77
-
78
- ## 4. Report, then hand over
79
-
80
- Lead with the verdict. Keep it short enough to read before deciding:
81
-
82
- - **What this PR does** — one or two sentences, not a file list.
83
- - **Blocking issues** — each with file, line, and why it matters. None is a valid answer, and say it.
84
- - **Should-fix / nits** — grouped, brief.
85
- - **CI** — green, red, or still running. Name the failing check.
86
- - **Merge state** — and what would clear it.
87
-
88
- Then print the exact commands, and stop:
89
-
90
- ```bash
91
- # approve
92
- gh pr review <n> --repo <owner/repo> --approve
93
- gh pr merge <n> --repo <owner/repo> --squash --delete-branch
94
-
95
- # or ask for changes
96
- gh pr review <n> --repo <owner/repo> --request-changes --body "..."
97
- ```
98
-
99
- **If you found a blocking issue, say so in the verdict line** rather than burying it under the
100
- summary. The operator should be able to read the first line and know whether to keep reading.
6
+ This command was renamed to /caddis:review-pr. Run /caddis:review-pr now with the same arguments ($ARGUMENTS), and tell the user once: "/caddis:review is renamed to /caddis:review-pr; the old name will be removed in the next release."
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: review-pr
3
+ description: Review someone else's OPEN pull request end to end — what changed, what CI says, what is risky — then approve or request changes. Never approves on its own.
4
+ ---
5
+
6
+ # /caddis:review-pr — review an open PR, then decide
7
+
8
+ Review pull request **$ARGUMENTS** and walk the operator to an approve-or-not decision.
9
+
10
+ > **This is the only caddis review surface aimed at a PULL REQUEST.** The others review a local
11
+ > diff: `/caddis:gate-review` (adversarial, same vendor), `/caddis:cross-review` (a different
12
+ > vendor's model). `/caddis:ship-pr` and `/caddis:ship-merge` create and merge PRs. This one is for
13
+ > the case none of those covers — somebody else has opened a PR and you have to decide about it.
14
+ >
15
+ > Do not reimplement the review itself. Gather the context, then hand the diff to
16
+ > `/caddis:gate-review` (or Claude Code's native `/code-review`, which is better where it exists).
17
+
18
+ ## Absolute rule
19
+
20
+ **Never approve, request changes, merge, or close on the operator's behalf.** Present the evidence
21
+ and the exact command; the human runs it. An approval is the one human judgement in the pipeline —
22
+ a review tool that also approves has removed the thing it was built to protect.
23
+
24
+ ## 1. Resolve the PR
25
+
26
+ `$ARGUMENTS` is a PR number, optionally followed by `owner/repo`. With no repo, use the current
27
+ directory's `origin`. If the number is missing, list the open PRs and stop.
28
+
29
+ ```bash
30
+ gh pr view <n> --repo <owner/repo> --json number,title,author,state,isDraft,mergeStateStatus,reviewDecision,baseRefName,headRefName,additions,deletions,changedFiles,url
31
+ ```
32
+
33
+ **Stop and say so, before reviewing anything**, if:
34
+ - the PR is **merged or closed** — there is nothing to decide;
35
+ - it is a **draft** — say so and ask whether to continue;
36
+ - **the operator is the author.** GitHub does not allow approving your own PR. Say it plainly, and
37
+ say the alternatives: have someone else approve it, or merge with an admin bypass
38
+ (`gh pr merge <n> --squash --admin`). Do not silently produce a review they cannot submit.
39
+
40
+ ## 2. Gather what the decision needs
41
+
42
+ Four things, and report them even when they are boring — "CI is green" is information:
43
+
44
+ ```bash
45
+ gh pr checks <n> --repo <owner/repo> # every check and its state
46
+ gh pr diff <n> --repo <owner/repo> # the change itself
47
+ gh pr view <n> --repo <owner/repo> --comments # review comments, and any bot review
48
+ ```
49
+
50
+ If an automated review has already commented, **read it and say whether you agree**. Two reviews
51
+ that disagree is a finding; two that agree is worth stating once, not twice.
52
+
53
+ `mergeStateStatus` explains a blocked PR without guessing: `BLOCKED` (needs a review),
54
+ `BEHIND` (needs *Update branch*), `UNSTABLE` (a check failed), `DIRTY` (conflicts).
55
+
56
+ ## 3. Review the diff
57
+
58
+ Hand it to `/caddis:gate-review` — or the native `/code-review` on Claude Code. Then, on top of its
59
+ verdict, check the things that have actually cost this fleet time, because a generic reviewer will
60
+ not know to look:
61
+
62
+ - **A gate that cannot fail.** A check whose failure path cannot execute — piped to `Out-Null`,
63
+ wrapped in a `catch{}` a native non-zero exit can never trigger, or asserting something too broad
64
+ to attribute. It manufactures confidence. Worse than no check.
65
+ - **A wall-clock assertion.** A timing threshold on a shared runner measures load, not the code.
66
+ Assert ordering instead.
67
+ - **Staged directories.** `git add -A` / `git add .` sweeps in files nobody reviewed.
68
+ - **CI shell assumptions.** The runner may be Windows PowerShell 5.1, where a native command's
69
+ stderr becomes a terminating error under `$ErrorActionPreference='Stop'`, and where `Should -Be`
70
+ (Pester 4 syntax) fails on a Pester 3 runner.
71
+ - **Deploy-script changes.** If the pipeline runs the deploy script from a checkout it also updates,
72
+ the change does not take effect on the deploy that delivers it. Budget two deploys.
73
+ - **Verification by proxy.** An HTTP 200 or a version string is not proof a page renders.
74
+ - **Credentials.** A token scoped to the wrong host; a permission raised to make a test pass; a
75
+ secret in a URL where git will echo it into a log.
76
+ - **A doc the change makes untrue.** Comments and runbooks that were accurate until this diff.
77
+
78
+ ## 4. Report, then hand over
79
+
80
+ Lead with the verdict. Keep it short enough to read before deciding:
81
+
82
+ - **What this PR does** — one or two sentences, not a file list.
83
+ - **Blocking issues** — each with file, line, and why it matters. None is a valid answer, and say it.
84
+ - **Should-fix / nits** — grouped, brief.
85
+ - **CI** — green, red, or still running. Name the failing check.
86
+ - **Merge state** — and what would clear it.
87
+
88
+ Then print the exact commands, and stop:
89
+
90
+ ```bash
91
+ # approve
92
+ gh pr review <n> --repo <owner/repo> --approve
93
+ gh pr merge <n> --repo <owner/repo> --squash --delete-branch
94
+
95
+ # or ask for changes
96
+ gh pr review <n> --repo <owner/repo> --request-changes --body "..."
97
+ ```
98
+
99
+ **If you found a blocking issue, say so in the verdict line** rather than burying it under the
100
+ summary. The operator should be able to read the first line and know whether to keep reading.
@@ -1,105 +1,6 @@
1
1
  ---
2
2
  name: statusline
3
- description: Install the caddis status line into Claude Code and agy — one renderer, once per machine
3
+ description: Renamed to /caddis:install-statusline (alias, removed next release)
4
4
  ---
5
5
 
6
- # /statusline — set up the status bar
7
-
8
- Wire the caddis status line into every coding agent on this machine. One Python renderer serves
9
- both hosts. It installs at **user scope**, so every project gets the line and no project holds a
10
- copy that can drift.
11
-
12
- ## What the user gets
13
-
14
- Claude Code:
15
-
16
- ```
17
- ⌂ claudster-source | saajunaid/caddis ⎇ main +2 ●1 ?3 ↑1 | ◆ Opus 5 (1M context) v2.1.239 |
18
- ◉ 412k/1M [███░░░░░] 41% | ⚡ 386k cached | effort:high | style:Plain | thinking |
19
- 5h:12% 7d:40% | 💻 57% (37 GB) | ⏺ relay | ◷ 07:58
20
- ```
21
-
22
- agy (Antigravity):
23
-
24
- ```
25
- ▛▜ agy | ● idle | 🧠 Gemini 3.6 Flash (High) (high) | 📁 claudster-source | ⎇ main ?3 |
26
- ◉ 48.5k/1M [░░░░░░░░] 5% | ⚡ 40k cached | q 62% | 💻 57% (37 GB) | ⏺ relay | ◷ 08:01
27
- ```
28
-
29
- Both lines come from `caddis_statusline.py`. It has two profiles, because the two hosts send
30
- different field names — agy's payload is a sibling of Claude Code's, not a copy.
31
-
32
- ## Run it
33
-
34
- Find the renderer in this install and run it. Try these paths in order and use the first that exists:
35
-
36
- - `${CLAUDE_PLUGIN_ROOT}/scripts/caddis_statusline.py`
37
- - `claude-harness/scripts/caddis_statusline.py` (working inside the caddis source repo)
38
-
39
- Then:
40
-
41
- ```bash
42
- python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_statusline.py" --install # both hosts
43
- python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_statusline.py" --install --host claude
44
- python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_statusline.py" --install --host agy
45
- python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_statusline.py" --install --dry-run # print, write nothing
46
- ```
47
-
48
- `--install` does four things:
49
-
50
- 1. Copies the renderer to `~/.caddis/statusline.py` — a **stable** path. Pointing the host
51
- settings at the plugin cache would break on every caddis upgrade, because the version number
52
- is in that path.
53
- 2. Creates `~/.caddis/statusline.json` with the default toggles. It never overwrites an existing one.
54
- 3. Backs up each host's `settings.json` to `settings.json.bak-caddis-statusline`.
55
- 4. Sets `statusLine` in `~/.claude/settings.json` and `~/.gemini/antigravity-cli/settings.json`,
56
- preserving every other key. A host that is not installed is skipped, not failed.
57
-
58
- Report the tool's own output to the user. Then tell them the line appears on the **next** session —
59
- neither host re-reads `settings.json` mid-session.
60
-
61
- ## Verify
62
-
63
- ```bash
64
- python ~/.caddis/statusline.py --check # what is wired where
65
- python ~/.caddis/statusline.py --sample --profile claude # preview, no host needed
66
- python ~/.caddis/statusline.py --sample --profile agy
67
- ```
68
-
69
- `--check` exits non-zero when a host's `statusLine` is missing or points somewhere else.
70
-
71
- ## Change the look
72
-
73
- Edit `~/.caddis/statusline.json`. Every key is optional; a missing file means defaults.
74
-
75
- | key | default | what it controls |
76
- |---|---|---|
77
- | `color` | `true` | ANSI colour |
78
- | `icons` | `true` | Unicode segment icons. These are plain Unicode, **not** Nerd Font glyphs |
79
- | `progress_bar` | `true` | the `[███░░░░░]` context bar |
80
- | `bar_width` | `8` | bar cells |
81
- | `token_counts` | `true` | `◉ 412k/1M` |
82
- | `cached_tokens` | `true` | `⚡ 386k cached` — bold and bright by design, never width-gated |
83
- | `ram` | `true` | `💻 57% (37 GB)` |
84
- | `ram_min_width` | `0` | hide RAM below this terminal width; `0` always shows it |
85
- | `clock` | `true` | `◷ 07:58` |
86
- | `relay` | `true` | `⏺ relay` when a parked resume pointer exists |
87
- | `rate_limits` | `true` | `5h:12% 7d:40%` (Claude Code only) |
88
- | `session_id` | `false` | `#a1b2c3d4` |
89
- | `git` | `true` | branch, staged/unstaged/untracked counts, ahead/behind |
90
- | `separator` | `"\|"` | segment separator |
91
-
92
- Config changes take effect on the next render. No reinstall needed.
93
-
94
- ## Notes for you, not the user
95
-
96
- - Do **not** hand-edit either `settings.json` to wire this. `--install` reads, merges and writes
97
- back, so it cannot drop an unrelated key. Hand edits have dropped `trustedWorkspaces` before.
98
- - The renderer never crashes the host. A bad payload, a missing field, or an unreadable config
99
- degrades to fewer segments; a hard failure degrades to the directory name.
100
- - RAM on Windows uses `ctypes` `GlobalMemoryStatusEx`, an in-process call. Do not replace it with
101
- `Get-CimInstance Win32_OperatingSystem` — that cost about 300 ms on **every** render in the
102
- PowerShell line this replaced.
103
- - If the user asks why their old `~/.claude/statusline-custom.sh` or
104
- `~/.gemini/statusline/statusline.ps1` no longer runs: nothing points at them any more. They are
105
- superseded, not deleted. Both are safe to remove once the user is happy with the new line.
6
+ This command was renamed to /caddis:install-statusline. Run /caddis:install-statusline now with the same arguments ($ARGUMENTS), and tell the user once: "/caddis:statusline is renamed to /caddis:install-statusline; the old name will be removed in the next release."
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "caddis-extras",
3
- "version": "1.3.37",
3
+ "version": "1.3.39",
4
4
  "description": "caddis-extras — the long-tail skills for the Antigravity (agy) caddis plugin; install alongside caddis for the full set."
5
5
  }
@@ -79,7 +79,7 @@ python "$TOOL" --range origin/main..HEAD # review a branch's c
79
79
  ```
80
80
  Optional flags: `--cwd <repo>`, `--base-url <url>`, `--model <id>` (override the env).
81
81
 
82
- **Diff-size ceiling.** A diff over `REVIEW_MAX_DIFF_CHARS` (default 60,000 chars) is **split into batches** on whole-file boundaries and each batch reviewed separately (verdict is CLEAN only if every batch is). Exit 2 now means a *single unsplittable file* over the ceiling, or too many batches — not an ordinary large diff. Previously it was refused with exit 2
82
+ **Diff-size ceiling.** A diff over `REVIEW_MAX_DIFF_CHARS` (default 60,000 chars) is **split into batches** on whole-file boundaries and each batch reviewed separately (verdict is CLEAN only if every batch is). Exit 4 means a *single unsplittable file* over the ceiling, or too many batches — not an ordinary large diff. Previously it was refused before any LLM call
83
83
  *before* any LLM call — an oversized diff has been observed to come back either an empty response, or
84
84
  worse, a `REVIEW: CLEAN` with zero real engagement. If you hit this, narrow `--range` or review in
85
85
  smaller chunks; don't just raise `--max-diff-chars` without knowing the endpoint's real limit.
@@ -89,14 +89,14 @@ smaller chunks; don't just raise `--max-diff-chars` without knowing the endpoint
89
89
  - **1 — REVIEW: BLOCKING** → the reviewer found blocking issues. **Read the printed findings, then FIX
90
90
  each blocking item** (or, if you judge one a false positive, state explicitly why it's safe to ignore).
91
91
  Re-run until CLEAN.
92
- - **2 — error** → no verdict parsed, a git failure, or an endpoint/parse failure. Read stderr; do not
92
+ - **4 — error** → no verdict parsed, a git failure, or an endpoint/parse failure. Read stderr; do not
93
93
  treat this as CLEAN — investigate.
94
94
  - **3 — misconfigured** → `REVIEW_API_KEY` is unset. Set it (see Prerequisites) and re-run.
95
95
 
96
96
  ## Rules
97
97
  - This is a **read-only second opinion** — the tool never edits, commits, or pushes. YOU apply fixes in
98
98
  the main thread after reading the findings.
99
- - Treat exit 2/3 as blocking-unknown, never as approval (the tool is fail-closed by design).
99
+ - Treat exit 3/4 as blocking-unknown, never as approval (the tool is fail-closed by design).
100
100
  - Different vendor ⇒ different style; weigh its findings on merit, don't cargo-cult them.
101
101
  - **Never use `find`, `Get-ChildItem -Recurse`, or any other filesystem-wide search to locate
102
102
  `oss_review.py`.** Check only the two paths above. On Git Bash under Windows, `find /` (or any
@@ -71,7 +71,7 @@ A comprehensive table specifying the complete end-to-end data lineage across the
71
71
  | ... | ... | ... | ... | ... | ... | ... | ... |
72
72
 
73
73
  Column specifications:
74
- - **App:** Application identifier (e.g. `rev-sight`).
74
+ - **App:** Application identifier (e.g. `billing-portal`).
75
75
  - **UI Page:** User interface page path and title (e.g. `/runs (Run Monitor)`).
76
76
  - **API Route:** HTTP method and endpoint (e.g. `GET /api/runs`).
77
77
  - **Dataset:** Schema-qualified tables or views read (e.g. `[dbo].[CDR_RUN_LOG]`).
@@ -7,7 +7,7 @@ description: "USE THIS SKILL whenever a user asks for a comprehensive implementa
7
7
  # Golden Plan
8
8
 
9
9
  > **`/caddis:feature-plan` is the canonical planning entry point.** It writes to `.caddis/plans/`,
10
- > which is what `/caddis:implement`, `/caddis:handoff`, `/caddis:digress` and `/caddis:resume`
10
+ > which is what `/caddis:implement`, `/caddis:handoff`, `/caddis:digress` and `/caddis:catchup`
11
11
  > actually read, and it now carries this skill's evidence gate. Reach for golden-plan when you
12
12
  > specifically need its heavier apparatus — the data-binding tables, the query catalog, the
13
13
  > self-sweep. For ordinary multi-phase work, feature-plan is the shorter path to the same place.
@@ -18,19 +18,3 @@
18
18
  # [[skills.config]]
19
19
  # path = ".codex/skills/devops/windows-deployment"
20
20
  # enabled = false
21
-
22
- # ── junai MCP (pipeline state + project context) ─────────────────────────────
23
- # OFF by default. The junai MCP server tracks pipeline stage and project state
24
- # across sessions. Enable when the server is available locally.
25
- #
26
- # Prerequisites:
27
- # pip install junai-mcp (or: uv tool install junai-mcp)
28
- # codex mcp add junai -- python -m junai_mcp --project-root .
29
- #
30
- # Or add the block below manually and run `codex mcp list` to confirm:
31
- #
32
- # [[mcp_servers]]
33
- # name = "junai"
34
- # command = "python"
35
- # args = ["-m", "junai_mcp", "--project-root", "."]
36
- # env = {}
@@ -57,7 +57,7 @@ On a fresh session read in order: `.caddis/relay.md` (if present) → the active
57
57
  runbook, analysis, handoff) must open with a YAML frontmatter block:
58
58
  ```yaml
59
59
  ---
60
- type: plan|prd|adr|design|runbook|handoff|analysis|review
60
+ type: plan|prd|adr|design|runbook|handoff|analysis|review|prompt|parking-lot|rca|todo|relay|comms|reference|note|phase-report|implement-review|phase-verdict|hub-spawn|advisory-context|phase-prompt
61
61
  status: draft|current|done|superseded
62
62
  feature: <feature-slug>
63
63
  creation-agent: caddis
@@ -111,7 +111,7 @@ future: yes # OPTIONAL. yes = committed. Absent or `no` = a candida
111
111
  life, and whether we have agreed to do it. `python scripts/caddis_tidy.py --check` and the
112
112
  `caddis_gate.py parking-lot` gate both fail on a non-conforming item, so this is enforced, not
113
113
  advised. Two neighbours that are NOT the backlog: `/caddis:digress` parks an interrupted task on a
114
- stack (`/caddis:resume` pops it), and `.caddis/backlog/` is written by **docket** as a projection of
114
+ stack (`/caddis:catchup` pops it), and `.caddis/backlog/` is written by **docket** as a projection of
115
115
  its board — never hand-edit that one.
116
116
 
117
117
  ### Write environment facts down in the same turn
@@ -1,8 +1,8 @@
1
1
  {
2
- "poolVersion": "1.3.119",
2
+ "poolVersion": "1.3.120",
3
3
  "bundles": {
4
- "antigravity-plugin": "1.3.119",
5
- "antigravity-plugin-extras": "1.3.37",
4
+ "antigravity-plugin": "1.3.120",
5
+ "antigravity-plugin-extras": "1.3.39",
6
6
  "codex": "unknown"
7
7
  }
8
8
  }
@@ -326,7 +326,7 @@ import { isAbsolute, join } from "path";
326
326
  var PROVIDERS = {
327
327
  deepseek: {
328
328
  baseUrl: "https://api.deepseek.com/anthropic",
329
- model: "deepseek-v4-flash[1m]",
329
+ model: "deepseek-flash[1m]",
330
330
  keyEnv: "DEEPSEEK_API_KEY"
331
331
  },
332
332
  glm: {
@@ -326,7 +326,7 @@ import { isAbsolute, join } from "path";
326
326
  var PROVIDERS = {
327
327
  deepseek: {
328
328
  baseUrl: "https://api.deepseek.com/anthropic",
329
- model: "deepseek-v4-flash[1m]",
329
+ model: "deepseek-flash[1m]",
330
330
  keyEnv: "DEEPSEEK_API_KEY"
331
331
  },
332
332
  glm: {
@@ -326,7 +326,7 @@ import { isAbsolute, join } from "path";
326
326
  var PROVIDERS = {
327
327
  deepseek: {
328
328
  baseUrl: "https://api.deepseek.com/anthropic",
329
- model: "deepseek-v4-flash[1m]",
329
+ model: "deepseek-flash[1m]",
330
330
  keyEnv: "DEEPSEEK_API_KEY"
331
331
  },
332
332
  glm: {
package/dist/cli.js CHANGED
@@ -4888,7 +4888,7 @@ var init_resolve = __esm({
4888
4888
  PROVIDERS = {
4889
4889
  deepseek: {
4890
4890
  baseUrl: "https://api.deepseek.com/anthropic",
4891
- model: "deepseek-v4-flash[1m]",
4891
+ model: "deepseek-flash[1m]",
4892
4892
  keyEnv: "DEEPSEEK_API_KEY"
4893
4893
  },
4894
4894
  glm: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caddis/cli",
3
- "version": "0.4.30",
3
+ "version": "0.4.33",
4
4
  "description": "Install, update and diagnose the caddis dev harness across every coding agent you use (Claude Code, agy/Antigravity, and more).",
5
5
  "keywords": [
6
6
  "caddis",