- type
- Phoenix Skill
- name
- phoenix-auto
- description
- Dynamic, state-sensing router for autonomous multi-step work — chooses the next Phoenix skill at runtime from the current objective state (what's green/red, what stage, is there a backlog) instead of following a fixed pipeline. This is Phoenix's autopilot. Use for open-ended autonomous execution where the next step depends on results, when the user says /phoenix-auto, "autopilot", "drive this", "orchestrate", or "figure out the steps as you go". For a fixed lifecycle just use the phoenix meta-router; for a persistent backlog loop use phoenix-ralph.
- license
- MIT
# phoenix-auto — the adaptive orchestrator
The base `phoenix` skill is a **fixed routing tree** (think → plan → build → review → ship): great
when the path is known. phoenix-auto is the **dynamic** counterpart — Anthropic's *routing* +
*orchestrator-workers* patterns ([Building Effective Agents](https://www.anthropic.com/engineering/building-effective-agents)):
at each step it **senses current state** and picks the next skill based on results, because in real
work you can't predict the subtasks up front.
> Fixed pipeline = a train on rails. phoenix-auto = a driver reading the road. Both are valid; pick by
> how predictable the path is.
## The state-sensing loop
```
┌───────────────────────────────────────────────┐
▼ │
SENSE state ──▶ ROUTE to a skill ──▶ EXECUTE ──▶ phoenix_sense gate
(green/red? (pick next by (run it) │
backlog? current reality) ├─ green ─▶ snapshot, re-SENSE ─┘
stage?) └─ red ──▶ phoenix_heal (≤3) ─▶ re-SENSE
```
### Routing policy (what to pick, given state)
| Current state | Route to |
|---|---|
| Goal is vague / no acceptance check exists | `phoenix-goal` (formalize) → or `phoenix-think` |
| Have intent, no steps | `phoenix-plan` |
| There's a backlog to grind to completion | `phoenix-ralph` (the persistence loop) |
| Implementing a known step | `phoenix-build` (+ `phoenix-test` to set the gate) |
| A check is red / something broke | `phoenix-debug` |
| Need cheap structural context | `phoenix-context` (graph) |
| Work looks complete | `phoenix-review` → `phoenix-ship` |
## Guardrails (dynamic routing fails in specific, known ways — design against them)
- **Oscillation guard.** Keep a short route history. If you route to the same pair of skills back and
forth, or pick the same skill 3× with no state change, **stop and escalate** — that's a planning
problem, not a routing one.
- **Confidence fallback.** If the right next skill isn't clear, route to `phoenix-think`, don't guess.
- **Re-sense, don't cache.** Decide from a *fresh* read of state (the trace, the backlog, a real
`phoenix_sense`), never a remembered summary — stale state causes wrong routes.
- **Every executed step still ends in an objective gate.** Routing chooses *what*; `phoenix_sense`
decides *whether it worked*. Dynamic routing never relaxes the verification law.
- **Bounded.** A cap on total steps; on exhaustion, report state honestly rather than looping.
## Common Rationalizations
| Rationalization | Reality |
|---|---|
| "I'll keep routing until it works out." | Unbounded routing is just an expensive infinite loop. Cap steps; escalate when stuck. |
| "I routed here last step, I remember the state." | Re-sense. Acting on cached state is the #1 cause of wrong routes. |
| "Confidence is low but I'll pick something." | Low confidence → `phoenix-think`. Guessing the route wastes a whole step. |
| "This step's result looks right, route onward." | "Looks right" isn't a gate. `phoenix_sense` before you route on a result. |
## Red Flags — stop
- You've bounced between two skills more than twice. → Escalate; it's a planning problem.
- You're routing based on what you *think* the state is. → Re-sense from disk/trace first.
- A step "succeeded" with no `phoenix_sense`. → No gate, no progress; verify before routing on.
## Relationship to the other skills
phoenix-auto is opt-in: the base **phoenix** router stays a stable fixed tree and dispatches here only
when you explicitly ask for autonomous mode or when `.phoenix-ralph/` state is present. For a known
backlog it will usually route straight into **phoenix-ralph**; for a vague goal, into **phoenix-goal**.
عرض على GitHub