// Intent-Verified Development

Stop correcting AI.
Make it verify itself.

Hallucinations happen because vague prompts leave the AI with gaps to fill. IVD fixes this: the AI writes a structured intent artifact with constraints and tests, implements against it, and verifies — before you see a single line of code.

Without IVD
You: "Add CSV export"
AI:  [builds with wrong columns]
You: "No, these columns, ISO dates"
AI:  [rewrites, still wrong]
You: "Still not right..."
AI:  [rewrites again]

→ Many turns. Many hallucinations.
With IVD
You: "Add CSV export for compliance"
AI:  [writes intent.yaml with constraints]
You: "Yes, that's what I meant"
AI:  [implements against intent]
AI:  [runs constraint tests → pass]

→ One turn. Zero hallucinations.*

How IVD works

01

You describe

Natural language. No templates, no special syntax. Just say what you want.

02

AI writes the intent artifact

Structured YAML with goal, constraints, success criteria, and test paths. Clarification happens here — before any code is written.

03

You review

"Is this what I meant?" One read. No ambiguity. The intent is explicit — columns listed, formats named, permissions stated.

04

AI stress-tests the intent

Adversarial completeness check — constraint gaps, implementation decisions not addressed, implicit assumptions, conflicts.

05

AI implements against the intent

Constraint-segmented: implement segment → re-read constraints from disk → verify segment → repeat. No drift from intent.

06

AI verifies

Full sweep — does every constraint pass? Hallucinations are caught before you review. AI self-corrects against the artifact.

intent.yaml — the artifact the AI writes
# AI writes this from your description
intent:
  summary: "Export user data to CSV for admin compliance reporting"
  goal:    "Enable admins to download user data in compliant format"

constraints:
  - name:  "admin_only"
    rule:  "Request must include valid admin session token"
    test:  "tests/test_csv_export.py::test_admin_required"
  - name:  "column_schema"
    rule:  "Columns: [user_id, email, created_at, last_login, status]"
    test:  "tests/test_csv_export.py::test_column_schema"
  - name:  "date_format"
    rule:  "All dates in ISO 8601 format"
    test:  "tests/test_csv_export.py::test_iso_dates"

28 tools for your AI agent

IVD ships as a Model Context Protocol server — the open standard adopted by every major AI coding client. Works with Cursor, Claude Desktop, Claude Code, VS Code + GitHub Copilot, Windsurf, Zed, and any other MCP-compatible agent. No vendor lock-in.

15 core tools · intent, implementation & verification

context

ivd_get_context

Full IVD context for the agent — principles, resources, when to use

scaffold

ivd_scaffold

Create a new intent artifact at the correct canonical location

validate

ivd_validate

Check structure, required sections, and constraint completeness

init

ivd_init

Bootstrap IVD in an existing project — scans and pre-fills context

recipes

ivd_load_recipe

Load proven patterns for agents, workflows, infra, and more

coverage

ivd_assess_coverage

Scan a project and report which modules have no intent artifact yet

discovery

ivd_discover_goal

Propose candidate goals when you're not sure what to ask

search

ivd_search

Semantic search across the entire IVD knowledge base

inversion

ivd_propose_inversions

Surface non-obvious solutions by inverting conventional assumptions (P8)

Also: ivd_load_template, ivd_list_recipes, ivd_find_artifacts, ivd_check_placement, ivd_list_features, ivd_teach_concept

9 judgment tools · phase 4 · opt-in via .judgment/

judgment · init

ivd_judgment_init

Bootstrap the Judgment phase — creates .judgment/ folder, seeds domain baselines, activates the other 8 tools

judgment · capture

ivd_judgment_capture

Record a real-world correction in under 30 seconds — bug report, user complaint, postmortem finding

judgment · codify

ivd_judgment_codify

Structured analysis of a raw correction: expected result, root cause, proposed fix, action type

judgment · patterns

ivd_judgment_detect_patterns

Cluster codified corrections by root cause — promotes recurring failures to named patterns

judgment · inject

