Account
—
Runs left 0

Your coding agent gets stopped at the boundary, not told about it

Write down what the project will not do. One hook stops Claude Code, Cursor, Codex, Windsurf and Copilot before the tool call runs, and names the boundary. No account, no telemetry: the log stays in your repository.

Get the guard free
or with one command npx skills add momonanq/lumis-skills --skill lumis-scope-guard --global

77 attempts to rewrite the guard through an agent: 69 refused, the other 8 named one by one. Check it yourself

LUMIS studio: the new Blueprint form, the project boundaries and the remaining runs The /guard page: the Non-Goals form and the file list of the free guard pack Public scope passport of a project: the SHA-256 signature and the check status Project list: hash lock, number of Non-Goals and of locked decisions for each
Risks challenged & ruled on
8
in the RentGuard demo
source: the public RentGuard demo blueprint · run of 2026-09-03
Non-Goals locked
5
SHA-256: 0c78119843
source: the public RentGuard demo blueprint · run of 2026-09-03

An agent reads a rule in prose. A hook enforces it.

The same boundary in two shapes: a paragraph in an instruction, and a hook in the repository.

A rule in prose the agent reads it and decides
  • A boundary you can read and walk past: the ban lives in text; nothing stops the tool call.
  • No trace is left: you cannot see whether the agent went near the boundary, or how often.
  • Nothing to point at a month later: where the decision is written down, and who made it, is unknown.

Stops: nothing · no log

The boundary as a hook exit 2
  • The call is refused, not discussed: the hook exits 2 and the client does not run the command — that is what the recording below shows.
  • Every trigger lands in the log: .lumis/guard.log remembers the boundary, the agent and what it tried to do.
  • Only Amend lifts a boundary: the constitution and the hook are rebuilt together, and the decision goes into the decision log.

Five AI clients — one hook · 2 runs free

source: recording by scripts/record_block.py, agents scenario · 2026-09-07

Diagram: two lines leave the same point — the plan runs straight to the end, the actual work drifts upward; an amber cut marks where they parted
Plan and reality part from the minute a boundary is not locked.

Cost of Drift calculator

What it costs to redo what the AI agent built outside a scope that was never locked.

Lost per month
$1 040
Pro Founder: 40 runs
$49

—

One boundary. Five agents.
The same refusal.

The Non-Goal “no rent payment collection” becomes a hook. Claude Code, Cursor, Codex CLI, Windsurf and Copilot each get their own refusal shape and stop on exit code 2.

Diagram: the idea goes to the four roles of the consilium, and their rulings converge into one locked boundary contract
  1. 1You describe the idea and what the product will not do.
  2. 2Four roles argue it into a PRD, an architecture, a roadmap and a master prompt.
  3. 3The boundaries leave for the repository as hooks: a call across a boundary is not executed, it lands in .lumis/guard.log.
rentguard — LUMIS scope guard · one hook, five agents
Claude Code › Bash: pip install stripe   (.claude/settings.json → PreToolUse)
  hook → BLOCKED (exit 2) — the tool call never runs
  ⛔ LUMIS Scope Guard blocked this change (CONSTITUTION.md, Article I — Non-Goals): forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I). The boundary can be lifted only by the founder (LUMIS Amend / a new consilium run), never by bypassing the hook.
 
… Cursor, Codex CLI, Windsurf / Cascade, Copilot in VS Code — the same call, each client's own payload, the same exit 2 …
 
$ python scripts/scope_guard.py report
  LUMIS Scope Guard — 5 events in .lumis/guard.log
    blocked: 5 · asked: 0 · inspected: 0 · warned: 0 · drift prompts: 0 · agents: claude, codex, copilot, cursor, windsurf
Show all 5 log events
    2026-09-09T10:16:02+00:00 blocked [claude] Bash: forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I)
    2026-09-09T10:16:02+00:00 blocked [cursor] Bash: forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I)
    2026-09-09T10:16:02+00:00 blocked [codex] Bash: forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I)
    2026-09-09T10:16:02+00:00 blocked [windsurf] Bash: forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I)
    2026-09-09T10:16:02+00:00 blocked [copilot] Bash: forbidden dependency 'stripe', Non-Goal keyword 'stripe' → NG-1 "No rent payment collection, insurance or financial guarantees" (set by the founder; CONSTITUTION.md, Article I)
Real output from scripts/scope_guard.py. The recording is made by scripts/record_block.py: it builds the same ZIP a user downloads, unpacks it and calls the hook exactly the way each client does. Nothing is drawn.

⚡ Instant start from a preset

Boundaries and stack are pre-filled — change them if you need to

Works with your AI IDE

The Blueprint exports into formats your editor understands without adapters.

curCursor
ccClaude Code
vsVS Code
wsfWindsurf
spkSpec-Kit
jbJetBrains
  • .cursorrules + MASTER_PROMPT.md — paste into Composer and press Generate
  • .claude/settings.json, .cursor/hooks.json — the hook stops the tool call at the boundary instead of asking the agent to remember it
  • .specify/ — compatible with GitHub Spec-Kit (constitution, spec, plan, tasks)
  • Starter repository (.zip) with a one-line CLI bootstrap

Transparent pricing

One project — one credit. No surprises.

  • No credit card
  • Free sign-up
  • First result in 5 minutes

source: end-to-end studio runs on Gemini, 2.5 and 3.5 minutes · 2026-09-03

Frequently asked questions

Is this a subscription or a one-time payment?

One-time. A pack of runs is bought once and does not renew itself: LUMIS charges nothing on a schedule. The terms are in the public offer.

What happens to my code and my data?

Your texts and files are not used to train models: the Zero Training policy is written out in the privacy policy. The guard pack runs locally in your repository, and .lumis/guard.log is never sent anywhere.

Can I get a refund?

Yes, on the terms written in the refund policy, which also says what exactly is returned and within what period.

Do I need a card for the free runs?

No. Signing up grants 1 run right away and 1 more after you confirm your e-mail; no card is asked for and no payment form opens.

Which clients stop the call instead of merely reading the rule?

Claude Code, Cursor, Codex CLI, Windsurf and Copilot in VS Code — the pack writes a hook config for each, and a call past the boundary gets exit code 2. Other editors get the same boundaries as text (.cursorrules, CLAUDE.md, AGENTS.md).

source: recording by scripts/record_block.py, agents scenario · 2026-09-07

Ready to build a product
without scope creep?

Your first 2 runs are free: 1 right away, 1 after you confirm your e-mail. No card needed.