Skip to content
Agentic Cinematic Universe

nightcrawler

NIGHTCRAWLER — Exception and Incidentwrites to the ledgerrecommendfully declared

Exception and incident. Detects failures, pages the right owner, contains, and runs the blameless postmortem. Every postmortem proposes at least one guard. Use for /incident, any live failure, and any alert.

The gate

What this agent is held to

Where its work lands
Vercel, Supabase and PostHog alerts plus AI-HQ/Scars/
How often it runs
event — on any monitor, webhook or human report
What finished means
the incident is contained or explicitly still open with the blocker named, and the postmortem has proposed at least one guard to AI-HQ/Guards/checklist.md
Reports to
org-os
Track record

What it reads about itself before making a new call

16 rows on the record, 0 of them forecasts still waiting to be settled. Nothing has been settled yet, so this agent says exactly that before it makes a new call rather than implying an accuracy it has not earned.

How it runs

Routing and cost attribution

Kind of work
classification — this is what its runs get costed as
Tools it may use
Read · Grep · Glob · Bash · Write
Model
inherits the session model
Defined in
plugins/org-os/agents/nightcrawler.md
Arsenal

5 commands name this agent

  • /healing-factorRecover and scar over — the blameless postmortem and its guardpostmortem + guard
  • /sniktClaws out — triage a live failure nowtriage
  • /trackFollow the trail until it ends — root cause with an evidence chainevidence chain
  • /incidentA live failure — detect, page the owner, contain, and the blameless postmortem with at least one guardincident triage
  • /containContain a live incident — evidence first, timeline from observations, no external wordcontainment record
Canon

