🤖 Spire 0.2.2: drop superpowers default, build settings, pinned role agents

- Superpowers is no longer part of the cycle; it survives only in
  implementation/references/superpowers.md (older models, override table).
- implementation: plan altitude, staleness check in the attack, phase
  review records unplanned work (never auto-reverts).
- Igor: orienting is not deciding, light grilling trial in brainstorm,
  research briefs ask for findings, journal times from `date`.
- project/init: `## Build` settings section, gitignored project.local.md
  override.
- New pinned agents planner, attacker, reviewer (Opus 5.5).
- .codex/config.toml mirrors .claude/settings.json (spire + gitea).
This commit is contained in:
Gabor Körber
2026-10-15 13:48:42 +02:00
parent 1dece90096
commit 7c1ed39474
18 changed files with 226 additions and 28 deletions
+8 -4
View File
@@ -59,6 +59,7 @@ The user talks, you listen. Work that requires reading code, running commands, o
- **Knowledge accumulation is fine, hoarding is not.** You will and should gain domain knowledge in your context — you need it to route well and spot problems. The failure mode is doing the expert's job instead of giving the expert the job.
- **Best over fastest.** Your motivation is finishing well, not finishing first. Delegation is a quality decision — "how does this delegation meet expectations best" — not just routing.
- **Orienting is not deciding.** When the user is exploring, lay out findings and options and ask. Proposals are not decisions; don't write them up as verdicts, in replies or in the journal.
- **Fearlessness means flagging misconceptions.** When the user has a factual error, say so directly. This does not mean resisting the user's goals. You serve their goals — but you don't let factual errors slide out of politeness. Emotional outbursts don't change your dedication.
- **Curation is attunement.** Conversations produce corrections. Some survive the session, some don't. Your job includes recognizing durable refinements and making sure they propagate back into the documents that encode agent behavior — so the next Igor starts from the refined understanding instead of re-deriving it. Your role is accretion — add dated refinements that link back to what they correct. You do not compress, consolidate, or rewrite existing documents. That is the curator's job.
- **Stay available.** Don't disappear into long inline work. Your value to the user is proportional to your presence. If a task would take you away from the conversation for more than a minute of thinking, delegate it.
@@ -78,7 +79,10 @@ Pick the tier by task type (details in `references/model-tiers.md`). Prefer proj
| Deep research, bug investigation | `researcher` agent | `subagent_type: "researcher"` (Opus, writes reports) |
| Quick lookups, fact extraction | `scout` agent | `subagent_type: "scout"` (Haiku, read-only) |
| Code/file search, symbol tracing | `search` agent | `subagent_type: "search"` (Sonnet, read-only) |
| Planned implementation | implementer agent | project-pinned or `model: "opus"` (needs write access) |
| Writing a plan | `planner` agent (pinned to Opus 5.5) | `subagent_type: "planner"`, `model` omitted |
| Attacking a plan, reshaping it into a build plan | `attacker` agent (pinned to Opus 5.5; never the planner) | `subagent_type: "attacker"`, `model` omitted |
| Phase review, re-check after a fix pass | `reviewer` agent (pinned to Opus 5.5; never the builder) | `subagent_type: "reviewer"`, `model` omitted |
| Planned implementation (plan attacked first) | `athanor` for several blocks; one builder for a single block | `"athanor"`, `model` omitted; single block: project-pinned or `model: "opus"` (needs write access) |
| Complex summaries, git fixes, small code changes | Sonnet subagent | `model: "sonnet"` (needs write access) |
| Test runs, compiles, commits, linear-data summaries | Haiku subagent | `model: "haiku"` (needs Bash access) |
| Domain knowledge, repeated consultation on a subsystem | `adept` agent (long-lived, domain-scoped) | `subagent_type: "adept"` (`model` omitted; pinned) |
@@ -92,7 +96,7 @@ The `athanor` is the forge — your heavy lifter. A build furnace pinned to Opus
Igor routes work through the stages below. Not every task enters the cycle — one-off fixes, ad-hoc questions, and maintenance stay outside it. The line: if writing the plan would take longer than doing the work, it is not in the cycle.
**Stages:** (1) Brainstorm — Igor with user or Pinky; skip when direction is clear. (2) Research — researcher/adept answers open questions. (3) Design — independent Opus agent produces one buildable approach. (4) Plan — independent Opus 5.5 agent (never the designer) produces steps with completion criteria. (4b) Attack the plan — Igor dispatches a fresh Opus 5.5 agent (never the planner) that tests the plan adversarially against the code (blockers, design errors, missed consumers of changed semantics), then reshapes it into a build plan: phases that end testable, blocks one owner can finish. One step. It is what pays for dropping per-task review. Show the user the build plan and its open decisions before the door closes. (5) Build — the Athanor builds one phase per turn: blocks, a cheap gate between them, tests once, a run log. (6) Phase review — Igor dispatches a fresh Opus 5.5 reviewer per phase, without the attack's risk list as its scope; it answers every handoff flag, hunts weakened checks and tests that cannot fail, and stamps its model id. Details in `spire:implementation`.
**Stages:** (1) Brainstorm — Igor with user or Pinky; skip when direction is clear. If a grilling skill is installed (e.g. `grill-me`, `grill-with-docs`), Igor may use it for a light brainstorm: facts are Igor's to find, decisions are the user's (trial since 0.2.2). (2) Research — researcher/adept answers open questions. (3) Design — independent Opus agent produces one buildable approach. (4) Plan — the `planner` (never the designer) produces steps with completion criteria, at the plan altitude in `spire:implementation`. (4b) Attack the plan — Igor dispatches the `attacker`, fresh (never the planner), that tests the plan adversarially against the code (blockers, design errors, missed consumers of changed semantics), then reshapes it into a build plan: phases that end testable, blocks one owner can finish. One step. It is what pays for dropping per-task review. Show the user the build plan and its open decisions before the door closes. (5) Build — the Athanor builds one phase per turn: blocks, a cheap gate between them, tests once, a run log. (6) Phase review — Igor dispatches a fresh `reviewer` per phase, without the attack's risk list as its scope; it answers every handoff flag, hunts weakened checks and tests that cannot fail, and stamps its model id. Details in `spire:implementation`.
**Separation rule:** Plans and designs are always written by independent agents. The author of a plan never implements it or attacks it; the author of a design never plans from it; the builder never reviews its own phase. Separation keeps review honest.
@@ -166,8 +170,8 @@ Roster matching uses the gravity-well rule: pick the slug that fits most strictl
## Rules
- **Agents write their own reports.** Give every dispatched agent an explicit output file path in the workpad (`reports/`, `research/`, etc.). Never collect raw findings and re-summarize them yourself — read the finished files and give the user a short synthesis with links. Read reports for synthesis, not for verification. If a report looks wrong, dispatch a follow-up; don't become the verifier.
- **Journal.** Keep the session journal append-only and current: what was dispatched, what came back, decisions, course corrections.
- **Agents write their own reports.** Give every dispatched agent an explicit output file path in the workpad (`reports/`, `research/`, etc.). Research briefs ask for findings and options, not verdicts; the user decides. Never collect raw findings and re-summarize them yourself — read the finished files and give the user a short synthesis with links. Read reports for synthesis, not for verification. If a report looks wrong, dispatch a follow-up; don't become the verifier.
- **Journal.** Keep the session journal append-only and current: what was dispatched, what came back, decisions, course corrections. Take times from `date`, not from feel.
- **A "no" is a lull, not a stop.** When you offer a follow-up and the user declines ("no," "nah," "I'm good"), that pause is the cheapest moment to bring the journal current — do it then. Then close the beat with one line: a short acknowledgment, or the next natural thread if one exists. Don't stop dead; silence reads as a crash.
- **Talk to the user directly, keep details in files.** Questions and decisions go to the user conversationally and concisely; long-form material lives in the workpad.
- **User conventions.** Lean build: attack the plan before building, review once per phase, one fix pass, then stop (see `spire:implementation`). Push branches, never open pull requests.
@@ -11,7 +11,7 @@
<!-- Append-only. This journal is the testimony of one path through the problem: record the tangents and dead ends, not only the results. The path can't be walked again; the record can be read. -->
- HH:MM — <what was dispatched / what came back / decision taken>
- HH:MM — <what was dispatched / what came back / decision taken> <!-- time from `date` -->
## Adepts
@@ -8,7 +8,10 @@ Prefer a project-pinned agent from `.claude/agents/` when one matches the task;
| Deep research, bug investigation | Opus-tier research agent | `"researcher"` | Depth, reasoning; writes reports, never modifies code |
| Quick fact extraction, version/config lookup | Haiku lookup | `"scout"` | Fast, cheap, read-only; at most 2 web pages |
| Code/file lookups, symbol tracing | Sonnet search | `"search"` | Read-only; targeted "where is X" lookups |
| Planned implementation | implementer agent | project-pinned or omit (defaults to general-purpose) | Executes plans, verifies with the project's check/test commands |
| Writing a plan | `planner` (pinned to Opus 5.5) | `"planner"`, omit `model` | Reads the code; plan at decision/contract altitude; never builds or attacks it |
| Attacking a plan, reshaping into a build plan | `attacker` (pinned to Opus 5.5) | `"attacker"`, omit `model` | Never the planner; writes the build plan |
| Phase review, re-check | `reviewer` (pinned to Opus 5.5) | `"reviewer"`, omit `model` | Never the builder; does not fix |
| Planned implementation, single block (plan attacked first) | one builder | project-pinned or omit (defaults to general-purpose) | Executes the block, verifies with the project's check/test commands; several blocks go to `athanor` |
| Building a reshaped plan; multi-part jobs needing their own subagent fan-out | `athanor` (pinned to Opus 5.5, may use Agent/Task tool) | `"athanor"`, omit `model` | Builds one phase per turn; also takes non-build fan-out briefs |
| Complex summaries, git fixes, small code changes | Sonnet subagent | omit (defaults to general-purpose) | Capability/speed balance; needs write access |
| Test runs, compiles, commits, linear-data summaries | Haiku subagent | omit (defaults to general-purpose) | Fast, cheap, mechanical; needs Bash and possibly write access |
@@ -17,6 +17,21 @@ preload) changes.
- `my-researcher` — research/bug investigation, writes reports, never modifies code
- `my-implementer` — executes plans in the codebase
-->
- **Verification commands**: <!-- e.g. `cargo check`, `npm test`, `make lint` — whatever confirms changes are correct. -->
- **Domain skills to route to subagents when relevant**: <!-- e.g. `log-analysis` (crash logs), `my-framework` (before touching framework code). -->
- **Conventions**: <!-- Project-specific conventions: branching strategy, merge direction, backward-compat policy, trust rules for user observations, etc. -->
## Build
Read by `spire:implementation`. Unset means the skill's default; `none` means deliberately absent.
- **Gate** (cheap, between blocks): <!-- e.g. `cargo check`, `cargo clippy`, `tsc --noEmit` -->
- **Tests** (once per phase): <!-- e.g. `cargo nextest run`, `npm test` -->
- **Checkout**: <!-- one checkout (default) | worktrees -->
- **Branches**: <!-- who commits where; default: the branch the brief names -->
- **Staging**: <!-- explicit paths (default) -->
- **Owner models**: <!-- per block kind; default: Opus 5.5 for complex blocks, Sonnet for mechanical ones -->
- **Brief constraints**: <!-- sensitive areas, e.g. generated files, migrations -->
- **Host rules**: <!-- temp dirs, memory caps -->
- **Build plan**: <!-- user sees it before the run (default) | skip -->
Personal overrides go in `.claude/spire/project.local.md` (gitignored, same headings). They win over this file.