Workflow
How Weave structures complex work — Plan → Review → Execute, the /start-work command, resumable execution state, plus the supporting features (hooks, skills, background agents, tool permissions).
For anything more involved than a one-shot fix, Weave uses an explicit Plan → Review → Execute workflow. The plan is a real file on disk you can read and edit, the review is a separate agent with its own bias, and execution is a resumable, checkbox-driven loop. If a session crashes mid-way, you pick up exactly where you left off.
When the full workflow runs
Loom uses the structured workflow when the request:
- Takes 5 or more steps.
- Touches multiple files.
- Involves an architectural decision.
- Benefits from a reviewable plan before any code is written.
For everything else — single-file fixes, quick questions, small tweaks — Loom either answers directly or delegates to a single subagent without writing a plan.
1. Plan
User → @loom (assesses) → @pattern (researches) → .weave/plans/{name}.mdLoom delegates to Pattern, which:
- Researches the codebase by dispatching to
@thread. - Looks up library docs via
@spindleif needed. - Writes a structured markdown plan to
.weave/plans/{name}.md.
The plan format is deliberately simple:
# Add OAuth2 device-flow login
## Objective
Allow CLI users to authenticate without pasting a token.
## Tasks
- [ ] Add `device-flow` command to `src/cli/commands/`
- [ ] Implement polling loop with backoff in `src/auth/device.ts`
- [ ] Wire token persistence into existing keychain helper
- [ ] Add integration test against the staging IdP
- [ ] Document the new command in the CLI referenceEvery task is an actionable, atomic checkbox. Pattern never writes code — only plans.
2. Review (optional)
.weave/plans/{name}.md → @weft → APPROVE | REJECTFor high-stakes plans Loom hands the file to Weft, which validates that:
- Referenced files actually exist.
- Each task has enough context to execute independently.
- No two tasks contradict each other.
- The plan covers the stated objective.
Weft is approval-biased and caps rejection at three blocking issues per pass. If it rejects, the issues go back to Pattern for revision, then loop.
For plans involving auth, crypto, token storage, or input validation, Loom additionally routes through Warp, which is skeptical-biased and rejects by default until security claims are evidenced.
3. Execute
You start execution from the chat:
/start-work [plan-name]That command:
- Creates
.weave/state.jsonwith the plan path and progress markers. - Switches the active agent to Tapestry.
- Begins working through tasks sequentially.
For each task Tapestry:
- Finds the first unchecked
- [ ]line. - Implements it (writes code, runs commands, creates files — usually by dispatching to Shuttle).
- Verifies completion (reads files back, runs tests, checks acceptance criteria).
- Ticks the box →
- [x]. - Moves to the next unchecked task.
- When the file has no unchecked tasks, reports a final summary.
After implementation completes, Loom can route the diff through Weft for a post-implementation review.
Resuming interrupted work
State persists in .weave/state.json. If your session is interrupted — laptop sleep, Fabric crash, deliberate Ctrl-C — running /start-work again resumes from the first unchecked task. No re-planning, no restart.
$ ls .weave/
plans/
add-oauth-device-flow.md
state.jsonstate.json is small and machine-readable; you can inspect it manually if a run wedges.
Quick tasks (no plan)
For requests that don't need the workflow — "rename this var", "what's in this file", "fix the typo on line 42" — Loom skips planning entirely and either answers directly or delegates to a single subagent. The Plan → Review → Execute machinery is opt-in based on complexity, not enforced on every request.
Supporting features
The workflow is the headline feature, but a few subsystems make it work reliably.
Hooks
Weave ships five lifecycle hooks. All are enabled by default; disable them via disabled_hooks when needed.
| Hook | What it does |
|---|---|
context-window-monitor | Warns when token usage approaches limits and suggests recovery strategies. |
write-existing-file-guard | Tracks file reads to prevent agents from overwriting unread files. |
rules-injector | Auto-injects AGENTS.md rules when an agent enters a directory containing one. |
first-message-variant | Applies a specific prompt variant on session start. |
keyword-detector | Watches messages for keywords that should switch agents or behaviour. |
Skills
Skills are markdown files (SKILL.md) that get prepended to an agent's system prompt — domain expertise injected on demand. Weave loads skills from three scopes:
- builtin — shipped with the plugin.
- user —
~/.config/fabric/skills/. - project —
.fabric/skills/.
Add custom roots with skill_directories and pin which skills load into which agents:
{
"agents": {
"shuttle": {
"skills": ["react-best-practices", "api-design"],
},
},
}Background agents
Loom can spawn subagents in parallel via the BackgroundManager. Concurrency is bounded — globally, per-provider, and per-model — so parallel research doesn't blow your rate limits.
{
"background": {
"defaultConcurrency": 5,
"providerConcurrency": { "anthropic": 5, "openai": 3 },
},
}See Background agents for the full set of knobs.
Tool permissions
Tool access is enforced per-agent. By default:
@thread,@spindle,@weft,@warp,@patternare read-only — nowrite, noedit, no shell mutations.@loomplans and delegates — its writes are intentional handoffs, not implementation.@tapestry,@shuttlehave the broad permissions needed to execute work.
Override per-agent in your config:
{
"agents": {
"shuttle": {
"tools": {
"write": false,
"bash": false,
},
},
},
}End-to-end example
> Add a /export command that dumps the current session to JSON.
@loom: This needs a plan — touches the command registry, session
serializer, and tests. Dispatching to @pattern.
@pattern: Researching… (delegates to @thread for command registry
location + @spindle for the JSON-Schema spec we use elsewhere)
→ wrote .weave/plans/add-export-command.md (4 tasks)
@weft: Plan APPROVED. Files exist, tasks atomic, no contradictions.
> /start-work add-export-command
@tapestry: Starting. Task 1/4: Register `/export` in command table…
→ implemented, verified, [x]
@tapestry: Task 2/4: Add JSON serializer for Session…
[…]
@tapestry: All 4 tasks complete. Summary: …
@weft: Post-implementation review — APPROVED. No leftover TODOs,
tests pass, file references resolve.That's the full loop. Read the Configuration page next to tune model selection, concurrency, and which subagents are even active.
Agents
The eight Weave agents — Loom, Tapestry, Shuttle, Pattern, Thread, Spindle, Weft, Warp — what they do, when Loom delegates to them, and which tools each one is allowed to use.
Workspaces
How workspaces isolate configurations in Fabric Agents — creating, switching, deleting, per-workspace vs global settings, and remote (thin-client) workspaces.