@yemi33/minions 0.1.1563 → 0.1.1565
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/CHANGELOG.md +10 -0
- package/README.md +2 -4
- package/docs/auto-discovery.md +14 -11
- package/docs/command-center.md +6 -5
- package/docs/design-state-storage.md +2 -2
- package/docs/human-vs-automated.md +1 -1
- package/docs/pr-review-fix-loop.md +1 -1
- package/docs/self-improvement.md +8 -7
- package/engine/playbook.js +7 -6
- package/package.json +1 -1
- package/playbooks/explore.md +1 -1
- package/playbooks/shared-rules.md +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.1565 (2026-04-27)
|
|
4
|
+
|
|
5
|
+
### Other
|
|
6
|
+
- docs(sched-weekly-docs-cleanup-1776960000531): sync stale references with current source (#1750)
|
|
7
|
+
|
|
8
|
+
## 0.1.1564 (2026-04-27)
|
|
9
|
+
|
|
10
|
+
### Other
|
|
11
|
+
- Harden skill creation guidance
|
|
12
|
+
|
|
3
13
|
## 0.1.1563 (2026-04-27)
|
|
4
14
|
|
|
5
15
|
### Fixes
|
package/README.md
CHANGED
|
@@ -457,7 +457,7 @@ All playbooks use `{{template_variables}}` filled from project config. Condition
|
|
|
457
457
|
|
|
458
458
|
Every playbook has an explicit "When to Stop" section telling agents exactly what constitutes completion. Code-pushing playbooks enforce **build → test → repo checks → push** ordering. Per-type max-turns prevent runaway tool loops (explore=30, ask=20, implement=75, verify=100).
|
|
459
459
|
|
|
460
|
-
Playbooks are fully customizable — edit
|
|
460
|
+
Playbooks are fully customizable — edit the shared templates in `playbooks/` to change the repo-wide defaults. You can also create machine-local overrides in `projects/<name>/playbooks/<type>.md`; Minions will prefer those for that project, but they are treated as user data and remain gitignored. System prompts for CC and plan advisor live in `prompts/` with `{{variable}}` substitution.
|
|
461
461
|
|
|
462
462
|
## Health Monitoring
|
|
463
463
|
|
|
@@ -503,7 +503,7 @@ When a reviewer flags issues, the engine creates `feedback-<author>-from-<review
|
|
|
503
503
|
`engine/metrics.json` tracks per agent: tasks completed, errors, PRs created/approved/rejected, reviews done. Visible in CLI (`status`) and dashboard with color-coded approval rates.
|
|
504
504
|
|
|
505
505
|
### 5. Skills
|
|
506
|
-
Agents save repeatable workflows
|
|
506
|
+
Agents save Minions-wide repeatable workflows as user-level Claude skills in `~/.claude/skills/<name>/SKILL.md`, so they are usable both inside Minions and in normal Claude windows. Repo-specific skills can also be stored per-project at `<project>/.claude/skills/<name>/SKILL.md` (requires a PR). Visible in the dashboard Skills section.
|
|
507
507
|
|
|
508
508
|
See `docs/self-improvement.md` for the full breakdown.
|
|
509
509
|
|
|
@@ -730,5 +730,3 @@ Per-project engine state remains centralized:
|
|
|
730
730
|
work-items.json <- Per-project work queue
|
|
731
731
|
pull-requests.json <- PR tracker
|
|
732
732
|
```
|
|
733
|
-
|
|
734
|
-
|
package/docs/auto-discovery.md
CHANGED
|
@@ -11,8 +11,8 @@ tick()
|
|
|
11
11
|
1. checkTimeouts() Kill stale/hung agents (>heartbeatTimeout)
|
|
12
12
|
2. consolidateInbox() Merge learnings into notes.md (Haiku-powered)
|
|
13
13
|
2.5 runCleanup() Periodic cleanup (every 10 ticks ≈ 10min)
|
|
14
|
-
2.6 pollPrStatus() Poll ADO for build, review, merge status (every
|
|
15
|
-
2.7 pollPrHumanComments() Poll PR threads for human @minions comments (every
|
|
14
|
+
2.6 pollPrStatus() Poll ADO + GitHub for build, review, merge status (every prPollStatusEvery ticks, default 12 ≈ 12min)
|
|
15
|
+
2.7 pollPrHumanComments() Poll PR threads for human @minions comments (every prPollCommentsEvery ticks, default 12 ≈ 12min)
|
|
16
16
|
3. discoverWork() Scan ALL linked projects for new tasks
|
|
17
17
|
4. updateSnapshot() Write identity/now.md
|
|
18
18
|
5. dispatch Spawn agents for pending items (up to maxConcurrent)
|
|
@@ -118,11 +118,11 @@ priority: high
|
|
|
118
118
|
|
|
119
119
|
Both write to `work-items.json` and are picked up by Source 3 on the same or next tick.
|
|
120
120
|
|
|
121
|
-
##
|
|
121
|
+
## PR Status Polling (`pollPrStatus`)
|
|
122
122
|
|
|
123
|
-
**Runs:** Every
|
|
123
|
+
**Runs:** Every `prPollStatusEvery` ticks (default 12, ≈ 12 minutes), independently of work discovery. ADO polling lives in `engine/ado.js`; GitHub polling lives in `engine/github.js` — both run in parallel each cycle (`Promise.allSettled`) and write to the same per-project `pull-requests.json` schema. Replaces the retired agent-based `pr-sync`.
|
|
124
124
|
|
|
125
|
-
The engine directly polls the
|
|
125
|
+
The engine directly polls the host REST API for **all** PR metadata: build/CI status, human review votes, and completion state. Two API calls per PR — no agent dispatch needed.
|
|
126
126
|
|
|
127
127
|
**Per PR:**
|
|
128
128
|
1. `GET pullrequests/{id}` → `status` (active/completed/abandoned), `mergeStatus`, `reviewers[].vote`
|
|
@@ -137,7 +137,7 @@ The engine directly polls the Azure DevOps REST API for **all** PR metadata: bui
|
|
|
137
137
|
| `buildStatus` | PR statuses (codecoverage/deploy/build/ci contexts) | `passing` / `failing` / `running` / `none` |
|
|
138
138
|
| `buildFailReason` | Failed status description | Set on failure, cleared otherwise |
|
|
139
139
|
|
|
140
|
-
**Auth:** Bearer token via `azureauth ado token --output token --timeout 1` (cached 30 minutes). The `--timeout 1` flag is required — without it, azureauth can hang indefinitely in headless sessions.
|
|
140
|
+
**Auth:** Bearer token via `azureauth ado token --mode iwa --mode broker --output token --timeout 1` (cached 30 minutes). The `--timeout 1` flag is required — without it, azureauth can hang indefinitely in headless sessions. (GitHub polling uses the ambient `gh` CLI credentials, not azureauth.)
|
|
141
141
|
|
|
142
142
|
This feeds `discoverFromPrs` — when `buildStatus` flips to `"failing"`, the next discovery tick dispatches a fix agent. When `status` becomes `"merged"`, the PR drops out of active polling.
|
|
143
143
|
|
|
@@ -244,9 +244,12 @@ Combines:
|
|
|
244
244
|
|
|
245
245
|
### 5. Spawn Claude CLI
|
|
246
246
|
```bash
|
|
247
|
-
claude -p
|
|
248
|
-
--output-format json --max-turns 100 --verbose \
|
|
249
|
-
--
|
|
247
|
+
claude -p --system-prompt-file <sysprompt-file> \
|
|
248
|
+
--output-format stream-json --max-turns 100 --verbose \
|
|
249
|
+
--permission-mode bypassPermissions
|
|
250
|
+
# Prompt text is piped via stdin (not passed as an arg).
|
|
251
|
+
# Agent dispatches route through engine/spawn-agent.js; CC / doc-chat use a direct
|
|
252
|
+
# spawn path in engine/llm.js that bypasses spawn-agent.js entirely.
|
|
250
253
|
```
|
|
251
254
|
|
|
252
255
|
- Process runs in the worktree directory (or rootDir for reviews)
|
|
@@ -325,8 +328,8 @@ docs/**/*.md (specs)┤ (each tick) ┌──────────┐
|
|
|
325
328
|
plans/*.md ─────┘ ▼ │
|
|
326
329
|
addToDispatch()────────┘
|
|
327
330
|
│
|
|
328
|
-
ADO REST
|
|
329
|
-
(every
|
|
331
|
+
ADO + GitHub REST ── pollPrStatus() ──► pull-requests.json
|
|
332
|
+
(every ~12min) (buildStatus field) │
|
|
330
333
|
spawnAgent()
|
|
331
334
|
│
|
|
332
335
|
┌────────────┼────────────┐
|
package/docs/command-center.md
CHANGED
|
@@ -13,7 +13,7 @@ CC maintains a true multi-turn session using Claude CLI's `--resume` flag. Unlik
|
|
|
13
13
|
**Session lifecycle:**
|
|
14
14
|
- **Created** on first message (or after the system prompt changes, or when you click **New Session**)
|
|
15
15
|
- **Resumed** on subsequent messages via `--resume <sessionId>`
|
|
16
|
-
- **Invalidated**
|
|
16
|
+
- **Invalidated** when the CC system prompt changes — detected by hashing `CC_STATIC_SYSTEM_PROMPT` into `_ccPromptHash` and comparing on each call. Sessions are also bounded by `ENGINE_DEFAULTS.ccMaxTurns` (default 50 turns) and `ENGINE_DEFAULTS.ccSessionTtlMs` (default 2h — resumed sessions older than this get rotated).
|
|
17
17
|
- **Persisted** to `engine/cc-session.json` — survives dashboard restarts
|
|
18
18
|
- **Frontend messages** saved to `localStorage` — survive page refresh
|
|
19
19
|
|
|
@@ -117,9 +117,10 @@ POST /api/command-center (or /api/doc-chat, /api/steer-document)
|
|
|
117
117
|
│ timeout: 600s (CC) or 300s (doc-plan) or 60s (doc-other)
|
|
118
118
|
│
|
|
119
119
|
▼
|
|
120
|
-
spawn-agent.js
|
|
120
|
+
engine/llm.js callLLM({ direct: true }) (bypasses engine/spawn-agent.js — CC + doc-chat only)
|
|
121
121
|
│
|
|
122
|
-
├──
|
|
122
|
+
├── Resolves claude CLI binary path from engine/claude-caps.json
|
|
123
|
+
├── If --resume: pass -p --resume <id> (no system prompt file)
|
|
123
124
|
├── If new: pass -p --system-prompt-file <file>
|
|
124
125
|
│
|
|
125
126
|
▼
|
|
@@ -143,8 +144,8 @@ Frontend
|
|
|
143
144
|
|
|
144
145
|
| File | Role |
|
|
145
146
|
|------|------|
|
|
146
|
-
| `engine/llm.js` | `callLLM()` — single LLM function with optional `sessionId` for resume |
|
|
147
|
-
| `engine/spawn-agent.js` |
|
|
147
|
+
| `engine/llm.js` | `callLLM()` / `callLLMStreaming()` — single LLM function with optional `sessionId` for resume; `direct: true` spawns claude CLI directly (used by CC + doc-chat) |
|
|
148
|
+
| `engine/spawn-agent.js` | Agent dispatch wrapper — resolves claude CLI path and invokes it. **Not used by CC/doc-chat** (direct spawn path). |
|
|
148
149
|
| `engine/shared.js` | `parseStreamJsonOutput()` extracts `sessionId` from result |
|
|
149
150
|
| `engine/cc-session.json` | Persisted session state (sessionId, turnCount, timestamps) |
|
|
150
151
|
| `dashboard.js` | CC endpoint, `buildCCStatePreamble()`, `ccDocCall()`, `parseCCActions()` |
|
|
@@ -22,7 +22,7 @@ Minions persists all runtime state as flat JSON files guarded by file-lock-based
|
|
|
22
22
|
| `engine/metrics.json` | 5 KB | Per-agent stats | R/W on PR approval/merge | Low | Low |
|
|
23
23
|
| `engine/control.json` | 169 B | Single object | R/W on start/stop/heartbeat | Low | Low |
|
|
24
24
|
| `projects/*/work-items.json` | 370 KB | 180 items | R/W every 1-2 ticks; dashboard reads on-demand | **High** — engine + lifecycle + dashboard | High |
|
|
25
|
-
| `projects/*/pull-requests.json` | 241 KB | 128 PRs | R/W every
|
|
25
|
+
| `projects/*/pull-requests.json` | 241 KB | 128 PRs | R/W every `prPollStatusEvery` ticks (default 12, polling); lifecycle writes | Medium | Medium |
|
|
26
26
|
| `engine/pipeline-runs.json` | 36 KB | Pipeline state | R/W on pipeline execution | Low | Low |
|
|
27
27
|
| `engine/schedule-runs.json` | 115 B | Last-run times | R every 10 ticks; W on schedule execution | Low | Low |
|
|
28
28
|
|
|
@@ -56,7 +56,7 @@ Key properties:
|
|
|
56
56
|
| Engine tick cycle | ~15 | ~3 | Heavy read, selective write |
|
|
57
57
|
| Dashboard (per page load) | ~8 | 0 | Read-only display |
|
|
58
58
|
| Dashboard (user action) | ~2 | ~2 | Read-modify-write |
|
|
59
|
-
| PR polling (every
|
|
59
|
+
| PR polling (every `prPollStatusEvery` ticks, default 12) | ~4 | ~2 | Batch read-modify-write |
|
|
60
60
|
| Consolidation (every 10 ticks) | ~3 | ~2 | Read inbox files, write notes.md |
|
|
61
61
|
|
|
62
62
|
**Read:write ratio is approximately 8:1.** This strongly favors a system that can serve reads without locking (e.g., WAL mode).
|
|
@@ -46,7 +46,7 @@ These run continuously without you:
|
|
|
46
46
|
- **Work discovery** — engine scans all project queues every tick (~60s)
|
|
47
47
|
- **Agent dispatch** — engine picks the right agent, builds the prompt, spawns Claude
|
|
48
48
|
- **Worktree management** — create on dispatch, pull on shared-branch, clean after merge
|
|
49
|
-
- **PR status polling** — checks ADO for build status, review votes, merge state every ~
|
|
49
|
+
- **PR status polling** — checks ADO + GitHub for build status, review votes, merge state every ~12 min
|
|
50
50
|
- **Build failure detection** — auto-files fix tasks when CI fails
|
|
51
51
|
- **Inbox consolidation** — LLM-powered dedup and categorization when inbox hits threshold
|
|
52
52
|
- **Knowledge base classification** — auto-assigns category to consolidated notes
|
|
@@ -52,7 +52,7 @@ How the engine manages the lifecycle of a PR from creation through review, fix,
|
|
|
52
52
|
|
|
53
53
|
## 6. Re-review cycle
|
|
54
54
|
|
|
55
|
-
- Poller (~
|
|
55
|
+
- Poller (every `prPollStatusEvery` ticks, default ~12min): detects new commit (`head.sha` changed) → sets `lastPushedAt`
|
|
56
56
|
- Platform review state drives next action:
|
|
57
57
|
- Reviewer approves → `approved` → done
|
|
58
58
|
- Reviewer re-requests changes → `changes-requested` → triggers another fix
|
package/docs/self-improvement.md
CHANGED
|
@@ -158,7 +158,7 @@ Without this, review findings only exist in the inbox file under the reviewer's
|
|
|
158
158
|
|
|
159
159
|
## 4. Human Feedback on PRs
|
|
160
160
|
|
|
161
|
-
Humans can leave comments on ADO PRs containing `@minions` to trigger fix tasks. The engine polls PR threads every ~
|
|
161
|
+
Humans can leave comments on ADO or GitHub PRs containing `@minions` to trigger fix tasks. The engine polls PR threads every ~12 minutes (see `prPollCommentsEvery` in `engine/shared.js`) and dispatches fixes to the PR's author agent.
|
|
162
162
|
|
|
163
163
|
### Flow
|
|
164
164
|
|
|
@@ -257,14 +257,14 @@ Metrics are currently informational — displayed in status and dashboard. Plann
|
|
|
257
257
|
|
|
258
258
|
When an agent discovers a repeatable multi-step procedure, it can save it as a **skill** — a structured, reusable workflow compatible with Claude Code's skill system. Skills are stored in two locations:
|
|
259
259
|
|
|
260
|
-
- **Minions-wide:** `~/.
|
|
260
|
+
- **Minions-wide:** `~/.claude/skills/<name>/SKILL.md` — user-level Claude skill, shared across Minions and normal Claude windows, no PR required
|
|
261
261
|
- **Project-specific:** `<project>/.claude/skills/<name>/SKILL.md` — scoped to one repo, requires a PR
|
|
262
262
|
|
|
263
263
|
### Flow
|
|
264
264
|
|
|
265
265
|
```
|
|
266
266
|
Agent discovers repeatable pattern during task
|
|
267
|
-
→ writes skills/<name
|
|
267
|
+
→ writes ~/.claude/skills/<name>/SKILL.md with frontmatter (name, description, trigger, allowed-tools)
|
|
268
268
|
→ engine detects new skill files on next tick
|
|
269
269
|
→ builds skill index (name + trigger + file path)
|
|
270
270
|
→ index injected into every agent's system prompt
|
|
@@ -314,10 +314,11 @@ When a git merge or rebase produces conflicts in yarn.lock.
|
|
|
314
314
|
|
|
315
315
|
### When agents should create skills
|
|
316
316
|
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
-
|
|
320
|
-
-
|
|
317
|
+
- Only when the workflow is durable, multi-step, and likely to be reused on future tasks
|
|
318
|
+
- Only when the workflow is not already documented in repo docs, notes, playbooks, or existing skills
|
|
319
|
+
- Good candidates: build setup, deployment, migrations, recurring error-recovery patterns, cross-repo coordination steps
|
|
320
|
+
- Prefer zero skills over a weak skill; one-off findings and task-specific notes belong in inbox notes or `notes.md`
|
|
321
|
+
- Do not create skills for isolated fixes, obvious repository facts, or instructions already covered elsewhere
|
|
321
322
|
|
|
322
323
|
## Configuration
|
|
323
324
|
|
package/engine/playbook.js
CHANGED
|
@@ -362,14 +362,15 @@ function renderPlaybook(type, vars) {
|
|
|
362
362
|
content += `- Conventions to follow\n`;
|
|
363
363
|
content += `- **SOURCE REFERENCES for every finding** — file paths with line numbers, PR URLs, API endpoints, config keys. Format: \`(source: path/to/file.ts:42)\` or \`(source: PR-12345)\`. Without references, findings cannot be verified.\n\n`;
|
|
364
364
|
content += `### Skill Extraction (IMPORTANT)\n\n`;
|
|
365
|
-
content += `If during this task you discovered a **repeatable workflow** — a multi-step procedure, workaround, build process, or pattern that other agents should follow in similar situations — output it as a fenced skill block.
|
|
365
|
+
content += `If during this task you discovered a **repeatable workflow** — a multi-step procedure, workaround, build process, or pattern that other agents should follow in similar situations — only output it as a fenced skill block when **all** of these are true: (1) you had to discover it during this task, (2) it is not already captured in team memory, repo docs, existing playbooks, or existing skills, and (3) another agent is likely to reuse it on future tasks. **Zero skills is the default.** Prefer the inbox findings for one-off notes, repo facts, and task-specific observations.\n\n`;
|
|
366
366
|
content += `Format your skill as a fenced code block with the \`skill\` language tag:\n\n`;
|
|
367
367
|
content += '````\n```skill\n';
|
|
368
368
|
content += `---\nname: short-descriptive-name\ndescription: One-line description of what this skill does\nallowed-tools: Bash, Read, Edit\ntrigger: when should an agent use this\nscope: minions\nproject: any\n---\n\n# Skill Title\n\n## Steps\n1. ...\n2. ...\n\n## Notes\n...\n`;
|
|
369
369
|
content += '```\n````\n\n';
|
|
370
|
-
content += `- Set \`scope: minions\` for cross-project skills
|
|
371
|
-
content += `- Set \`scope: project\` + \`project: <name>\` for repo-specific skills
|
|
372
|
-
content += `-
|
|
370
|
+
content += `- Set \`scope: minions\` for cross-project or Minions-wide skills; the engine writes them to ~/.claude/skills/ so they are available in normal Claude windows too\n`;
|
|
371
|
+
content += `- Set \`scope: project\` + \`project: <name>\` only for repo-specific skills; the engine queues a PR to <project>/.claude/skills/\n`;
|
|
372
|
+
content += `- Emit at most one skill block per task unless you uncovered two clearly distinct reusable workflows\n`;
|
|
373
|
+
content += `- Do NOT create a skill for one-off bug fixes, isolated command output, obvious repo facts, or anything already covered by existing docs/playbooks/skills\n`;
|
|
373
374
|
|
|
374
375
|
// Inject project-level variables from config
|
|
375
376
|
const config = getConfig();
|
|
@@ -471,7 +472,7 @@ function buildSystemPrompt(agentId, config, project) {
|
|
|
471
472
|
prompt += `3. Follow the project conventions in CLAUDE.md if present\n`;
|
|
472
473
|
prompt += `4. Write learnings to the path specified in the task prompt (format: \`notes/inbox/{agent}-{work-item-id}-{date}-{time}.md\`)\n`;
|
|
473
474
|
prompt += `5. Agent status is managed by the engine via dispatch.json — agents do not need to track their own status\n`;
|
|
474
|
-
prompt += `6. If you discover a repeatable workflow, output it as a \\\`\\\`\\\`skill fenced block —
|
|
475
|
+
prompt += `6. If you discover a repeatable workflow, output it as a \\\`\\\`\\\`skill fenced block — minions-scoped skills are auto-extracted to ~/.claude/skills/ so they are available in normal Claude windows too\n\n`;
|
|
475
476
|
|
|
476
477
|
return prompt;
|
|
477
478
|
}
|
|
@@ -504,7 +505,7 @@ function buildAgentContext(agentId, config, project) {
|
|
|
504
505
|
|
|
505
506
|
// KB and skills: NOT injected — agents can Glob/Read when needed
|
|
506
507
|
// This saves ~27KB per dispatch. Reference note so agents know they exist:
|
|
507
|
-
context += `## Reference Files\n\nKnowledge base entries are in \`knowledge/{category}/*.md\`.
|
|
508
|
+
context += `## Reference Files\n\nKnowledge base entries are in \`knowledge/{category}/*.md\`. User-level Minions skills live in \`~/.claude/skills/\`, and project-specific skills live in \`<project>/.claude/skills/\`. Use Glob/Read when relevant.\n\n`;
|
|
508
509
|
|
|
509
510
|
// Minions awareness: what's in flight, who's doing what
|
|
510
511
|
const dispatch = getDispatch();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1565",
|
|
4
4
|
"description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
|
|
5
5
|
"bin": {
|
|
6
6
|
"minions": "bin/minions.js"
|
package/playbooks/explore.md
CHANGED
|
@@ -60,7 +60,7 @@ Use subagents only for genuinely parallel, independent tasks. For reading files,
|
|
|
60
60
|
- Use the appropriate MCP tools for PR creation — check available tools before starting.
|
|
61
61
|
- Do NOT checkout branches in the main working tree — use worktrees.
|
|
62
62
|
- Read `notes.md` for all team rules before starting.
|
|
63
|
-
-
|
|
63
|
+
- Only emit a ```skill block if you uncovered a durable reusable workflow that is not already documented and is likely to help future tasks; zero skills is the default, and one-off findings belong in the inbox notes instead.
|
|
64
64
|
|
|
65
65
|
## When to Stop
|
|
66
66
|
|
|
@@ -33,7 +33,7 @@ Your context window may be compacted or summarized mid-task by Claude's automati
|
|
|
33
33
|
5. Previous agent output in `agents/*/live-output.log` for related tasks
|
|
34
34
|
6. Work item descriptions and `resultSummary` for prior completed work on the same topic
|
|
35
35
|
Only after exhausting team memory should you look outside (web search, codebase exploration, external docs). This avoids duplicating research another agent already completed and ensures team decisions are respected.
|
|
36
|
-
-
|
|
36
|
+
- Only output a fenced skill block when **all** of these are true: (1) you discovered a durable multi-step workflow that was not already documented in team memory, repo docs, existing playbooks, or existing skills, (2) another agent is likely to need it on future tasks, and (3) the workflow is specific enough to be actionable but general enough to stand alone. **Zero skills is the default.** Prefer writing one-off findings, repo facts, or task-specific notes to the inbox findings instead of creating a skill. Emit **at most one skill block per task** unless the task clearly uncovered two unrelated reusable workflows. The engine auto-extracts valid skill blocks to `~/.claude/skills/<name>/SKILL.md`, so `scope: minions` skills become user-level Claude skills available in normal Claude windows too. Required format:
|
|
37
37
|
````
|
|
38
38
|
```skill
|
|
39
39
|
---
|
|
@@ -45,14 +45,15 @@ Your context window may be compacted or summarized mid-task by Claude's automati
|
|
|
45
45
|
Instructions for the skill go here.
|
|
46
46
|
```
|
|
47
47
|
````
|
|
48
|
-
The `name` and `description` fields are required. `scope` defaults to `minions` (global). Use `scope: project` + `project: ProjectName` for
|
|
48
|
+
The `name` and `description` fields are required. `scope` defaults to `minions` (global). Use `scope: minions` for user-level reusable skills; use `scope: project` + `project: ProjectName` only for repo-specific skills that should land in that project via PR.
|
|
49
|
+
Do **not** create a skill for one-off bug fixes, isolated command outputs, obvious repo facts, or anything already covered by existing docs/playbooks/skills.
|
|
49
50
|
- Do TDD where it makes sense — write failing tests first, then implement, then verify tests pass. Especially for bug fixes (write a test that reproduces the bug) and new utility functions.
|
|
50
51
|
|
|
51
52
|
## Checking PR and Build Status
|
|
52
53
|
|
|
53
54
|
When asked to check build status, CI results, or review state for a PR:
|
|
54
55
|
|
|
55
|
-
**Preferred — read cached state (
|
|
56
|
+
**Preferred — read cached state (refreshed every `prPollStatusEvery` ticks, default ~12 min when engine is running):**
|
|
56
57
|
Find the PR in `projects/<project-name>/pull-requests.json` by `prNumber`. Key fields:
|
|
57
58
|
- `buildStatus` — `passing` | `failing` | `running` | `none`
|
|
58
59
|
- `buildErrorLog` — compiler/pipeline errors when `buildStatus` is `failing`
|