Skip to content

Commit 1fc5bfa

Browse files
committed
Restore action skills to the agents how-to playbooks
Review is how to review a branch, not how to route directors. Scribe, refactor, and plan follow the same split.
1 parent dff33aa commit 1fc5bfa

9 files changed

Lines changed: 399 additions & 144 deletions

File tree

docs/ARCHITECTURE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ Corbits Code **ships a bundled catalog** as the first-party data-only plugin `pl
403403

404404
`discoverRepoPlugins` locates `plugins/` next to the source root, at `dist/plugins`, or at `dirname(execPath)/plugins`. It never scans the session cwd for the bundled catalog.
405405

406-
Primary is Skywalker. Bundled skill bodies that are operator slashes are **how-to playbooks** (steps, routing, done-definition) — not director personas. Action skills tell the primary to `task(agent="<director>")` — there is no catch-all worker. Identity lives on director system prompts. Default slashes: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. `/scribe` dispatches shakespeare; `/implement` spawns builder / greybeard / critic as the recipe specifies; `/plan` dispatches counsel director (eng change plan; does not implement; does not file tracker issues); `/review` is a code-review action (not a director name); `/create-issue` remains the tracker command — Linear MCP when available, otherwise `ask_operator` for the platform and persists `Preferred issue tracker` in `.corbits/MEMORY.md`. Dispatch is `use_skill` only, not a default slash. Draper and emil are closed directors via `task(agent=…)`, not slashes. The operator types the slash; Skywalker reads the body and dispatches.
406+
Primary is Skywalker. Bundled skill bodies are **how-to playbooks** (steps, done-definition) — not director personas and not fleet routers. Identity and who-does-what live on director system prompts. Default slashes: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. `/review` is how to review a branch (base, scope, signal); `/pull-request-review` is worktree checkout then the review skill; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit greybeard → implement → gate → critic loop; `/plan` authors an eng change plan and does not implement or file tickets; `/create-issue` remains the tracker command — Linear MCP when available, otherwise `ask_operator` for the platform and persists `Preferred issue tracker` in `.corbits/MEMORY.md`. Dispatch is `use_skill` only, not a default slash. Draper and emil are closed directors via `task(agent=…)`, not slashes. There is no catch-all worker. The operator types the slash; the primary follows the playbook.
407407

408408
#### Discovery and precedence
409409

docs/PRODUCT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ is the direct, explicit resume path.
9898

9999
The TUI has an extensible slash-command framework. Built-ins include `/help` (shortcut + command overlay), `/model` (models-only picker for connected accounts; **Alt+A** adds a provider), `/settings`, `/permissions`, `/plugins`, `/clear`, `/new`, `/mcp`, and `/yolo` (persists as the user-global skip-permissions default; `--dangerously-skip-permissions` still forces this process; secret-guard and authz still apply; `/yolo [on|off|toggle]`, bare `/yolo` toggles), plus a `/<name>` command per available workflow. When a session starts with the persisted default already on, the TUI shows a startup notice ("Permission prompts are disabled by your saved default…") so the silent machine-wide default is never invisible; `corbits exec` prints the equivalent warning to stderr. Plugins can register additional commands.
100100

101-
**Default skills** exist out of the gate as first-party slash **actions**, not director names: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. Each one is a how-to playbook — the slash sends the skill body to the primary, which follows the steps (often `task(agent="<director>")`). Skills do not assign identity; that stays on director system prompts. `/scribe` → shakespeare; `/implement` spawns builder / greybeard / critic as the recipe specifies; `/plan` → counsel director (eng change plan: files, AC, non-goals, risks, ordered steps; does not implement); `/review` is a code-review action. `/create-issue` remains the tracker command: Linear MCP when available; otherwise it `ask_operator`s for the platform (GitHub etc.) and persists `Preferred issue tracker` in `.corbits/MEMORY.md` (GitHub via `gh issue create`). Dispatch is not a default slash — it stays `use_skill` only, along with git-rebase, linear-issue-workflow, style, philosophy, typescript, and opsh (`user-invocable: false`). Draper and emil are not slashes; they remain closed directors via `task(agent=…)`. There is no catch-all worker. Slash names are also available to the model via `use_skill`. Disable the catalog in `/plugins` (`corbits-skills`) if you want them gone.
101+
**Default skills** exist out of the gate as first-party slash **actions**, not director names: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. Each one is a how-to playbook — the slash sends the skill body to the primary, which follows the steps. Skills do not assign identity or route the fleet; that stays on director system prompts. `/review` is how to review a branch; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit review/build/critique loop; `/plan` authors an eng change plan (files, AC, non-goals, risks, ordered steps) and does not implement. `/create-issue` remains the tracker command: Linear MCP when available; otherwise it `ask_operator`s for the platform (GitHub etc.) and persists `Preferred issue tracker` in `.corbits/MEMORY.md` (GitHub via `gh issue create`). Dispatch is not a default slash — it stays `use_skill` only, along with git-rebase, linear-issue-workflow, style, philosophy, typescript, and opsh (`user-invocable: false`). Draper and emil are not slashes; they remain closed directors via `task(agent=…)`. There is no catch-all worker. Slash names are also available to the model via `use_skill`. Disable the catalog in `/plugins` (`corbits-skills`) if you want them gone.
102102

103103
Providers are **models-first**: there is no standalone `/login` command. `/model` opens a **models-only list** (Recent, Favorites, then connected provider/model rows) — type-to-filter owns printable keys, so Connect is never a bare letter. **Alt+A** opens a dedicated add-provider selector over every first-class kind (OpenAI dual-path ChatGPT OAuth or API key, xAI, OpenCode Zen, Anthropic, Google, OpenCode Go, Z.AI Coding Plan, Custom), each annotated with its live account count and never filtered out for “already connected.” **Alt+F** toggles favorite on the highlighted model. **Alt+D** persists the highlighted pair as the default without switching the live session. Advanced provider drill-down (edit/delete/tiers) stays on the advanced surface, not a bare printable key while the model list is filtering. OAuth providers open their existing browser login with a named account step so multiple accounts per kind coexist (`codex/work`, …). API-key providers use the same named-instance step before the key (auth-only form: instance name + key + fixed catalog base URL), so personal and team keys land as distinct catalog rows (`openai/default`, `anthropic/work`, …); reusing a name re-keys that instance after confirm. Custom remains a free-form single endpoint (full manual form). Successful connect refreshes the catalog and reopens the model list focused on the new account’s default model. OpenCode Go routes each model by its protocol metadata (chat completions, OpenAI responses, or Anthropic messages) and can show subscription usage in the status bar when active (rolling 5h / weekly / monthly windows when the usage API responds; omitted on auth or network failure). When Go returns a quota or rate-limit error — including some HTTP 400 responses that carry limit payloads — Corbits classifies them so quota aborts cleanly and short provider rate limits remain retryable. On a free-tier or subscription quota hit, wait for the window to reset or use OpenCode Zen free models.
104104

plugins/corbits-skills/skills/implement/SKILL.md

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,78 @@
11
---
22
name: implement
3-
description: Disciplined per-commit workflow. Sequential spawn loop — greybeard, builder, intern/tester, critic. Use for substantial commit-sized landings, not tiny bounded edits.
3+
description: Disciplined per-commit workflow with greybeard review, a build gate, and a critic loop. Use when each commit should be reviewed and verified before it lands.
44
---
55

66
# Implement
77

8-
How to land substantial, commit-sized work. Tiny / single-file / one-route / clear bounded product edits: DIY — do not load this loop.
8+
How to produce reviewed, verified commits. Load when each commit should go through architectural review, build verification, and code critique before it lands.
99

10-
When this recipe runs: spawn directors, wait for reports, decide the next spawn from those reports. Sequential by design (one unit at a time). Do not invent a worker-count or fan-out ceiling. Track units with `manage_tasks`.
10+
This is a standalone skill, not part of dispatch. The caller defines what work to do and where the commit boundaries are. This skill defines _how_ each commit gets produced.
1111

12-
Closed directors: `greybeard`, `builder`, `intern`, `tester`, `critic`. Never a catch-all worker.
12+
Tiny / single-file / one-route / clear bounded edits do not need this loop.
1313

1414
## Prerequisites
1515

16-
Load `style` and `philosophy` via `use_skill` on the primary **before spawning**. Copy those conventions into every worker brief (workers do not mount `use_skill`).
16+
Load `style` and `philosophy` first. Follow their conventions throughout. Workers do not mount `use_skill` — copy those conventions into any worker brief.
1717

1818
## Tracking
1919

2020
Track commit-sized units with `manage_tasks`. One item per unit that will become a commit.
2121

22-
- Before starting: create an item for each unit from the caller's instructions.
23-
- When a unit begins: mark it in progress.
24-
- When critic is clean and the build gate passed: mark it done.
25-
- New work that surfaces → append a `manage_tasks` item and run the full loop.
22+
- Before starting: create an item for each unit from the caller's instructions
23+
- When a unit begins: mark it in progress
24+
- When critic is clean and the build gate passed: mark it done
25+
- New work that surfaces → append an item and run the full loop
2626

27-
## Per-commit spawn loop
27+
## Per-commit workflow
2828

29-
For each unit, run these steps in order. Do not skip. When this loop is running, do not DIY the unit — spawn builder.
29+
For each unit, run these steps in order. Do not skip.
3030

31-
### 1. Reviewgreybeard
31+
### 1. Greybeardapproach
3232

3333
`task(agent="greybeard")` on the approach before any code is written.
3434

3535
Send: what will change and why, files expected, design decisions and trade-offs, uncertainties.
3636

37-
Adjust the plan from the report, then spawn builder. Greybeard is for approach, not execution.
37+
If greybeard identifies problems, adjust before implementing. A different approach deserves a serious look. Disagreement needs a reason. Greybeard is for approach, not execution.
3838

39-
### 2. Implement — builder
39+
### 2. Implement and test
4040

41-
`task(agent="builder")` with a typed brief: `intent`, `success_criteria`, `do_not`, `report_focus`.
42-
43-
- **Bug fixes:** start from a failing test — write the repro, confirm it fails, fix, confirm it passes. If the test does not fail first, the bug is not understood.
41+
- **Bug fixes:** write a failing repro first, confirm it fails, fix, confirm it passes. If the test does not fail first, the bug is not understood.
4442
- **Features:** tests ship with the change. Assert the new behavior, not merely that the process did not crash.
4543

44+
Follow the repository's existing test conventions. If there are no tests, ask what framework to use before proceeding.
45+
4646
Keep scope to this unit. Additional work becomes a later `manage_tasks` item.
4747

48-
### 3. Build gate — intern or tester
48+
### 3. Build gate
49+
50+
Run the project's full pipeline (`make`, or format / lint / build / test). `task(agent="intern")` for a mechanical full pipeline, or `task(agent="tester")` for suite / repro evidence.
4951

50-
`task(agent="intern")` or `task(agent="tester")` for the project build/test gate (`make`, or the project's full pipeline: format, lint, build, test).
52+
Do not move forward with a broken build. Failures from this unit → fix and re-run. Pre-existing unrelated failures → Blockers and stop. Do not substitute a partial compile for the full gate.
5153

52-
- `intern` — mechanical full pipeline
53-
- `tester` — suite / repro
54+
### 4. Commit
5455

55-
Do not move forward with a broken build. Failures from this unit → re-dispatch builder. Pre-existing unrelated failures → Blockers and stop. Do not substitute a partial compile for the full gate.
56+
Create the commit. Follow `style`. Tests land in the same commit as the implementation.
5657

57-
### 4. Critic
58+
### 5. Critic loop
5859

59-
`task(agent="critic")` on the diff. Include the intent agreed with greybeard so critic evaluates plan vs execution. Limit findings to this unit; pre-existing issues in touched files are out of scope unless they block the gate.
60+
`task(agent="critic")` on `git show HEAD`. Include the intent agreed with greybeard so critic evaluates plan vs execution. Limit findings to this unit.
6061

61-
Blocking findings → re-dispatch builder with those findings in `success_criteria` / `do_not`, then re-run the gate and critic. Close the loop; if still blocked, report Blockers — do not loop forever.
62+
Blocking findings → fix, re-run the gate, land the fix on the right commit (amend HEAD, or edit-in-place via `git-rebase` for an earlier commit), then re-run critic. Close the loop; if still blocked, report Blockers — do not loop forever.
6263

6364
When critic is clean (or remaining findings are acknowledged judgment calls), mark the unit done and start the next.
6465

6566
## Non-negotiables
6667

67-
- Tiny / single-file / one-route / clear bounded edits: DIY. This recipe is for substantial units — when running it, spawn builder; do not DIY the coding.
68-
- Spawn `greybeard``builder``intern`|`tester``critic` via `task(agent=…)`.
69-
- Track only with `manage_tasks`.
7068
- Do not shortcut the loop. Skipping greybeard "because this is simple" or critic "because the build passed" defeats the recipe.
7169
- Build must pass before treating a unit as done.
7270
- Do not invent a worker-count or fan-out ceiling.
71+
- Track only with `manage_tasks`.
7372

7473
## Report
7574

76-
When the requested units are done (or blocked), synthesize for the operator:
75+
When the requested units are done (or blocked):
7776

7877
## Summary
7978

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
---
22
name: plan
3-
description: Author an agent-proof eng change plan via counsel. Use when the operator wants a plan, not code or tracker tickets.
3+
description: Author an agent-proof eng change plan. Does not implement. Does not file tracker issues.
44
---
55

66
# Plan
77

88
How to produce an engineering change plan. Does not implement. Does not file tracker issues.
99

10-
## Steps
10+
If the change target is too fuzzy to plan, `ask_operator` first.
1111

12-
1. If the change target is too fuzzy to brief, `ask_operator` first.
13-
2. Spawn `task(agent="counsel")` with the operator args as the brief. Prefer a typed spawn: `intent="plan"`, `success_criteria`, `do_not`, `report_focus`.
14-
3. Counsel authors files, acceptance criteria, non-goals, risks, and ordered steps. It does not ship code.
15-
4. Return counsel's report. Greybeard is the architecture gate — not this skill.
12+
## What the plan must contain
1613

17-
Not `/create-issue`. If the operator wants tickets, they use `/create-issue` after the plan.
14+
1. Files / paths to touch
15+
2. Acceptance criteria mapped from the ask
16+
3. Non-goals
17+
4. Risks and open questions
18+
5. Ordered steps a later `/implement` can execute without guessing
19+
20+
When requirements are fuzzy, put open questions under Blockers instead of inventing scope.
21+
22+
## What this is not
23+
24+
- Not `/create-issue`. If the operator wants tickets, they use `/create-issue` after the plan.
25+
- Not an architecture gate. Greybeard reviews approach; this skill only authors the plan.
26+
- Not implementation. Do not ship the change.

0 commit comments

Comments
 (0)