Factory.ai Missions: structured planning → milestone decomposition → parallel agent dispatch → milestone validation → human-as-PM orchestration.
thread— tasks with status, claims, deps, parent, space, policy gatesproject— grouping containerdispatch— runtime adapter dispatch (Cursor, Claude Code, shell)trigger— event-driven automationpolicy/policy-gate— governance checkpointsrun— execution recordsledger— full audit trail- Threads already support
parentfield for hierarchy
A mission is a high-level goal decomposed into milestones and features. It's the orchestration container.
---
primitive: mission
mid: deploy-clawvault-cloud
title: Deploy ClawVault Cloud to Production
description: >-
Full production deployment of ClawVault Cloud — NestJS backend + Next.js frontend
on Railway, with Neon DB, auth, and org management.
status: planning # planning → approved → active → validating → completed → failed
priority: high
owner: clawdious
project: projects/clawvault.md
space: spaces/infrastructure.md
# Planning phase output
plan:
goal: "Production-ready ClawVault Cloud with decision traces, org management, auth"
constraints:
- "Use Railway for deployment"
- "Neon DB for Postgres"
- "Must support multi-org from day 1"
estimated_runs: 12 # features + 2*milestones
estimated_cost_usd: null # filled after dispatch
milestones:
- id: ms-1
title: "Core API + DB"
status: open # open → active → validating → passed → failed
features:
- threads/mission-deploy-clawvault-cloud/prisma-schema.md
- threads/mission-deploy-clawvault-cloud/api-endpoints.md
- threads/mission-deploy-clawvault-cloud/auth-system.md
validation:
strategy: automated # automated | manual | hybrid
criteria:
- "npm run build succeeds"
- "npm test passes"
- "prisma migrate deploys cleanly"
- id: ms-2
title: "Frontend + Deploy"
status: open
deps: [ms-1]
features:
- threads/mission-deploy-clawvault-cloud/next-frontend.md
- threads/mission-deploy-clawvault-cloud/railway-deploy.md
validation:
strategy: hybrid
criteria:
- "Site loads at production URL"
- "Auth flow works end-to-end"
# Execution tracking
started_at: null
completed_at: null
total_runs: 0
total_cost_usd: 0
tags: [clawvault-cloud, deployment, mission]
created: 2026-03-09T21:00:00Z
updated: 2026-03-09T21:00:00Z
---
## Goal
Production-ready ClawVault Cloud with decision traces, org management, auth.Milestones are embedded in the mission YAML as structured objects. They reference threads (features) that must complete before validation runs.
Feature threads are regular thread primitives with a parent pointing to the mission. They get auto-created during mission planning and live in a mission-namespaced directory.
threads/mission-{mid}/
feature-1.md
feature-2.md
...
mission create "Deploy ClawVault Cloud" --project clawvault
Creates mission in planning status. The orchestrator (me or an agent) then:
- Iterates on the goal, constraints, approach
- Decomposes into milestones with features
- Assigns estimated_runs
- Creates feature threads (as
openthreads withparent: missions/{mid}.md)
mission approve {mid}
Human or policy gate approves the plan. Transitions to approved.
mission start {mid}
Begins execution:
- First milestone activates
- Feature threads get dispatched to agents (Cursor, Claude Code, etc.)
- Each dispatch creates a
runprimitive linked to the thread - As threads complete, milestone progress updates
When all features in a milestone are done:
- Validation worker runs (automated:
npm test, manual: human review, hybrid: both) - If passed → milestone.status =
passed, next milestone activates - If failed → creates fix-threads, re-runs failing features
All milestones passed. Mission done. Ledger records full history.
packages/kernel/src/mission.ts— Mission CRUD, lifecycle, milestone managementpackages/kernel/src/mission-orchestrator.ts— Auto-dispatch, validation, progress trackingpackages/kernel/src/mission.test.tspackages/kernel/src/mission-orchestrator.test.ts
packages/kernel/src/types.ts— Add MissionStatus, MilestoneStatus, Mission typespackages/kernel/src/store.ts— Registermissionprimitive typepackages/mcp-server/src/mcp/tools/read-tools.tsandpackages/mcp-server/src/mcp/tools/write-tools.ts— MCP mission read/write tool registrationpackages/cli/— Addworkgraph missionsubcommand group
workgraph_create_mission— Create mission with initial goalworkgraph_plan_mission— Add/update milestones and featuresworkgraph_approve_mission— Approve plan, transition to approvedworkgraph_start_mission— Begin executionworkgraph_mission_status— Get mission status with milestone progressworkgraph_mission_progress— Detailed progress: features done/total per milestone, runs, costsworkgraph_intervene_mission— Redirect, re-plan, skip feature, change priority
workgraph mission create "title" --project X --goal "..."
workgraph mission plan {mid} --add-milestone "Core API" --features "prisma,api,auth"
workgraph mission approve {mid}
workgraph mission start {mid}
workgraph mission status {mid}
workgraph mission list [--active] [--project X]
workgraph mission intervene {mid} --skip-feature {tid} --reason "..."When a mission is active:
- Find the next milestone that is
openand whose deps are allpassed - Activate that milestone
- For each feature thread in the milestone:
- If thread is
openand not claimed → dispatch to appropriate adapter - Adapter selection: check thread tags for hints (
cursor,claude-code,manual) - Default:
cursor-cloudadapter
- If thread is
- When all features in milestone are
done→ run validation - On validation pass → advance to next milestone
- On all milestones passed → complete mission
Validation runs are dispatches with a special validation flag:
dispatch.create(workspacePath, {
actor: 'mission-orchestrator',
adapter: 'cursor-cloud',
objective: `Validate milestone "${milestone.title}": ${milestone.validation.criteria.join('; ')}`,
context: { missionId: mid, milestoneId: milestone.id, isValidation: true }
});If validation fails, orchestrator creates fix-threads:
thread.createThread(workspacePath, `Fix: ${failureDescription}`, failureGoal, 'mission-orchestrator', {
parent: `missions/${mid}.md`,
tags: ['fix', 'validation-failure']
});Each dispatch run records cost (from adapter response). Mission aggregates:
total_runs: 8
total_cost_usd: 12.50
runs_by_adapter:
cursor-cloud: 6
claude-code: 2mission-milestone-complete— fires when milestone passesmission-feature-dispatched— fires when feature thread gets dispatchedmission-completed— fires when all milestones passmission-validation-failed— fires when validation fails
Missions can require approval gates:
mission-plan-approval— plan must be approved before executionmission-deploy-approval— deployment milestones need explicit approval
Mission events flow through the webhook gateway, so external systems can react.
- Parallel feature execution within a milestone (sequential for v1, parallel later)
- Skill auto-development (Factory does this, we skip for now)
- Cost estimation pre-dispatch (just track actuals)
- Web UI (use MCP/CLI for now)