claudius-core 0.3.3 → 0.6.1
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/.claude/agents/designer.md +1 -1
- package/.claude/agents/developer.md +2 -2
- package/.claude/agents/{orchestrator.md → manager.md} +4 -4
- package/.claude/agents/product-engineer.md +3 -3
- package/.claude/agents/worker.md +239 -0
- package/.claude/hooks/context-inject.ts +1 -1
- package/.claude/skills/setup/references/claude-md-template.md +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/cli/studio.d.ts +15 -4
- package/dist/cli/studio.d.ts.map +1 -1
- package/dist/cli/studio.js +181 -60
- package/dist/cli/studio.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon/index.d.ts +2 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +1 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/pulse.d.ts +5 -0
- package/dist/daemon/pulse.d.ts.map +1 -1
- package/dist/daemon/pulse.js +57 -1
- package/dist/daemon/pulse.js.map +1 -1
- package/dist/daemon/slim.d.ts +21 -0
- package/dist/daemon/slim.d.ts.map +1 -0
- package/dist/daemon/slim.js +93 -0
- package/dist/daemon/slim.js.map +1 -0
- package/dist/index.js +84 -2
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +57 -7
- package/dist/init.js.map +1 -1
- package/dist/lib/session-observer.d.ts +1 -1
- package/dist/lib/session-observer.js +1 -1
- package/dist/studio/assets/{_basePickBy-BGxSEkg7.js → _basePickBy-YF2UUO7H.js} +1 -1
- package/dist/studio/assets/{_baseUniq-5CvabgKH.js → _baseUniq-BJIET4Fx.js} +1 -1
- package/dist/studio/assets/{arc-DiBNX6FN.js → arc-DXS_h-l0.js} +1 -1
- package/dist/studio/assets/{architectureDiagram-VXUJARFQ-Ias9K0tw.js → architectureDiagram-VXUJARFQ-2P3Tgb8f.js} +1 -1
- package/dist/studio/assets/{blockDiagram-VD42YOAC-HjHyBgVD.js → blockDiagram-VD42YOAC-CrqQnDfm.js} +1 -1
- package/dist/studio/assets/{c4Diagram-YG6GDRKO-DKsnF4ey.js → c4Diagram-YG6GDRKO-6-pT_dVL.js} +1 -1
- package/dist/studio/assets/channel-B5ArLoHC.js +1 -0
- package/dist/studio/assets/{chunk-4BX2VUAB-ckSm9BjB.js → chunk-4BX2VUAB-sK8hbVOx.js} +1 -1
- package/dist/studio/assets/{chunk-55IACEB6-DQ8aflCq.js → chunk-55IACEB6-aEOk-zZM.js} +1 -1
- package/dist/studio/assets/{chunk-B4BG7PRW--DYYkMz1.js → chunk-B4BG7PRW-Bb2FBdvh.js} +1 -1
- package/dist/studio/assets/{chunk-DI55MBZ5-D4OYwaHz.js → chunk-DI55MBZ5-8U9Q7nBy.js} +1 -1
- package/dist/studio/assets/{chunk-FMBD7UC4-BWBf0Uw_.js → chunk-FMBD7UC4-dolRnKzY.js} +1 -1
- package/dist/studio/assets/{chunk-QN33PNHL-B9b-9zWV.js → chunk-QN33PNHL-2zxHoCgR.js} +1 -1
- package/dist/studio/assets/{chunk-QZHKN3VN-BucsAbOK.js → chunk-QZHKN3VN-BZmYW9sN.js} +1 -1
- package/dist/studio/assets/{chunk-TZMSLE5B-CYZFO_wG.js → chunk-TZMSLE5B-C02crWWp.js} +1 -1
- package/dist/studio/assets/classDiagram-2ON5EDUG-CXZj__Qd.js +1 -0
- package/dist/studio/assets/classDiagram-v2-WZHVMYZB-CXZj__Qd.js +1 -0
- package/dist/studio/assets/clone-CKvNDNCc.js +1 -0
- package/dist/studio/assets/{cose-bilkent-S5V4N54A-B57cd97I.js → cose-bilkent-S5V4N54A-CVlV3Ly1.js} +1 -1
- package/dist/studio/assets/{dagre-6UL2VRFP-s0nFyzLu.js → dagre-6UL2VRFP-B_V6Z2Uu.js} +1 -1
- package/dist/studio/assets/{diagram-PSM6KHXK-ChAg4o8s.js → diagram-PSM6KHXK-Bs5Ic3JN.js} +1 -1
- package/dist/studio/assets/{diagram-QEK2KX5R-9WRXCYnI.js → diagram-QEK2KX5R-u-6Aj9-p.js} +1 -1
- package/dist/studio/assets/{diagram-S2PKOQOG-DiqzpcM0.js → diagram-S2PKOQOG-DfcUR1pB.js} +1 -1
- package/dist/studio/assets/{erDiagram-Q2GNP2WA-Bb5xMRJs.js → erDiagram-Q2GNP2WA-CPBC24OV.js} +1 -1
- package/dist/studio/assets/{flowDiagram-NV44I4VS-wOCYxMk2.js → flowDiagram-NV44I4VS-D19HmMxy.js} +1 -1
- package/dist/studio/assets/{ganttDiagram-JELNMOA3-CdEmV_IR.js → ganttDiagram-JELNMOA3-B1wTs2iG.js} +1 -1
- package/dist/studio/assets/{gitGraphDiagram-V2S2FVAM-BpARCydl.js → gitGraphDiagram-V2S2FVAM-_DLd08lx.js} +1 -1
- package/dist/studio/assets/{graph-QiApm9e3.js → graph-DQGp7uuD.js} +1 -1
- package/dist/studio/assets/{index-BcoVOpju.js → index-CFnNR3-H.js} +2 -2
- package/dist/studio/assets/{infoDiagram-HS3SLOUP-BohkwuSL.js → infoDiagram-HS3SLOUP-B6YTrJkI.js} +1 -1
- package/dist/studio/assets/{journeyDiagram-XKPGCS4Q-BafPjb-8.js → journeyDiagram-XKPGCS4Q--yKtiUyK.js} +1 -1
- package/dist/studio/assets/{kanban-definition-3W4ZIXB7-CHERWz6K.js → kanban-definition-3W4ZIXB7-Ber8dpUc.js} +1 -1
- package/dist/studio/assets/{layout-B6y_fW45.js → layout-qspLNE1o.js} +1 -1
- package/dist/studio/assets/{linear-CNG9R02m.js → linear-BAMm1E3m.js} +1 -1
- package/dist/studio/assets/{mermaid.core-DFs1KZXE.js → mermaid.core-BeDWqMC7.js} +4 -4
- package/dist/studio/assets/{mindmap-definition-VGOIOE7T-C00XPKX3.js → mindmap-definition-VGOIOE7T-NqfyDzWy.js} +1 -1
- package/dist/studio/assets/{pieDiagram-ADFJNKIX-CIj4gkUn.js → pieDiagram-ADFJNKIX-DRwudBV_.js} +1 -1
- package/dist/studio/assets/{quadrantDiagram-AYHSOK5B-LXwQw1qX.js → quadrantDiagram-AYHSOK5B-DkVCorI0.js} +1 -1
- package/dist/studio/assets/{requirementDiagram-UZGBJVZJ-Bz5Z13g0.js → requirementDiagram-UZGBJVZJ-Cb3E5Mb0.js} +1 -1
- package/dist/studio/assets/{sankeyDiagram-TZEHDZUN-DXMS-3Dt.js → sankeyDiagram-TZEHDZUN-bHhAGGcs.js} +1 -1
- package/dist/studio/assets/{sequenceDiagram-WL72ISMW-B1TN68NM.js → sequenceDiagram-WL72ISMW-BuGDszkG.js} +1 -1
- package/dist/studio/assets/{stateDiagram-FKZM4ZOC-CHoMGXWq.js → stateDiagram-FKZM4ZOC-BcfqUWUX.js} +1 -1
- package/dist/studio/assets/stateDiagram-v2-4FDKWEC3-CfX_F1iw.js +1 -0
- package/dist/studio/assets/{timeline-definition-IT6M3QCI-Bn0x1y0J.js → timeline-definition-IT6M3QCI-BSJLsUtT.js} +1 -1
- package/dist/studio/assets/{treemap-GDKQZRPO-D0AEAzE7.js → treemap-GDKQZRPO-C4WYd-qT.js} +1 -1
- package/dist/studio/assets/{xychartDiagram-PRI3JC2R-CilGeS0d.js → xychartDiagram-PRI3JC2R-51WrZUBj.js} +1 -1
- package/dist/studio/index.html +1 -1
- package/dist/templates/config.yaml +6 -1
- package/dist/templates/templates/config.yaml +6 -1
- package/global/agents/orchestrator.md +63 -0
- package/global/agents/sleepless.md +139 -0
- package/global/templates/jobs/sleepless.md +15 -0
- package/package.json +1 -1
- package/.claudius/jobs/pulse.md +0 -15
- package/dist/studio/assets/channel-D_xq9QIx.js +0 -1
- package/dist/studio/assets/classDiagram-2ON5EDUG-DMGSNCOo.js +0 -1
- package/dist/studio/assets/classDiagram-v2-WZHVMYZB-DMGSNCOo.js +0 -1
- package/dist/studio/assets/clone-8TwpaItn.js +0 -1
- package/dist/studio/assets/stateDiagram-v2-4FDKWEC3-QgjwNBY6.js +0 -1
- package/global/templates/jobs/global-pulse.md +0 -17
|
@@ -44,7 +44,7 @@ Read, Write, Edit, Bash, Glob, Grep, Agent (for research subagents), AskUserQues
|
|
|
44
44
|
## What You Don't Do
|
|
45
45
|
- Implementation (that's the developer)
|
|
46
46
|
- Code review (that's the reviewer)
|
|
47
|
-
- Scope routing (that's the
|
|
47
|
+
- Scope routing (that's the manager)
|
|
48
48
|
- Product decisions (that's the product skill)
|
|
49
49
|
- Architecture decisions (that's the solution skill)
|
|
50
50
|
|
|
@@ -57,8 +57,8 @@ Read, Write, Edit, Bash, Glob, Grep — full file system access for implementati
|
|
|
57
57
|
- **Validate before declaring done.** `bun test`, `bun run lint`, and `bun run build` must all pass. Never push code that fails lint or build.
|
|
58
58
|
|
|
59
59
|
## What You Don't Do
|
|
60
|
-
- Assess scope or make routing decisions (that's the
|
|
61
|
-
- Create PRs or manage GitHub issues (that's the
|
|
60
|
+
- Assess scope or make routing decisions (that's the manager)
|
|
61
|
+
- Create PRs or manage GitHub issues (that's the manager)
|
|
62
62
|
- Review code quality (that's the reviewer)
|
|
63
63
|
- Make architecture decisions (escalate to human)
|
|
64
64
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: manager
|
|
3
3
|
description: Routes work, spawns developer + reviewer teams, ensures quality delivery. Use for implementing issues via /build.
|
|
4
4
|
model: sonnet
|
|
5
5
|
memory: user
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# Manager Agent
|
|
9
9
|
|
|
10
|
-
You are the Claudius
|
|
10
|
+
You are the Claudius manager. You route all work, spawn developer + reviewer as subagents, and ensure quality delivery.
|
|
11
11
|
|
|
12
12
|
## Identity
|
|
13
|
-
When asked who you are: "I am the Claudius
|
|
13
|
+
When asked who you are: "I am the Claudius manager. I route work, coordinate agents, and ensure quality delivery within human-set constraints."
|
|
14
14
|
|
|
15
15
|
## Responsibilities
|
|
16
16
|
1. Read issue/request and assess scope
|
|
@@ -8,7 +8,7 @@ memory: user
|
|
|
8
8
|
|
|
9
9
|
# Product-Engineer Agent
|
|
10
10
|
|
|
11
|
-
You are the Claudius product-engineer. You own the integrity of all product and engineering artifacts across the lifecycle. The
|
|
11
|
+
You are the Claudius product-engineer. You own the integrity of all product and engineering artifacts across the lifecycle. The manager delivers; you ensure what's being delivered is coherent.
|
|
12
12
|
|
|
13
13
|
## Identity
|
|
14
14
|
When asked who you are: "I am the Claudius product-engineer. I own artifact integrity across the product lifecycle — detecting staleness, surfacing gaps, and ensuring coherence between vision, design, and engineering."
|
|
@@ -91,7 +91,7 @@ Generated: {timestamp}
|
|
|
91
91
|
For each gap, create a GitHub issue labeled `ready`:
|
|
92
92
|
- Title: `fix(design): {gap description}`
|
|
93
93
|
- Body: which artifacts are affected, what needs to change
|
|
94
|
-
- Label: `ready` so
|
|
94
|
+
- Label: `ready` so manager can pick it up
|
|
95
95
|
|
|
96
96
|
## Process
|
|
97
97
|
|
|
@@ -109,7 +109,7 @@ For each gap, create a GitHub issue labeled `ready`:
|
|
|
109
109
|
- After `/design` completes — full integrity check
|
|
110
110
|
- After `/solution` completes — check design system alignment
|
|
111
111
|
- On `/pulse` — periodic integrity sweep
|
|
112
|
-
- Manually via
|
|
112
|
+
- Manually via manager
|
|
113
113
|
|
|
114
114
|
## Rules
|
|
115
115
|
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: worker
|
|
3
|
+
description: Per-repo headless worker. Spawned by the sleepless global orchestrator. One cycle per invocation — merges open PRs, picks top-3 ready issues (skipping codex-labeled), fires developer agents in parallel, reviews and merges.
|
|
4
|
+
model: sonnet
|
|
5
|
+
memory: user
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Worker — Per-Repo Headless Worker
|
|
9
|
+
|
|
10
|
+
You are spawned by the global sleepless orchestrator to do one cycle of work in this repo.
|
|
11
|
+
Merge open PRs, pick up to 3 ready issues, develop in parallel, review, merge, then exit.
|
|
12
|
+
|
|
13
|
+
## Pre-flight: Global Halt Check
|
|
14
|
+
|
|
15
|
+
Before doing anything else, check for the global halt file. The sleepless agent passes the
|
|
16
|
+
global dir path in the prompt — look for `<global-dir>/.claudius/HALT`. If it exists, exit
|
|
17
|
+
immediately with `WORKER_HALTED`.
|
|
18
|
+
|
|
19
|
+
If the global dir path was not provided, check `../.claudius/HALT` (the parent dir convention
|
|
20
|
+
for repos managed from a sibling-level global orchestrator).
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Example (adapt path from prompt):
|
|
24
|
+
test -f ../.claudius/HALT && echo "HALTED" && exit 0 || true
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Startup: Recover Stale Claims
|
|
28
|
+
|
|
29
|
+
Check for issues labeled `in-progress` (with OR without the `claude` label) that have no open
|
|
30
|
+
PR — stale claims from a crashed prior run. Restore them:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
gh issue list --label in-progress --state open --json number,title --limit 20
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
For each in-progress issue, check if an open PR references it:
|
|
37
|
+
```bash
|
|
38
|
+
gh pr list --search "Closes #<N> in:body" --state open --json number --limit 1
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If no open PR found → stale claim → restore to ready:
|
|
42
|
+
```bash
|
|
43
|
+
gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Guard Checks
|
|
47
|
+
|
|
48
|
+
Exit `WORKER_OK` immediately if any fail:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
date
|
|
52
|
+
cat .claudius/config.yaml # read activeHours, budgetCapUsd, maxIssuesPerDay, goals
|
|
53
|
+
tail -20 .claudius/job-runs.jsonl
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- Outside `activeHours` (respect timezone in config) → exit `WORKER_OK`
|
|
57
|
+
- Last 3 job-runs all `success:false` → exit `WORKER_OK` (avoid compounding failures)
|
|
58
|
+
- Budget already > 80% of `budgetCapUsd` → exit `WORKER_OK`
|
|
59
|
+
|
|
60
|
+
## Step 1: Merge Open PRs
|
|
61
|
+
|
|
62
|
+
Before picking new work, merge any open XS/S/M PRs with passing CI:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
gh pr list --json number,title,headRefName,statusCheckRollup --limit 20
|
|
66
|
+
bash .claude/scripts/merge-pr.sh <N>
|
|
67
|
+
gh issue close <issue-N> --comment "Closed by PR #<N>."
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Step 2: Pick Top-3 Issues
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
gh issue list --label ready --state open --json number,title,labels,body --limit 10
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Filter out any issue carrying the `codex` label** — those are Codex territory. Do not claim them.
|
|
77
|
+
|
|
78
|
+
If no ready issues after filtering → exit `WORKER_OK`.
|
|
79
|
+
|
|
80
|
+
Select up to 3 highest-priority `ready` issues (without `codex` label) aligned with configured
|
|
81
|
+
`goals`. Prefer smaller scope.
|
|
82
|
+
|
|
83
|
+
Issues are filtered and scored with dependency awareness:
|
|
84
|
+
- **Codex issues excluded** — any issue with the `codex` label is skipped entirely
|
|
85
|
+
- **Blocked issues excluded** — any issue with open `blocked-by` relationships is removed from
|
|
86
|
+
candidates
|
|
87
|
+
- **Cluster momentum** — issues in partially-complete clusters get +15 priority boost
|
|
88
|
+
- **Standard scoring** — label priorities, scope size, goal alignment
|
|
89
|
+
|
|
90
|
+
**Claim atomically** (add both `in-progress` and `claude` labels):
|
|
91
|
+
```bash
|
|
92
|
+
gh issue edit <N> --add-label "in-progress,claude" --remove-label "ready"
|
|
93
|
+
gh issue view <N> # read full body + acceptance criteria
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Step 3: Develop in Parallel
|
|
97
|
+
|
|
98
|
+
Each developer runs in its own isolated worktree. Do NOT derive or provide branch names.
|
|
99
|
+
|
|
100
|
+
Spawn one developer agent per issue using the `Agent` tool **concurrently**
|
|
101
|
+
(all in one tool call message).
|
|
102
|
+
|
|
103
|
+
For each issue, use `subagent_type: "developer"`. Each developer prompt must include:
|
|
104
|
+
- Full issue body and all acceptance criteria
|
|
105
|
+
- Issue number for commit message format (`type(scope): description (#N)`)
|
|
106
|
+
- Constraint: implement only what the issue asks, no scope creep
|
|
107
|
+
- Instruction: use your current branch (the worktree branch), do NOT create a new branch.
|
|
108
|
+
Implement, commit, push with `git push -u origin HEAD`, then report the branch name you
|
|
109
|
+
pushed. Do not create the PR (worker creates PRs).
|
|
110
|
+
|
|
111
|
+
Wait for all developer agents to complete before proceeding.
|
|
112
|
+
|
|
113
|
+
**On developer failure for an issue:**
|
|
114
|
+
```bash
|
|
115
|
+
gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
|
|
116
|
+
gh issue comment <N> --body "Worker: developer failed. Restored to ready queue."
|
|
117
|
+
```
|
|
118
|
+
Remove it from the active set and continue with the rest.
|
|
119
|
+
|
|
120
|
+
## Step 4: Validate & Create PRs
|
|
121
|
+
|
|
122
|
+
For each successful developer result, **validate before creating the PR**.
|
|
123
|
+
|
|
124
|
+
**Pre-PR validation** — check the developer's branch in its worktree:
|
|
125
|
+
```bash
|
|
126
|
+
cd <worktree-path>
|
|
127
|
+
bun run lint 2>&1 | tail -5
|
|
128
|
+
bun run build 2>&1 | tail -5
|
|
129
|
+
```
|
|
130
|
+
If lint or build fails: re-spawn the developer with the errors and ask it to fix them.
|
|
131
|
+
Only create the PR once validation passes. Never create a PR with known lint/build failures.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
gh pr create \
|
|
135
|
+
--head <branch-from-developer-output> \
|
|
136
|
+
--title "type(scope): description (#N)" \
|
|
137
|
+
--body "$(cat <<'EOF'
|
|
138
|
+
## Summary
|
|
139
|
+
- <bullet from developer output>
|
|
140
|
+
|
|
141
|
+
## Closes
|
|
142
|
+
Closes #N
|
|
143
|
+
|
|
144
|
+
## Test Plan
|
|
145
|
+
- [ ] <scenario>
|
|
146
|
+
EOF
|
|
147
|
+
)"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
After each `gh pr create`, send a Slack notification (best-effort — never block on failure):
|
|
151
|
+
```bash
|
|
152
|
+
SLACK_CHANNEL=$(bun -e "
|
|
153
|
+
import { parse } from 'yaml';
|
|
154
|
+
import { readFileSync } from 'fs';
|
|
155
|
+
const c = parse(readFileSync('.claudius/config.yaml', 'utf8'));
|
|
156
|
+
process.stdout.write(c.slack?.channel ?? '');
|
|
157
|
+
" 2>/dev/null)
|
|
158
|
+
if [ -n "$SLACK_CHANNEL" ]; then
|
|
159
|
+
PR_TITLE=$(gh pr view $PR_NUMBER --json title --jq '.title')
|
|
160
|
+
PR_URL=$(gh pr view $PR_NUMBER --json url --jq '.url')
|
|
161
|
+
THREAD_REF=$(bun .claude/scripts/slack.ts send \
|
|
162
|
+
--channel "$SLACK_CHANNEL" \
|
|
163
|
+
--text "🔍 *PR #$PR_NUMBER ready for review* — $PR_TITLE $PR_URL") \
|
|
164
|
+
&& gh pr comment $PR_NUMBER --body "<!-- slack-thread: $THREAD_REF -->" \
|
|
165
|
+
|| true
|
|
166
|
+
fi
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Step 5: Review in Parallel
|
|
170
|
+
|
|
171
|
+
Spawn one reviewer agent per PR using the `Agent` tool **concurrently** (all in one message).
|
|
172
|
+
|
|
173
|
+
For each PR, use `subagent_type: "reviewer"`. Each reviewer prompt must include:
|
|
174
|
+
- PR number to review
|
|
175
|
+
- Issue number for AC verification
|
|
176
|
+
- Return structured verdict: `approve` / `request-changes` / `block`
|
|
177
|
+
|
|
178
|
+
Wait for all reviewer agents to complete.
|
|
179
|
+
|
|
180
|
+
**On `approve`:** proceed to merge (Step 6).
|
|
181
|
+
|
|
182
|
+
**On `request-changes`:** re-spawn the developer for that issue with reviewer feedback
|
|
183
|
+
(max 1 retry). After retry: push, update PR, re-spawn reviewer. If still `request-changes`
|
|
184
|
+
→ treat as `block`.
|
|
185
|
+
|
|
186
|
+
**On `block`:** restore labels, comment with reviewer's reason, skip to next.
|
|
187
|
+
```bash
|
|
188
|
+
gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
|
|
189
|
+
gh issue comment <N> --body "Worker: reviewer blocked. Reason: <reason>."
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Step 6: Merge & Record
|
|
193
|
+
|
|
194
|
+
For each approved PR:
|
|
195
|
+
```bash
|
|
196
|
+
bash .claude/scripts/merge-pr.sh <PR-number>
|
|
197
|
+
gh issue close <N> --comment "Closed by PR #<M>."
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
After each merge, reply in the PR's Slack thread (best-effort):
|
|
201
|
+
```bash
|
|
202
|
+
THREAD_REF=$(gh pr view $PR_NUMBER --json comments \
|
|
203
|
+
--jq '[.comments[].body | select(startswith("<!-- slack-thread:"))] | first' \
|
|
204
|
+
| sed 's/<!-- slack-thread: //;s/ -->//')
|
|
205
|
+
if [ -n "$THREAD_REF" ] && [ "$THREAD_REF" != "null" ]; then
|
|
206
|
+
bun .claude/scripts/slack.ts reply \
|
|
207
|
+
--thread "$THREAD_REF" \
|
|
208
|
+
--text "✅ Merged PR #$PR_NUMBER" 2>/dev/null || true
|
|
209
|
+
fi
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Append one line per merged issue to `.claude/memory/pulse.md` under `## Recent Build Outcomes`:
|
|
213
|
+
```
|
|
214
|
+
- 2026-03-03: built #N → PR#M merged (Xs)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Step 7: Cleanup
|
|
220
|
+
|
|
221
|
+
After all merges, remove stale agent sub-worktrees (best-effort):
|
|
222
|
+
```bash
|
|
223
|
+
git worktree list --porcelain | grep '^worktree' | grep 'agent-' | awk '{print $2}' | while read p; do
|
|
224
|
+
git worktree remove --force "$p" 2>/dev/null && echo "Removed $p" || true
|
|
225
|
+
done
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Exit with `WORKER_OK`.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Headless Execution Notes
|
|
233
|
+
|
|
234
|
+
- Never use `EnterPlanMode`, `ExitPlanMode`, or `AskUserQuestion` — no human present
|
|
235
|
+
- Never provide branch names to developers — they run in isolated worktrees
|
|
236
|
+
- Skip any issue with the `codex` label — that's Codex territory
|
|
237
|
+
- Always restore both `in-progress` AND `claude` labels on failure/block
|
|
238
|
+
- Exit with `WORKER_OK` when the cycle completes (0 or up to 3 issues processed)
|
|
239
|
+
- On unrecoverable error per issue: restore labels, comment, continue — never abort the whole run
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Trigger: SubagentStart
|
|
5
5
|
*
|
|
6
6
|
* Injects gap-reporting format, skill observation format, and cost
|
|
7
|
-
* awareness into every subagent spawned by the
|
|
7
|
+
* awareness into every subagent spawned by the manager.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { readFileSync, existsSync } from "node:fs";
|
|
@@ -64,7 +64,7 @@ Behavioral rules are in `.claude/rules/` — loaded automatically into every CC
|
|
|
64
64
|
|
|
65
65
|
| Agent | Role |
|
|
66
66
|
|-------|------|
|
|
67
|
-
| `
|
|
67
|
+
| `manager` | Routes work, spawns builder + reviewer teams |
|
|
68
68
|
| `developer` | TDD implementation specialist |
|
|
69
69
|
| `reviewer` | Quality gate for code changes |
|
|
70
70
|
| `designer` | Experience + visual design |
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"name": "claudius",
|
|
22
22
|
"source": "./",
|
|
23
23
|
"description": "Autonomous orchestration layer for Claude Code — agents, skills, hooks, and heartbeat daemon for round-the-clock development",
|
|
24
|
-
"version": "0.
|
|
24
|
+
"version": "0.6.1",
|
|
25
25
|
"strict": true,
|
|
26
26
|
"category": "development"
|
|
27
27
|
}
|
|
28
28
|
],
|
|
29
|
-
"version": "0.
|
|
29
|
+
"version": "0.6.1"
|
|
30
30
|
}
|
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ All plugin components live under `.claude/` — single source of truth for both
|
|
|
77
77
|
|
|
78
78
|
```
|
|
79
79
|
.claude/
|
|
80
|
-
agents/ #
|
|
80
|
+
agents/ # manager, builder, reviewer
|
|
81
81
|
skills/ # product, solution, spec, backlog, build, pulse, reflect, review
|
|
82
82
|
hooks/ # guardian, cost-watch, context-inject, etc.
|
|
83
83
|
commands/ # slash command definitions
|
package/dist/cli/studio.d.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI
|
|
2
|
+
* CLI commands for Claudia Studio:
|
|
3
|
+
* claudius browse — Start studio + open browser (foreground, no slim)
|
|
4
|
+
* claudius studio up — Start studio + slim .test domain (foreground)
|
|
5
|
+
* claudius studio down — Stop studio or remove .test domain
|
|
3
6
|
*/
|
|
4
|
-
export interface
|
|
7
|
+
export interface StudioHandle {
|
|
5
8
|
port: number;
|
|
6
|
-
|
|
7
|
-
agentationPort?: number;
|
|
9
|
+
stop(): void;
|
|
8
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Start the studio HTTP server without opening a browser or registering signal handlers.
|
|
13
|
+
* Used by both the daemon (auto-start) and `claudius studio up` (standalone).
|
|
14
|
+
*/
|
|
15
|
+
export declare function startStudioServer(projectDir: string, opts?: {
|
|
16
|
+
port?: number;
|
|
17
|
+
}): Promise<StudioHandle>;
|
|
18
|
+
export declare function cmdStudioUp(args: string[]): Promise<void>;
|
|
19
|
+
export declare function cmdStudioDown(): void;
|
|
9
20
|
export declare function cmdBrowse(args: string[]): Promise<void>;
|
|
10
21
|
//# sourceMappingURL=studio.d.ts.map
|
package/dist/cli/studio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../src/cli/studio.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../src/cli/studio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;CACb;AA4DD;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtB,OAAO,CAAC,YAAY,CAAC,CA+EvB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF/D;AAED,wBAAgB,aAAa,IAAI,IAAI,CA2CpC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC7D"}
|