This is the canonical human guide for WorkMesh.
If you read only one document, read this one. The rest of the docs are supporting references.
WorkMesh is a docs-first project and task system for developers and coding agents.
It is built for:
- repo-local task tracking
- chat-driven development with durable context
- stable decision tracking through Truth Ledger
- parallel feature work across worktrees
- the same workflow through CLI and MCP
It is not built to be:
- a hosted ticketing product
- a remote SaaS project manager
WorkMesh keeps operational state close to the repo:
tasks/: Markdown task files.workmesh/context.json: repo-local working scope.workmesh/truth/: durable decisionsdocs/projects/<project-id>/: PRDs, decisions, updates
Global continuity lives under ~/.workmesh/:
- sessions
- worktree/workstream registries
- indexes and integrity metadata
Verify installed binaries:
workmesh --version
workmesh-mcp --versionBuild from source:
git clone git@github.com:luislobo/workmesh.git
cd workmesh
cargo build -p workmesh
cargo build -p workmesh-mcpCodex MCP example:
[mcp_servers.workmesh]
command = "/usr/local/bin/workmesh-mcp"
args = []Supported run modes:
- CLI:
workmesh - MCP stdio:
workmesh-mcp
For lower-level setup details, see:
This project is Codex-first. The intended usage is prompt-driven, not command-matrix-driven.
Day-to-day entry flow:
cdinto a repo- run
codexorcodex resume - prompt:
Bootstrap WorkMesh in this repo. Use MCP if available, otherwise CLI.
- then prompt:
Use WorkMesh for this feature end to end. Create/update PRD, create and maintain tasks with acceptance criteria and definition of done, keep context current, and track stable decisions in Truth Ledger.
That is the main path. You should not need to memorize commands to get started.
bootstrap is designed to handle mixed repo states:
- brand new repo with no WorkMesh data
- modern WorkMesh repo
- legacy backlog/focus layout
- long-lived clone workflow that should eventually move to worktrees
Expected behavior:
- initialize when no WorkMesh data exists
- validate and continue when the modern layout already exists
- migrate deprecated structures when needed
- keep work moving and recommend worktree adoption when the repo uses parallel clones
Task files live under tasks/ by default.
Legacy layouts remain readable:
workmesh/tasks/.workmesh/tasks/backlog/tasks/project/tasks/
Default task-quality requirements:
DescriptionAcceptance CriteriaDefinition of Done- outcome-based
Definition of Donecontent, not only hygiene lines like “code committed” or “docs updated”
These defaults are configurable through project or global config:
task_require_descriptiontask_require_acceptance_criteriatask_require_definition_of_donetask_require_outcome_based_definition_of_done
Actionable tasks:
To DoandIn Progresstasks must already satisfy the required section quality gate.- Incomplete work must stay in
DraftorNeeds Refinementuntil the task is properly specified. next_task,next_tasks, andready_tasksignore tasks that are not yet actionable.
.workmesh/context.json stores the current repo-local scope:
- project
- epic
- objective
- task working set
- active workstream
Truth records live under .workmesh/truth/.
Use them for decisions that must survive:
- restarts
- agent changes
- worktree changes
- feature handoffs
Workstreams are the parallel-work model.
Typical pattern:
- one canonical repo
- multiple git worktrees
- one active workstream per worktree
Useful commands:
workmesh --root . workstream create --name "OCA integration" --project <project-id> --objective "..." --json
workmesh --root . workstream restore --json
workmesh --root . worktree adopt-clone --from <path-to-clone> --apply --jsonA good WorkMesh-driven feature flow looks like this:
- create or update the PRD
- create tasks that support the real work
- keep the repo’s configured task-quality requirements complete before moving work into
To DoorIn Progress - keep repo-local context current
- capture durable feature truths when a decision should persist
- make atomic commits per task or coherent task slice
- archive completed tasks after the work is actually done
Single repo/worktree:
cd <repo-or-worktree>codex resume- ask Codex to restore context, truths, and next tasks
Recommended resume prompt:
Rehydrate this session with WorkMesh. Read current context, accepted truths, active workstream state, and next actionable tasks. Then summarize what I was doing, what constraints still apply, and the next concrete step.
Multiple active workstreams:
workmesh --root . workstream restore --jsonThe restore output gives you:
worktree_pathsession_idcontextnext_taskresume_script
That is the deterministic recovery path after losing terminals or rebooting.
Resume checklist for agents:
- restore current context
- read accepted truths for the current scope
- inspect workstream restore state if parallel work exists
- identify the active task or smallest valid working set
- summarize current objective, constraints, and next step before new implementation work
If you are not using MCP, these are the main direct commands:
workmesh --root . bootstrap --project-id <project-id> --feature "<feature-name>" --json
workmesh --root . context show --json
workmesh --root . next --json
workmesh --root . list --json
workmesh --root . workstream restore --jsonCLI render fallback:
workmesh --root . render table --data '[{"task":"task-001","status":"Done"}]'listshownextnext-tasksreadyboardblockersstats
addadd-discoveredset-statusset-fieldlabel-add/label-removedep-add/dep-removenoteset-bodyset-sectionclaimrelease
context show|set|cleartruth propose|accept|reject|supersede|show|list|validate
workstream create|show|list|switch|pause|close|reopen|rename|restoreworktree list|attach|detach|adopt-clone
doctorvalidatemigrate audit|plan|applytruth migrate audit|plan|apply
For the exhaustive surface, see:
WorkMesh has native renderers for human-friendly output:
tablekvstatslistprogresstreedifflogsalertschart-barsparklinetimeline
Use MCP render tools first when available.
Use CLI render ... as the local fallback.
For MCP render tools, send data as a JSON-encoded string and configuration as an optional typed object.
Native JSON values for data still work as a deprecated compatibility path, but agents should not rely on that form.
MCP mutation tools default to compact acknowledgements to save tokens.
Typical response:
{ "ok": true, "id": "task-001", "status": "Done" }Bulk default:
{ "ok": false, "updated_count": 3, "failed_count": 1, "failed_ids": ["task-009"] }If you need richer post-write state:
- pass
verbose=true - or call the matching read tool afterwards
Current crate boundaries:
workmesh-core: domain logic, storage, stateworkmesh-render: renderersworkmesh-tools: shared tool contractworkmesh: CLI adapterworkmesh-mcp-server: MCP adapterworkmesh-mcp: stdio wrapper
Contributor rule:
- shared tool semantics go into
workmesh-tools - CLI-only behavior goes into
workmesh - MCP transport-only behavior goes into
workmesh-mcp-server - domain/state/storage logic goes into
workmesh-core
Architecture diagrams:
Critical tracking files use lock-safe and atomic storage primitives.
Important guarantees:
- versioned mutable snapshots
- CAS-based writes
- append-safe JSONL event streams
- integrity recovery through doctor
Useful repair path:
workmesh --root . doctor --fix-storage --jsonArchive defaults are intentionally conservative:
DoneCancelledCanceledWon't DoWont Do
Non-terminal statuses are archived only when explicitly requested.
These remain useful, but they are no longer the primary entrypoint:
docs/architecture.mddocs/getting-started.mddocs/reference/commands.mddocs/setup/run-modes-and-agent-mcp.mddocs/test-coverage.mddocs/samples/workmesh-demo/README.md
WorkMesh uses a layered skill model so agents do not have to rediscover the workflow on every session.
The skills are:
workmesh: router skill that selects CLI-first or MCP-first executionworkmesh-cli: CLI adapter skillworkmesh-mcp: MCP adapter skill
Canonical skill sources live under skills/. Installed project-local agent paths follow the
standard layout:
.agents/skills/for Codex and Cursor.claude/skills/for Claude
Each skill is self-contained and carries its doctrine reference inside its own directory.
The shared doctrine covers:
- task quality rules
- SOLID/TDD expectations
- compaction-safe persistence discipline
- when to use tasks vs notes vs truths vs context updates
- output/rendering rules
- mutation response expectations
Recommended agent behavior under compaction pressure:
- restore context, accepted truths, and current task before starting new work
- claim/set
In Progressand validate task quality before coding - update WorkMesh immediately when scope, blockers, dependencies, or durable decisions change
- before likely compaction or topic switches, persist a concise note, ensure context is correct, and capture durable truths
- only mark
Doneafter goals, acceptance criteria, and definition of done are truly satisfied
The main principle is simple:
- tasks are the work contract
- context is the current pointer
- truths are durable decisions
- notes are the volatile breadcrumb trail
- sessions/workstreams are the continuity layer