spec-workflow
Skill16 starsChanged 5 days agoMITView on GitHub
OpenSpec lifecycle orchestration for /workflow chains. TRIGGER when: coordinating the analyst-architect-developer-reviewer chain or managing spec status transitions. SKIP: writing an individual spec artifact (use spec-research, spec-design, or spec-review).
10 other projects use a version of this.
Adopted by
Most recently taken up by
- yourhoneypomelo-cell/agent-workspace-templatetheir own version, first seen Nov 8, 2026
- TencentCloudBase/skillstheir own version, first seen Nov 6, 2026
- tovrleaf/openkatatheir own version, first seen Nov 1, 2026
- mahdyarief/spec-driven-agent-kittheir own version, first seen Nov 1, 2026
- Onlyaguest/ViviStableSkillstheir own version, first seen Oct 10, 2026
- ramboz/jigtheir own version, first seen Jun 22, 2026
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- TencentCloudBase/skills★ 80same name
- aws-samples/sample-claude-code-agent-team★ 67same name
- Onlyaguest/ViviStableSkills★ 18same name
- ramboz/jig★ 7same name
- masonhuemmer/dops★ 3same name
- rundops/dops★ 3same name
- yourhoneypomelo-cell/agent-workspace-template★ 2same name
- tovrleaf/openkata★ 1same name
- mahdyarief/spec-driven-agent-kit★ 0same name
- XiaMuYao/claude-skill★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository39 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- agent-commsSkill
- agent-memorySkill
- api-designSkill
- context-engineeringSkill
- database-optimizationSkill
- distillSkill
- docker-templatesSkill
- error-handlingSkill
- frontend-designSkill
- github-actions-templateSkill
- git-operationsSkill
- logging-standardsSkill
- mcp-toolsSkill
- monitoring-observabilitySkill
- mui-stylingSkill
- necessity-firstSkill
- pattern-recognitionSkill
- planning-methodologySkill
- python-patternsSkill
- quality-validationSkill
- react-patternsSkill
- research-methodologySkill
- reverse-engineer-anythingSkill
- security-review-checklistsSkill
- semantic-memory-mcpSkill
- skill-authoringSkill
- sofa-searchSkill
- spec-designSkill
- spec-developSkill
- spec-researchSkill
- spec-reviewSkill
- state-managementSkill
- systematic-debuggingSkill
- testing-strategySkill
- ui-ux-pro-maxSkill
- verification-before-completionSkill
- watch-patternsSkill
- worktree-managementSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 36
Always read and write through .scaffolding/conversations/...
- Very specific: line 126
Read-merge-write, always: Read the existing file, change only the keys you own, write the whole object back.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OpenSpec Workflow Orchestration
Spec-driven development protocol for coordinating multi-agent workflows.
UUID Enforcement
CRITICAL: The conversation_id MUST always be a UUID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). NEVER use descriptive names, slugs, or human-readable strings. If no UUID is available, generate one with uuidgen or python3 -c "import uuid; print(uuid.uuid4())". Self-check: does the conversation_id match the pattern [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}? If not, STOP and use a real UUID.
Directory Structure
Canonical layout (identical on every machine and in every project):
<repo>/.scaffolding/
conversations -> <share>/projects/<repo-name>/conversations (symlink to the NFS share)
worktrees/ LOCAL real dir, never on NFS
openspec/ workflows/ git-tracked
agent-memory/ project-id ... local
<share>/projects/<repo-name>/conversations/{conversation_id}/
context.json status + history (merged schema below)
specs/
proposal.md -- WHY + WHAT (analyst)
design.md -- WHAT + HOW (architect)
tasks.md -- checklist (architect)
agent-memory/context.md conversation-tier memory
attachments/{attId}/{name} + {attId}.json
tasks/{taskId}/ meta.json, output.md, output.jsonl, summary.json, state.jsonAlways read and write through .scaffolding/conversations/... (the symlink);
never hardcode the share path. <share> differs per machine
(/mnt/scaffolding-data or /mnt/scaffolding). nfs-sync.sh creates the link
at SessionStart or via nfs-sync.sh link <dir>; <share>/platform/conversations
holds notes only and is never a link target.
Status Lifecycle
Tracked in status of .scaffolding/conversations/{conversation_id}/context.json:
| Status | Meaning | Transition |
exploring | Research phase | -> drafting when proposal done |
drafting | Design + tasks | -> implementing when tasks done |
implementing | Code changes | -> reviewing when tasks complete |
reviewing | Verification | -> complete when verified |
complete | Done | -> archived on request |
archived | Historical | Terminal state |
Agent Routing in /workflow
| Phase | Agent | Reads | Writes | Gate |
| 1. Analyze | analyst | requirements | proposal.md | proposal written |
| 1b. Research (conditional) | researcher | requirements | ResearchPack | score >= 80 |
| 2. Design | architect | proposal.md | design.md, tasks.md | score >= 85 |
| 3. Apply | developer | tasks.md, design.md | source code | validation passes |
| 4. Verify | reviewer | design.md, tasks.md | review report | no criticals |
When Researcher Is Needed
Analyst flags need for research in proposal.md. Researcher is invoked ONLY when the task involves:
- New external API integration (e.g., Stripe, Twilio)
- Unfamiliar library not yet in the project
- Best practices requiring current internet research
- Version-specific documentation for upgrades/migrations
Analyst writes proposal directly (no researcher) for:
- Internal codebase refactoring
- UI/styling changes
- Bug fixes with known root cause
- Configuration changes
- Features using only existing project dependencies
When to Create vs Skip Specs
| Task Type | Use Specs? | Reason |
| New feature | Yes | Needs design, multi-file |
| Architecture change | Yes | Needs decisions documented |
| Multi-agent workflow | Yes | Needs coordination |
| Bug fix (simple) | No | Direct to developer |
| Typo / config tweak | No | Direct to developer |
| Single-file refactor | No | Direct to developer |
Orchestration Steps
- Obtain conversation_id UUID: From prompt context or generate via
uuidgen. MUST be a UUID, never a descriptive name (validate against the regex above before creating any directory). - Create specs directory:
mkdir -p .scaffolding/conversations/{conversation_id}/specs/ - Set specs_path:
.scaffolding/conversations/{conversation_id}/specs/ - Analyst writes proposal.md (requirements, scope, impact, feasibility)
- If research needed: analyst flags in proposal.md, researcher is invoked (score >= 80)
- Architect writes design.md + tasks.md (incorporating proposal.md and ResearchPack if available)
- Pass specs_path in every agent delegation prompt
- Update context.json status after each phase transition (read-merge-write, see schema)
- Gate enforcement: Block next phase if quality gate fails
Context JSON Schema
One merged schema shared with the platform. Every field is optional; readers treat a missing key as empty.
{
"conversation_id": "uuid", // always a UUID
// plugin (this workflow)
"status": "exploring|drafting|implementing|reviewing|complete|archived",
"description": "string",
"created_at": "ISO-8601 string",
"agents_involved": ["architect", "developer"],
// platform
"original_intent": "string",
"task_history": [ { "task_id": "..." } ],
"cumulative_files_changed": ["path"],
"cumulative_decisions": ["string"],
"last_updated": 1760000000, // epoch seconds (number)
"openspec": { "status": "archived" } // or null
}Read-merge-write, always. Read the existing file, change only the keys you
own, write the whole object back. Never recreate the file from scratch and never
drop keys you do not know (e.g. keep original_intent and task_history when
setting status). Keep existing types: created_at is an ISO string,
last_updated a number. There is no version field. When the file does not
exist yet, create it with conversation_id plus the keys you own.
Minimal merge (jq):
f=".scaffolding/conversations/$CONV_ID/context.json"
[ -f "$f" ] || echo "{\"conversation_id\": \"$CONV_ID\"}" > "$f"
jq '.status = "implementing"' "$f" > "$f.tmp" && mv "$f.tmp" "$f"Schema Reference
Custom schema: .scaffolding/openspec/schemas/scaffolding-workflow/schema.yaml
Config: .scaffolding/openspec/config.yaml
Templates: .scaffolding/openspec/schemas/scaffolding-workflow/templates/
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

