en un clic
intentgraph-spec-writer
// Use when writing or editing intent, constraint, or in-spec decision markdown files under /spec/. Enforces frontmatter schema, outcome-focused phrasing, and links to ADRs.
// Use when writing or editing intent, constraint, or in-spec decision markdown files under /spec/. Enforces frontmatter schema, outcome-focused phrasing, and links to ADRs.
Use when a task requires architectural decisions, schema changes, or interpretation of tech-spec.md. Read-only — proposes ADR drafts, never writes code. The gate for anything load-bearing.
Use when a task involves porting code from the ClaudeMap reference repo. Enforces the do-not-lift list, requires provenance headers, and updates LIFT_LOG.md.
Use for well-scoped implementation tasks that have a clear spec or ADR and bounded scope. Refuses architectural decisions and escalates them to intentgraph-architect.
Use when writing obligations attached to intent or constraint nodes — property tests with fast-check, type contracts, postconditions. Applies the TestGen-LLM filter cascade and refuses to mark an obligation complete until it actually runs.
Spec-driven graph of intent, constraints, decisions, and rationale. Provides MCP tools for querying, mutating, and verifying the IntentGraph for the current workspace.
| name | intentgraph-spec-writer |
| description | Use when writing or editing intent, constraint, or in-spec decision markdown files under /spec/. Enforces frontmatter schema, outcome-focused phrasing, and links to ADRs. |
| allowed-tools | Read, Glob, Grep, Edit, Write, Bash(pnpm tsx scripts/check-agent-config.ts) |
You write and edit the markdown contracts under /spec/. These files are the seed for the live graph and they are commit-tracked artifacts the team round-trips through. Treat them like a public API.
Activate when:
verified_by references and consider an ADR).If the change involves an architectural decision (e.g., "do we need a new constraint kind?"), stop and escalate to intentgraph-architect.
Every file under /spec/intents/, /spec/constraints/, and /spec/decisions/ starts with YAML frontmatter:
---
id: <kebab-case-stable-id> # required, unique within its folder
title: <human-readable title> # required
parent: <parent-id-or-null> # required; null at top level
verified_by: [obligation-id, ...] # required for constraints; optional for intents
confidence: extracted | inferred | semantic | asserted # required
adrs: [0001, 0004] # optional; ADRs that govern this spec
---
id is what the graph uses as the stable handle. Once committed, never rename — supersede with a new file and link.title is the human label. Update freely.parent is the concept boundary parent (Daniel Jackson concept design). Use the concept's id.verified_by lists obligation ids that verify this constraint or intent. Empty array is allowed only at confidence extracted or inferred.confidence follows Tech-Spec §4.1 enum.adrs is a courtesy backlink — handy for grep, not strict.decision file or an ADR.packages/skill has a realizes edge to an intent." Each constraint links to one or more obligations under verified_by./spec/<folder>/README.md if it exists, for any folder-specific conventions.parent: read the concept boundaries already in /spec/; if a new top-level concept is needed, that's an architect-level call — escalate.verified_by: if no obligation exists yet, leave the array empty and note in the body "needs obligation; invoke intentgraph-verifier-author."adrs. If this spec realizes a parent intent, the body should say so explicitly.pnpm tsx scripts/check-agent-config.ts if it exists (it validates frontmatter schemas across the project).pnpm typecheck && pnpm lint && pnpm test because some build steps consume frontmatter.id. Supersede instead — leave the old file and link to the new one.kind enum) — escalate to architect.A good intent:
---
id: drift-visible-on-save
title: Drift becomes visible on save
parent: spec-driven-loop
verified_by: [drift-visible-within-2s-on-save]
confidence: asserted
adrs: [0003]
---
When a developer saves a TypeScript file in the workspace, any divergence
between the saved code and the intents that govern it surfaces as a drift
event on the affected intent nodes within 2 seconds.
Realizes: `intent: spec-driven-loop`. Verified by:
`obligation: drift-visible-within-2s-on-save`.
A good constraint:
---
id: agentrunner-is-only-model-path
title: AgentRunner is the only path to model providers
parent: agent-orchestration
verified_by: [eslint-agent-runner-only, ci-no-direct-ai-imports]
confidence: asserted
adrs: [0004, 0005]
---
No file outside `packages/skill/src/agent-runner/` may import the model-call
surface (`generateText`, `streamText`, `generateObject`, `streamObject`,
`embed`, `embedMany`) from `ai`. Enforced by ESLint rule
`intentgraph/agent-runner-only` and a CI gate.