@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.
- package/bundles/antigravity-plugin/mcp_ping_server.py +1 -1
- package/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_adhoc.py +301 -66
- package/bundles/antigravity-plugin/scripts/caddis_exit.py +15 -0
- package/bundles/antigravity-plugin/scripts/caddis_frontmatter.py +145 -0
- package/bundles/antigravity-plugin/scripts/caddis_gate.py +33 -10
- package/bundles/antigravity-plugin/scripts/caddis_governor.py +5 -2
- package/bundles/antigravity-plugin/scripts/caddis_lanes.py +13 -1
- package/bundles/antigravity-plugin/scripts/caddis_migrate_dir.py +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_spawn.py +2 -2
- package/bundles/antigravity-plugin/scripts/caddis_tidy.py +9 -14
- package/bundles/antigravity-plugin/scripts/claudster_doctor.py +66 -0
- package/bundles/antigravity-plugin/scripts/new-machine.ps1 +1 -1
- package/bundles/antigravity-plugin/scripts/oss_ask.py +6 -5
- package/bundles/antigravity-plugin/scripts/oss_model.py +1 -1
- package/bundles/antigravity-plugin/scripts/oss_review.py +84 -15
- package/bundles/antigravity-plugin/scripts/secret_filter.py +316 -0
- package/bundles/antigravity-plugin/scripts/setup_project_ai.py +9 -4
- package/bundles/antigravity-plugin/skills/_registry.md +5 -3
- package/bundles/antigravity-plugin/skills/catchup/SKILL.md +37 -2
- package/bundles/antigravity-plugin/skills/cross-review/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/digress/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/handoff/SKILL.md +8 -1
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +3 -1
- package/bundles/antigravity-plugin/skills/install-statusline/SKILL.md +105 -0
- package/bundles/antigravity-plugin/skills/mmr/SKILL.md +14 -8
- package/bundles/antigravity-plugin/skills/resume/SKILL.md +2 -32
- package/bundles/antigravity-plugin/skills/review/SKILL.md +2 -96
- package/bundles/antigravity-plugin/skills/review-pr/SKILL.md +100 -0
- package/bundles/antigravity-plugin/skills/statusline/SKILL.md +2 -101
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +3 -3
- package/bundles/antigravity-plugin-extras/skills/data-lineage/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/golden-plan/SKILL.md +1 -1
- package/bundles/codex/.codex/config.toml.example +0 -16
- package/bundles/codex/AGENTS.md +2 -2
- package/bundles/manifest.json +3 -3
- package/dist/claude-deepseek.js +1 -1
- package/dist/claude-glm.js +1 -1
- package/dist/claude-oss.js +1 -1
- package/dist/cli.js +1 -1
- 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).
|
|
10
|
-
|
|
11
|
-
|
|
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`;
|
|
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
|
-
- **
|
|
43
|
-
- **
|
|
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
|
-
-
|
|
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:
|
|
3
|
+
description: Renamed to /caddis:catchup (alias, removed next release)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
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:
|
|
3
|
+
description: Renamed to /caddis:review-pr (alias, removed next release)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
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:
|
|
3
|
+
description: Renamed to /caddis:install-statusline (alias, removed next release)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
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."
|
|
@@ -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
|
|
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
|
-
- **
|
|
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
|
|
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. `
|
|
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:
|
|
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 = {}
|
package/bundles/codex/AGENTS.md
CHANGED
|
@@ -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:
|
|
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
|
package/bundles/manifest.json
CHANGED
package/dist/claude-deepseek.js
CHANGED
package/dist/claude-glm.js
CHANGED
package/dist/claude-oss.js
CHANGED
package/dist/cli.js
CHANGED
package/package.json
CHANGED