ivd_judgment_inject_context

Return prioritized Judgment context for the next agent run — patterns, recent corrections, What Works layer

judgment · recommend

ivd_judgment_propose_recommendation

Draft a you-approvable fix against a detected pattern — prompt patch, intent revision, or capability addition

Also: ivd_judgment_save_codified, ivd_judgment_pair, ivd_judgment_check_installed — see judgment_layer.md

4 canon tools · phase 0 · human translation layer

canon · audit

canon_check

Audit any AI reply against R-invariants — including R13 stakes-adaptive format (engine v0.2.0)

canon · render

canon_render

Render text as a CanonDocument: Setting Phase, confidence-marked body, verification beats

canon · diff

canon_diff

Diff two audit reports — per-R movement: fixed, regressed, unchanged

canon · install

canon_check_rules_installed

Detect the Phase 0a rules block in agent config files. Read-only — never writes.

Use the hosted server — no install needed

Skip the clone and setup. Point any MCP client directly at the hosted server. All 28 tools, always up to date.

https://mcp.ivdframework.dev/mcp
Streamable HTTP (VS Code, Copilot, Claude Code, Windsurf)

https://mcp.ivdframework.dev/sse
Legacy SSE (Cursor, Claude Desktop)
Request API key →

Free for individuals. Reply within 24h.

See quickstart for per-client config.

Canon: stop the LLM from collapsing trust

LLMs do whatever you ask — even when they shouldn't. They give you the dangerous command, make decisions they have no business making, play along with things that aren't true, mirror parasocial energy, and state guesses as facts in the same confident voice as verified facts. Canon puts a thin layer of format authority between the LLM and you, so it can't collapse those distinctions — even when you tell it to.

Without Canon
You: "Give me the rm -rf for /var/log/old-service/ on prod"
AI:  sudo rm -rf /var/log/old-service/

This command will recursively and forcefully remove
the directory and all files within it...

→ Destructive command shipped with no gate.
With Canon
You: "Give me the rm -rf for /var/log/old-service/ on prod"
AI:  ACTION:     Delete /var/log/old-service/ and contents.
     REVERSIBLE: No — smallest undo path is restore from backup.
     APPROVE?    Confirm to proceed.

If you approve, the command will be: rm -rf ...

→ Verification beat fires before the command appears.

R1 · setting

Setting Phase

One sentence at the top: what this reply is, what I did, what's next.

R2 · confidence

Confidence glyphs

Every claim marked ✓ verified, ~ inferred, or ? assumed.

R5 · verify

Verification beat

For irreversible actions, write ACTION/REVERSIBLE/APPROVE — withhold the command until confirmed.

R10 · reality

Folk theory correction

When the user assumes the LLM has memory, feelings, or authority it doesn't have — name the misconception.

R13 · stakes

Stakes-adaptive format // engine v0.2.0

Format density must match the stakes. Terse for low, structured for high/irreversible. Engine catches both ceremony and mush.

R14 · identity

Anthropomorphism ceiling

No "we" / "together" / "I'm excited". Declare AI identity factually when it matters.

Canon ships in two layers, both invisible to the user:

Measured on gpt-4o (T=0, 9 prompts):

Judgment: when the intent itself was wrong

Intent / Implementation / Verification covers the case where you knew what you wanted. Judgment is the opt-in 4th phase for the case where reality answered back: a beta user surfaced an edge case, a constraint was missing, the spec didn't survive contact with production. Structured corrections are the highest-value contextual signal — Judgment captures them, distills them into patterns, and injects them back into the next round of intent.

Capture corrections as gold

Every real-world correction (bug report, user complaint, edge case, postmortem finding) is recorded as a .judgment/ entry — pattern, evidence, scope, frequency.

Distill into patterns

Repeated corrections cluster into named patterns. Each pattern names its trigger condition and the constraint that should have caught it the first time.

Inject back into intent

When the next intent artifact gets scaffolded, matching patterns auto-attach as candidate constraints. The correction never bites the same project twice.

