route
$
npx mdskill add fabriqaai/specs.md/routeAnalyzes project state and routes users to appropriate agents based on verified context and triggers.
- Helps manage project workflows by directing users to the right agent after tasks or specific commands.
- Integrates with the file system and reads state.yaml to reconcile project data.
- Decides routing by scanning for intents and work items, prioritizing file system as the source of truth.
- Presents results by outputting active run details or routing decisions to the user or agent.
SKILL.md
.github/skills/routeView on GitHub ↗
---
name: route
description: Analyze project state and route user to the appropriate agent based on current context.
version: 1.0.0
---
<objective>
Analyze project state and route user to the appropriate agent.
</objective>
<triggers>
- User runs `/specsmd-fire` on initialized project
- After any agent completes its task
</triggers>
<llm critical="true">
<mandate>ALWAYS scan file system for intents/work-items not in state.yaml</mandate>
<mandate>FILE SYSTEM is source of truth — state.yaml may be incomplete</mandate>
<mandate>Route based on VERIFIED state, not assumptions</mandate>
</llm>
<flow>
<step n="1" title="Discover and Read State">
<action>Read .specs-fire/state.yaml</action>
<file_system_scan critical="true">
Use these EXACT glob patterns:
<pattern purpose="Find intent briefs">
.specs-fire/intents/*/brief.md
</pattern>
<pattern purpose="Find work items">
.specs-fire/intents/*/work-items/*.md
</pattern>
Work items are {work-item-id}.md files directly in work-items/ folder.
</file_system_scan>
<action>Reconcile: add discovered items to state as pending</action>
<action>Parse current project state</action>
</step>
<step n="2" title="Check Active Run">
<check if="runs.active is not empty">
<output>
Resuming active run: {runs.active[0].id}
Scope: {runs.active[0].scope}
Current item: {runs.active[0].current_item}
Progress: {completed_count}/{total_count} items
</output>
<route_to>builder-agent (run-execute)</route_to>
<stop/>
</check>
</step>
<step n="3" title="Check Pending Work Items">
<action>Find work items with status == pending across all intents</action>
<check if="pending work items exist">
<output>
**{pending_count} pending work items** found across {intent_count} intent(s).
Plan run scope and start execution? [Y/n]
</output>
<check if="response == y">
<route_to>builder-agent (run-plan)</route_to>
</check>
<stop/>
</check>
</step>
<step n="4" title="Check Active Intent">
<action>Find intents with status == in_progress</action>
<check if="active intent has no work items">
<output>
Intent "{intent.title}" needs decomposition.
Routing to Planner to create work items.
</output>
<route_to>planner-agent (work-item-decompose)</route_to>
<stop/>
</check>
<check if="all work items completed">
<action>Mark intent as completed</action>
<output>
Intent "{intent.title}" completed!
Work items delivered:
{list completed work items}
Ready for next intent? [Y/n]
</output>
</check>
</step>
<step n="5" title="No Active Work">
<output>
No active work. Ready for a new intent.
What do you want to build?
</output>
<route_to>planner-agent (intent-capture)</route_to>
</step>
</flow>
<routing_decision_tree>
```
state.yaml + file system scan
│
├── runs.active? ─────────────> Builder (run-execute, resume)
│
├── pending work items? ──────> Builder (run-plan, then execute)
│
├── intent without work items? > Planner (work-item-decompose)
│
└── no active intents ────────> Planner (intent-capture)
```
</routing_decision_tree>
<context_passed_to_agents>
**To Planner:**
```yaml
context:
action: intent-capture | work-item-decompose
intent_id: {if decomposing}
```
**To Builder:**
```yaml
context:
action: run-plan | run-execute | resume
pending_items: [{list of pending work items}] # for run-plan
run_id: {if resuming}
```
</context_passed_to_agents>
<success_criteria>
<criterion>File system scanned for untracked intents/work-items</criterion>
<criterion>State reconciled with file system</criterion>
<criterion>Correct agent selected based on state</criterion>
<criterion>Context passed to target agent</criterion>
</success_criteria>
More from fabriqaai/specs.md
- design-doc-generateGenerate design documents for Validate mode work items (Checkpoint 1). Required for high-complexity items.
- flameMulti-perspective idea evaluation using Six Hats analysis, impact/feasibility scoring, and collaborative shortlisting.
- intent-captureCapture user intent through guided conversation. Exploratory phase with high degrees of freedom.
- project-initInitialize a new FIRE project by detecting workspace type and setting up standards.
- run-executeExecute work items based on their assigned mode (autopilot, confirm, validate). Supports single-item and multi-item (batch/wide) runs.
- run-planPlan the scope of a run by discovering available work items and suggesting groupings. Invoked before run-execute.
- run-statusDisplay current run status and progress. Shows work item, mode, duration, and files changed.
- sparkRapid idea generation with cross-domain diversity, anti-bias enforcement, and deep thinking.
- walkthrough-generateGenerate implementation walkthrough for human review after run completion. Documents decisions, changes, and verification steps.
- work-item-decomposeBreak an intent into discrete, executable work items with complexity assessment and dependency validation.