원클릭으로
beadcraft
Use when decomposing a spec, design, or feature description into a task dependency graph with self-evaluating acceptance criteria
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when decomposing a spec, design, or feature description into a task dependency graph with self-evaluating acceptance criteria
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when reviewing a spec or task graph for completeness before implementation
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when doing creative product, feature, component, functionality, or behavior design work
Use when infrastructure or features are built but before declaring done -- verifies work is wired into the system and actively used
Use when task completion or context usage requires a handoff readiness check
| name | beadcraft |
| description | Use when decomposing a spec, design, or feature description into a task dependency graph with self-evaluating acceptance criteria |
Unified skill for task quality. Defines task anatomy, quality standards, and size heuristics ONCE, serving three modes:
Core principle: Every task must answer "how do I know this is done?" with a test command. Every task passes the Rule of Five before being emitted.
All three modes apply this shared quality standard.
Every task must include:
Test: path:FnName | Cmd: test_cmd | Assert: expected
Read: file1.go:Symbol1, file2.go:Symbol2
Signature: func Name(ctx context.Context, arg Type) (Result, error)
Edges: nil input → ErrInvalid; timeout → context.DeadlineExceeded
| Field | Purpose | Required? |
|---|---|---|
Test: | Test file path and function name | Always |
Cmd: | Command to run verification | Always |
Assert: | What "pass" looks like | Always |
Read: | Exact files and symbols the worker must read | Always |
Signature: | Function/method signatures being implemented | When adding functions |
Edges: | Error conditions and boundary behavior | When non-trivial |
Run 5 passes on every task before emitting. Each pass asks one question:
| Pass | Name | Question |
|---|---|---|
| P1 | Zero Ambiguity | Are signatures, types, and error conditions exact? No "should handle errors appropriately." |
| P2 | TDD Inputs/Outputs | Does acceptance have concrete test data — specific inputs and expected outputs — not vague assertions? |
| P3 | Context Minimization | Does Read: list the exact files and symbols the worker must look at? Nothing more, nothing less? |
| P4 | Boundary Check | If this crosses IPC/RPC/package boundaries, are protocol details and both sides specified? |
| P5 | Adversarial | What would a zero-context worker misunderstand? Fix it. |
If any pass fails, revise the task and re-run from P1.
A task is too large if ANY of these apply:
A task is small enough when ALL of these apply:
Used by Review mode, but also as a checklist for Decompose and Create:
| Smell | Description |
|---|---|
| No acceptance | Task has no Test: / Cmd: / Assert: |
| Vague title | "improve X", "handle edge cases", "clean up" |
Missing Read: | Worker doesn't know what files to look at |
| Stale in_progress | >3 days in in_progress without activity |
| Missing estimate | No time estimate attached |
| Stale dependency | Depends on a closed task (dep should be removed) |
| Oversized | Fails size heuristics but hasn't been decomposed |
Missing Edges: | Non-trivial logic with no error conditions specified |
Takes a spec (markdown doc, user description, or design output from brainstorming) and decomposes it into a task dependency graph.
Extract from the spec:
If spec is vague: ask the user to clarify before decomposing. Don't guess.
oro task create "<feature name>" --type epic \
--acceptance "All child tasks closed. Full quality gate passes." \
--description "<goal from spec>"
For each seam/component, create a task. Apply the full Task Anatomy format:
# Create the child and attach it to the epic. Parentage is hierarchy only.
oro task create "<specific task>" \
--type task \
--parent <epic-id> \
--acceptance "Test: <path>:<FnName> | Cmd: <test_cmd> | Assert: <expected>
Read: <file1>:<Symbol1>, <file2>:<Symbol2>
Signature: <func signature if applicable>
Edges: <error conditions if applicable>" \
--estimate <minutes>
# Wire epic to depend on child (epic closes when children finish)
oro task dep add <epic-id> <child-id>
oro task create --parent does not add dependency edges. Keep the explicit oro task dep add <epic-id> <child-id> edge so the epic waits for its children to close.
Run all 5 passes (P1-P5) on every task before emitting. Revise until all pass.
Check every task against size heuristics. If too large, decompose:
oro task update <id> --type epicoro task create --parent <id>, then oro task dep add <id> <child> for each child the epic must wait fororo task dep add <later-task> <earlier-task>
Common patterns:
oro task show <epic-id>
Present the full tree: epic → children, dependencies, estimates, acceptance criteria.
Proceed to execution automatically. Do not ask for confirmation — the user invoked decompose expecting action, not a gate.
Spec: "Add JWT authentication to the API"
Epic: Implement JWT authentication (oro-001)
├── Task: Define auth types and interfaces (oro-002, 5min)
│ Test: internal/auth/types_test.go:TestTokenClaims | Cmd: go test ./internal/auth/... | Assert: Claims struct has required fields
│ Read: internal/auth/types.go:TokenClaims
│ Signature: type TokenClaims struct { Sub string; Exp time.Time; Iss string }
├── Task: Implement token generation (oro-003, 7min, depends: oro-002)
│ Test: internal/auth/token_test.go:TestGenerateToken | Cmd: go test ./internal/auth/... -run TestGenerateToken | Assert: returns signed JWT with correct claims
│ Read: internal/auth/token.go:GenerateToken, internal/auth/types.go:TokenClaims
│ Signature: func GenerateToken(claims TokenClaims, secret []byte) (string, error)
│ Edges: nil secret → ErrNoSecret; expired claims → ErrExpiredClaims
├── Task: Implement token validation (oro-004, 7min, depends: oro-002)
│ Test: internal/auth/token_test.go:TestValidateToken | Cmd: go test ./internal/auth/... -run TestValidateToken | Assert: validates signature, expiry, issuer
│ Read: internal/auth/token.go:ValidateToken
│ Signature: func ValidateToken(tokenStr string, secret []byte) (*TokenClaims, error)
│ Edges: invalid signature → ErrInvalidSignature; expired → ErrExpired
├── Task: Add auth middleware (oro-005, 7min, depends: oro-003, oro-004)
│ Test: internal/middleware/auth_test.go:TestAuthMiddleware | Cmd: go test ./internal/middleware/... | Assert: rejects invalid tokens with 401, passes valid tokens
│ Read: internal/middleware/auth.go:AuthMiddleware, internal/auth/token.go:ValidateToken
│ Signature: func AuthMiddleware(secret []byte) func(http.Handler) http.Handler
└── Task: Wire middleware to routes (oro-006, 5min, depends: oro-005)
Test: internal/api/routes_test.go:TestProtectedRoutes | Cmd: go test ./internal/api/... | Assert: protected endpoints require valid JWT
Read: internal/api/routes.go:SetupRoutes
For creating a single ad-hoc task with full quality applied.
From the user request, extract:
Write the full Task Anatomy:
oro task list for related work)Run all 5 passes. Revise until clean.
If too large → switch to Decompose mode.
oro task create "<title>" --type <type> --priority <0-4> \
--acceptance "<full anatomy>" \
--estimate <minutes>
Wire dependencies if needed:
oro task dep add <this-task> <depends-on>
Audit existing tasks for quality issues.
oro task list --status=open
oro task list --status=in_progress
For each task, check against:
Present findings grouped by severity:
Critical (blocks execution):
Warning (reduces quality):
Read: fieldInfo (housekeeping):
For each finding, suggest the fix command:
# Add missing acceptance
oro task update <id> --acceptance "Test: ... | Cmd: ... | Assert: ..."
# Decompose oversized task
oro task update <id> --type epic
oro task create "<child1>" --type task ...
oro task update <child1-id> --parent <id>
oro task dep add <id> <child1-id>
# Clean stale dep
oro task dep rm <id> <stale-dep>
Read: field — workers waste time exploring