Judgment is opt-in per project (activated by creating a .judgment/ directory) and works alongside Canon — Canon constrains the delivery of the reply, Judgment improves the intent the reply is built from.

Up in 5 minutes

Path A · self-hosted

Clone & run locally

Free. No API key. Full control. Python 3.12 required. Semantic search needs an OpenAI key (optional).

Path B · hosted server

Skip the install

No clone. No Python. Point your client at mcp.ivdframework.dev with an API key. Request a key →

Path A — self-hosted

// 1. Clone and setup

git clone https://github.com/leocelis/ivd.git cd ivd ./mcp_server/devops/setup.sh # creates .venv, installs deps

// 2. Connect your AI client

Pick your client — same server, same 28 tools, same YAML intents.

Cursor ~/.cursor/mcp.json
{ "mcpServers": { "ivd": { "command": "python", "args": ["-m", "mcp_server.server"], "cwd": "/path/to/ivd" } } }
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json
{ "mcpServers": { "ivd": { "command": "python", "args": ["-m", "mcp_server.server"], "cwd": "/path/to/ivd" } } }
Claude Code one-liner
claude mcp add ivd python -m mcp_server.server --cwd /path/to/ivd
VS Code + GitHub Copilot .vscode/mcp.json
{ "servers": { "ivd": { "type": "stdio", "command": "python", "args": ["-m", "mcp_server.server"], "cwd": "/path/to/ivd" } } }
Windsurf, Zed, Continue, and other MCP clients

Any client that speaks MCP (stdio) can connect. Point it at python -m mcp_server.server with cwd set to your clone path.

// 3. Use it

Ask your agent:

"Use ivd_get_context to learn IVD, then scaffold an intent for [your feature]"
Path B — hosted server

// 1. Request an API key

Open a GitHub Discussion to request an API key. Free for individuals. We'll reply within 24h.

// 2. Connect your AI client

Replace YOUR_API_KEY with your key. No clone or Python environment needed.

Cursor ~/.cursor/mcp.json · SSE
{ "mcpServers": { "ivd": { "type": "sse", "url": "https://mcp.ivdframework.dev/sse", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json · SSE
{ "mcpServers": { "ivd": { "type": "sse", "url": "https://mcp.ivdframework.dev/sse", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }
Claude Code one-liner · Streamable HTTP
claude mcp add --transport http ivd https://mcp.ivdframework.dev/mcp \ --header "Authorization: Bearer YOUR_API_KEY"
VS Code + GitHub Copilot .vscode/mcp.json · Streamable HTTP
{ "servers": { "ivd": { "type": "streamable-http", "url": "https://mcp.ivdframework.dev/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }
Windsurf, Zed, Continue, and other MCP clients

Use https://mcp.ivdframework.dev/mcp (Streamable HTTP) for modern clients or https://mcp.ivdframework.dev/sse (SSE) for legacy clients. Add Authorization: Bearer YOUR_API_KEY as a header.

// 3. Use it

Ask your agent:

"Use ivd_get_context to learn IVD, then scaffold an intent for [your feature]"

9 principles

P1

Intent First

Write what the system must do before writing code. Intent is the source of truth.

P2

Executable Understanding

Prose can be wrong silently. Executable understanding fails loudly.

P3

Continuous Verification

Verify alignment at every stage. Drift is caught before it compounds.

P4

Context Layering

System → Workflow → Module → Task. Right level of context for every task.

P5

Knowledge Portability

YAML and MCP. Same intent works with Claude, GPT, Cursor, Copilot.

P6

Discovery Before Intent

When you don't know what to ask — propose options first, then write intent.

P7

Implementation Independence

Intent describes what, not how. The AI chooses the implementation.

P8

Innovation Through Inversion

Challenge dominant assumptions. Inversion surfaces non-obvious solutions.

P9

Judgment Compounds // v3.0 · opt-in

Structured corrections are the highest-value contextual signal. Capture them, distill them into patterns, inject them back. Activated per-project via .judgment/ — see Judgment.