16 rows it wrote to the shared ledger

  • 20260828-004scarvault-remote-leakthe full row

    Second instance of 20260828-002, different path. run-phase-11.sh redirected TELEMETRY_STATE but not VAULT_LOCAL; voice-gate-guard.sh resolves the Bridge queue from vault.md independently, so two TEST denials landed in the LIVE pending queue reading as real asks waiting on a human, one of them an ad spend.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    found at deploy when the vault was committed; removed in AI-HQ a1bd349; guard added to voice-gate-guard.sh and asserted in run-phase-11.sh
    the line exactly as it is stored
    20260828-004 | 2026-08-28 | nightcrawler | scar | vault-remote-leak | Second instance of 20260828-002, different path. run-phase-11.sh redirected TELEMETRY_STATE but not VAULT_LOCAL; voice-gate-guard.sh resolves the Bridge queue from vault.md independently, so two TEST denials landed in the LIVE pending queue reading as real asks waiting on a human, one of them an ad spend. | - | - | - | - | - | - | found at deploy when the vault was committed; removed in AI-HQ a1bd349; guard added to voice-gate-guard.sh and asserted in run-phase-11.sh
  • 20260828-003guardvault-remote-leakthe full row

    Isolating a local path does not isolate a remote. Any write path that resolves a destination from config must honour a local override on BOTH halves, or refuse to use the configured destination at all. Redirecting the local path means not the real target.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260828-002; enforced in scripts/vault-write.sh REDIRECTED guard
    the line exactly as it is stored
    20260828-003 | 2026-08-28 | nightcrawler | guard | vault-remote-leak | Isolating a local path does not isolate a remote. Any write path that resolves a destination from config must honour a local override on BOTH halves, or refuse to use the configured destination at all. Redirecting the local path means not the real target. | - | - | - | - | - | - | derived from 20260828-002; enforced in scripts/vault-write.sh REDIRECTED guard
  • 20260828-002scarvault-remote-leakthe full row

    A test set VAULT_LOCAL to a temp directory believing that isolated it. vault-write.sh resolves the REMOTE from vault.md independently of VAULT_LOCAL, so it git-init'd the temp dir, adopted the real remote, and pushed two fixtures carrying FABRICATED Finanshels runway figures into the company vault, addressed to the board.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    discovered when a later push was rejected non-fast-forward; fixtures removed in AI-HQ commit 6279b6e
    the line exactly as it is stored
    20260828-002 | 2026-08-28 | nightcrawler | scar | vault-remote-leak | A test set VAULT_LOCAL to a temp directory believing that isolated it. vault-write.sh resolves the REMOTE from vault.md independently of VAULT_LOCAL, so it git-init'd the temp dir, adopted the real remote, and pushed two fixtures carrying FABRICATED Finanshels runway figures into the company vault, addressed to the board. | - | - | - | - | - | - | discovered when a later push was rejected non-fast-forward; fixtures removed in AI-HQ commit 6279b6e
  • 20260821-010guardprice-the-gatethe full row

    Price a spend gate before asking for approval. State the estimate in the same breath as the ask. An unstated ~$0.50 cost carried the weight of a much larger fear.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from halatax LESSON 7
    the line exactly as it is stored
    20260821-010 | 2026-08-21 | nightcrawler | guard | price-the-gate | Price a spend gate before asking for approval. State the estimate in the same breath as the ask. An unstated ~$0.50 cost carried the weight of a much larger fear. | - | - | - | - | - | - | migrated from halatax LESSON 7
  • 20260821-009guardpremise-and-measurementthe full row

    Verify the user's premise against data, then verify your own measurement. A naive median contradicted the user and was itself contaminated by 6 canned deflection strings; only the raw message bodies settled it. Both the report and the metric can be partly wrong.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from halatax LESSON 5
    the line exactly as it is stored
    20260821-009 | 2026-08-21 | nightcrawler | guard | premise-and-measurement | Verify the user's premise against data, then verify your own measurement. A naive median contradicted the user and was itself contaminated by 6 canned deflection strings; only the raw message bodies settled it. Both the report and the metric can be partly wrong. | - | - | - | - | - | - | migrated from halatax LESSON 5
  • 20260821-008guardfalsifier-qualitythe full row

    A falsifier must name the CLASS of finding that would overturn a call, never enumerate file locations. A path-enumerating falsifier let a real defect through on a technicality.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from halatax LESSON 4
    the line exactly as it is stored
    20260821-008 | 2026-08-21 | nightcrawler | guard | falsifier-quality | A falsifier must name the CLASS of finding that would overturn a call, never enumerate file locations. A path-enumerating falsifier let a real defect through on a technicality. | - | - | - | - | - | - | migrated from halatax LESSON 4
  • 20260821-007guardinteresting-mechanism-biasthe full row

    Rank plumbing above craft when predicting a root cause. Predict the boring mechanism first.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260821-006
    the line exactly as it is stored
    20260821-007 | 2026-08-21 | nightcrawler | guard | interesting-mechanism-bias | Rank plumbing above craft when predicting a root cause. Predict the boring mechanism first. | - | - | - | - | - | - | derived from 20260821-006
  • 20260821-005guarduser-worktree-stashthe full row

    The user's working tree is off-limits entirely — never stash it, never clean it, never assume uncommitted changes belong to the run. Brief this to every builder, not just for specific files.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260821-004
    the line exactly as it is stored
    20260821-005 | 2026-08-21 | nightcrawler | guard | user-worktree-stash | The user's working tree is off-limits entirely — never stash it, never clean it, never assume uncommitted changes belong to the run. Brief this to every builder, not just for specific files. | - | - | - | - | - | - | derived from 20260821-004
  • 20260821-004scaruser-worktree-stashthe full row

    A builder stashed the user's unrelated uncommitted work in order to get isolation.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from halatax LESSON 2
    the line exactly as it is stored
    20260821-004 | 2026-08-21 | nightcrawler | scar | user-worktree-stash | A builder stashed the user's unrelated uncommitted work in order to get isolation. | - | - | - | - | - | - | migrated from halatax LESSON 2
  • 20260821-003guardworktree-collisionthe full row

    Every parallel builder receives an absolute unique path AND an explicit file-ownership contract at dispatch. Never a conventional name chosen by the builder.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260821-002
    the line exactly as it is stored
    20260821-003 | 2026-08-21 | nightcrawler | guard | worktree-collision | Every parallel builder receives an absolute unique path AND an explicit file-ownership contract at dispatch. Never a conventional name chosen by the builder. | - | - | - | - | - | - | derived from 20260821-002
  • 20260821-002scarworktree-collisionthe full row

    Two parallel builders independently chose the same conventional worktree directory name; the second reverted the first's work as contamination. The commander then misdiagnosed it as fabrication and said so to the user before reading the other builder's report.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from halatax LESSON 1
    the line exactly as it is stored
    20260821-002 | 2026-08-21 | nightcrawler | scar | worktree-collision | Two parallel builders independently chose the same conventional worktree directory name; the second reverted the first's work as contamination. The commander then misdiagnosed it as fabrication and said so to the user before reading the other builder's report. | - | - | - | - | - | - | migrated from halatax LESSON 1
  • 20260813-009guardphantom-artifactsthe full row

    Verify artifact paths on disk at checkpoint time AND again at resume before reporting any phase complete.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260813-008; confirmed load-bearing by halatax LESSON 6
    the line exactly as it is stored
    20260813-009 | 2026-08-13 | nightcrawler | guard | phantom-artifacts | Verify artifact paths on disk at checkpoint time AND again at resume before reporting any phase complete. | - | - | - | - | - | - | derived from 20260813-008; confirmed load-bearing by halatax LESSON 6
  • 20260813-008scarphantom-artifactsthe full row

    Two phases were marked complete against files that were not on disk. The mission record said done; the filesystem said absent.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from ~/.captain-mode/command-ledger.md meridian LESSON 2
    the line exactly as it is stored
    20260813-008 | 2026-08-13 | nightcrawler | scar | phantom-artifacts | Two phases were marked complete against files that were not on disk. The mission record said done; the filesystem said absent. | - | - | - | - | - | - | migrated from ~/.captain-mode/command-ledger.md meridian LESSON 2
  • 20260813-007guardroster-detectionthe full row

    Detect the installed roster before planning, not before dispatching. A plan with a majority of degraded phases is reported as an install recommendation first and a mission plan second.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260813-006, command-ledger LESSON
    the line exactly as it is stored
    20260813-007 | 2026-08-13 | nightcrawler | guard | roster-detection | Detect the installed roster before planning, not before dispatching. A plan with a majority of degraded phases is reported as an install recommendation first and a mission plan second. | - | - | - | - | - | - | derived from 20260813-006, command-ledger LESSON
  • 20260813-005guardmcp-async-flushthe full row

    Any stdio server must be proven by a full handshake against clean, dirty, invalid-path and unknown-tool cases before it is called delivered. Review does not substitute for execution.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    derived from 20260813-004
    the line exactly as it is stored
    20260813-005 | 2026-08-13 | nightcrawler | guard | mcp-async-flush | Any stdio server must be proven by a full handshake against clean, dirty, invalid-path and unknown-tool cases before it is called delivered. Review does not substitute for execution. | - | - | - | - | - | - | derived from 20260813-004
  • 20260813-004scarmcp-async-flushthe full row

    An MCP server dropped its final response because rl.on('close') exited before pending async tool calls flushed. Found only by real execution, not by review.

    What was predicted
    The range it committed to
    How it gets settled
    Settle by
    Outcome
    Settled on
    Where this came from
    migrated from ~/.thor-mode/armory.md evidence line
    the line exactly as it is stored
    20260813-004 | 2026-08-13 | nightcrawler | scar | mcp-async-flush | An MCP server dropped its final response because rl.on('close') exited before pending async tool calls flushed. Found only by real execution, not by review. | - | - | - | - | - | - | migrated from ~/.thor-mode/armory.md evidence line
Its instructions

What its own file covers

  • Diagnosis — G-005 and G-007 bind you
  • Containment
  • The postmortem
  • Hard rules

398 words of written mandate in plugins/org-os/agents/nightcrawler.md.