<!-- public/install/cognition-stub.md -->
<!-- Cognition v1 stub - auto-updating. Do not edit. -->
<!-- Replacing this file: curl -fsSL https://www.cognitionus.com/install/cognition-stub.md > ~/.claude/rules/cognition.md -->

# Cognition (auto-updating stub - do not edit)

Stub version: 1.7.15

On session start, call the MCP tool `get_pedagogy_instructions` from the
cognition server, passing:

- `client_stub_version: "1.7.15"`
- `host`: `claude`, `codex`, `cursor`, `gemini`, or `generic` when known
- `intent_text`: the user's first message or a one-line task summary
- `intent_paths`: open files, repo paths, or the working directory

Treat the returned `instructions` field as your operating instructions
for everything related to the Cognition team brain for this session. This hosted
instruction payload is the source of truth for current Cognition product
behavior, including team skills, cognitive circuits, neurons, decision
patterns, skill-capture rules, user voice/directive contracts, and the
curiosity question policy returned by `cognition_assist`.

If the response includes `self_update.agent_announcement.show: true`,
begin the next user-facing response with "Cognition updated.", show the
bullets in `self_update.agent_announcement.bullets`, then continue the
user's task. Show this once per session, only when `show` is true.
When `self_update.agent_announcement.server_delivery_receipt.persistence.persisted`
is true, treat the server receipt as the durable once-per-user/key/host
delivery record and do not repeat the same update unless the server asks.
Use `self_update.product_update` only for detailed release notes or
upgrade-copy context; the announcement bullets are the short user-facing
notice.

Hosted MCP behavior updates automatically for existing users. They do
not need a new key for server-side product changes. If the response also
includes `self_update.update_available: true`, ask the user before
editing local instructions. If they approve and
`self_update.host.upgrade_command` exists, run that keyless command so
existing installs refresh the managed block, hooks, and verification. If
no upgrade command is available, replace only the text between
`COGNITION_CLO_RULE_START` and `COGNITION_CLO_RULE_END` with
`self_update.managed_block`; preserve all other user-authored text.

If `self_update.host.tool_loading.defersTools: true`, load or confirm
every tool in `self_update.host.tool_loading.coreToolsToPreload` before
routing plain-English Cognition requests or `/cognition` commands. Codex,
Claude Code, and Gemini can hide slash prompts or lazy-load MCP schemas;
the command still works when the agent calls the mapped Cognition tool
directly.

If the user says "Start Cognition", "set up Cognition", "make Cognition
active", `/cognition start`, or `/cognition setup`, call `cognition_start`
first. Treat it as the one-call startup spine: show the active state,
proof card, and single next action, then use deeper Cognition tools only
when that next action asks for them.

Existing Codex users can run:

```sh
curl -fsSL https://www.cognitionus.com/api/install/codex-upgrade | sh
```

Existing Claude Code users can run:

```sh
curl -fsSL https://www.cognitionus.com/api/install/claude-upgrade | sh
```

Existing Cursor users can run:

```sh
curl -fsSL https://www.cognitionus.com/api/install/cursor-upgrade | sh
```

Existing Gemini CLI users can run:

```sh
curl -fsSL https://www.cognitionus.com/api/install/gemini-upgrade | sh
```

Any host can use the universal keyless updater, which auto-detects the
local agent and refreshes the managed block + verifies the tool registry:

```sh
curl -fsSL https://www.cognitionus.com/api/install/cognition-update | sh
```

New users should use the normal `/start` setup or install scripts; those
download the latest product ops proof and review flow by default.

Inspect on demand: Cognition is hands-off by default but fully inspectable.
If Cognition looks stale or is missing tools, call the `cognition_update`
tool (or run `/cognition update`); it reports hosted vs local versions,
the available tool count, any missing required tools, product-ops migration
status, and the next action without minting a new key. Users can type
`/cognition`, `/cognition start`, `/cognition skills`, `/cognition triggers`, `/cognition tools`,
`/cognition stats`, `/cognition health`, `/cognition what-did-you-use`,
`/cognition privacy`, `/cognition retrieval-eval`, `/cognition dictation`,
or just ask in plain
English; typing `/` should reveal Cognition commands and the user's skills.

Dictation routing: "set up dictation", "turn on voice input", "my hotkey
does nothing", and "the recording came back empty" all map to
`cognition_dictation_setup`. Route the symptom phrasings there too: the two
macOS permissions dictation depends on fail silently (without Accessibility
the hotkey does nothing at all; without Microphone macOS supplies an empty
input device instead of refusing), so a stuck user describes the symptom and
never names the feature.

Current update (Confidence that earns its name):
How sure Cognition is about a matched skill is now checked against what
actually happened afterwards, per confidence level and per risk level, and
the performance report shows whether high confidence meant the skill helped.
Whether a match is applied directly or offered as a suggestion now follows
each workspace's own outcomes and the error its risk level tolerates.
Without enough evidence nothing changes. Regulated and production work only
get stricter and count only outcomes observed from tests, merges, deploys or
a person. One workspace's outcomes never set another's.

Still active from 1.7.14 (clinical checks hold the line):
Unavailable or stale governance blocks release, automatic repair respects
holds, and returned and saved receipts reflect the final local decision.
The clinical decision-support adapter binds the note and supplied source to
the requested patient and encounter. Ambiguous, mismatched or unreadable
input returns Not checked before checks or writeback. Privacy fallbacks use
scrubbed visit reasons and refuse a missing dictionary.
Hosted changes arrive with this release. Customer-managed clinical SDKs and
runners must adopt the updated code to receive their local changes.
These changes do not establish clinical accuracy, compliance or safety to
sign. Site validation and clinician review remain required.

Still active from 1.7.13 (Help where you work):
A Support button answers common questions in place on the dashboard and
during setup, and files a problem report with an optional screenshot.
Reports keep keys, passwords and patient details out, an interrupted report
is never filed twice, and the user gets a reference to quote. A dashboard
left open in a tab says when a newer version is ready and reloads only on a
click. Every release passes the full test suite before it goes live.

Still active from 1.7.12 (hallucination checks):
Clinical checks now catch what a note adds, not only what it leaves out.
Every check says whether the note was checked for content its source does
not support, so a note nobody checked is never reported as clean. Notes can
be checked against the patient's chart as well as the conversation, and a
repaired draft may not fill a gap by inventing it. A site can calibrate one
guaranteed rate for unsupported claims and missed requirements, under a
published review standard. Everything runs where the notes are.

Still active from 1.7.11 (update alerts):
Cognition tells the user when Cognition changes. The first message of a
session shows what is new since the last one. A release that ships during a
session shows up within a few minutes, on the user's next message, once. If the machine is behind,
the same line says the update is installing in the background or, on an
install that does not update itself yet, gives the one command to run. When a
background update finishes mid-session, a quiet line says Cognition updated.

Still active from 1.7.10 (always up to date):
Cognition keeps the files on this machine current by itself. At the start of
a session, at most every six hours, it checks for a newer release and installs
it in the background, so the session never waits. It runs only updates Lamlab
signed: each one is checked against a signature before anything runs, and an
update that is unsigned, changed or signed by anyone else is refused and
logged. In Codex, approve Cognition's session hook once in /hooks. Set
COGNITION_AUTO_UPDATE=0 to turn it off. Hosted behaviour already updates for
everyone as soon as it ships; this covers what lives locally.

Still active from 1.7.9 (at home in your terminal):
Cognition has its own look inside the tools the user already runs. In Claude
Code 2.1.290 and later it arrives as a Claude Code add-on: a quiet band above
the prompt shows the workspace and what Cognition just did, Cognition's tool
calls read as a verb and a result, the spinner says what Cognition is doing, a
toast appears when the brain learns something durable, and /cognition-panel
opens a view of the session. The update banner is one quiet line most
sessions, with the brain mark and the release beside it only on a new
release. In Gemini CLI a line at session start says Cognition is on, and a
Cognition Aqua theme is offered in /theme without changing the user's own.
Older Claude Code keeps the status line and receipts. The new look arrives
when the installer runs again.

Still active from 1.7.8 (skills live in your brain):
When the user asks for a skill, save it to the Cognition brain with
`cognition_save_skill`, with everything the skill needs written into its
body, so every agent, host and workspace the user connects loads it,
including new workspaces. Do not write it into a host skill folder such as
`~/.claude/skills`, `~/.codex/skills`, `~/.cursor/skills` or
`~/.gemini/skills`, and do not split its content into local files that the
body points to: a skill like that exists on one machine and in one tool.
`cognition_save_skill` refuses a body that depends on files in a host skill
folder. Write a local copy only when the user explicitly asks for one; the
brain copy stays the source of truth. That part is server-side.

Cognition also has one look in Claude Code: the update banner, the status
line, the line under each Cognition call and the checkpoint reminder share an
aqua-cyan accent, and the brain mark in the banner is solid and no longer has
its top cut off. NO_COLOR turns the colour off. The new look arrives when the
installer runs again.

Still active from 1.7.6 (checks that know their limits):
Clinical checks now state how often a missed problem can get past a lighter
review, with a guarantee measured on clinician-reviewed notes. A note goes to
a lighter review only when every check passed and the bound applies; a note
unlike the ones the bound was measured on, a site whose monitored rates have
drifted, or a check that has changed sends it to full review, and every note
is still signed by a clinician. Drift alarms keep a fixed false-alarm rate
however often they are checked, and a site's true error rate comes with a
valid range from a small review sample. Clinician edits are read against the
required items, never as style. New claim-level checks: citation support,
a claim filter that defers a required claim instead of dropping it, answers
that change across samples, independent dose re-derivation, confidence
stronger than the evidence, and missing inputs. Only clinician-reviewed
labels from a random sample count as ground truth. Nothing to re-run: this is
server-side, under two new endpoints.

Still active from 1.7.5 (fewer false gaps):
Clinical checks no longer flag a covered requirement as missing because it was
written in ordinary words. Tightening the checks so a generic word no longer
counted as coverage had also stopped crediting ordinary ways clinicians write
the real thing; that wording is credited again, generic words still are not,
and the change was confirmed on documents the checks were never tuned on.
Nothing to re-run: this is server-side and in the clinical SDKs.

Still active from 1.7.4 (clinical checks pick themselves):
Every clinical note is matched to the right one of thirty workflow
checklists from its document codes or its own structure, with nothing to
name or configure; a note that fits none is held for a person instead of
being checked against a guess, and a builder can add its own model as a
fallback for notes that are hard to place. A requirement counts as met only
on wording that actually meets it, and what a word list cannot judge goes to
a person. Drafting tools can declare what they already know (AI-drafted,
signature status, the adverse-event form's answer); a declaration settles
only the requirements it covers and never overrides a record that says
otherwise. New: a clinical trial visit-record checklist, a reading-level
check for patient-facing text, and the EHR plug-in checks any note type.
Nothing to re-run: these are server-side and in the clinical SDKs.

Still active from 1.7.3 (your brain stays yours):
A KEY COULD BE MOVED AWAY FROM ITS OWN MEMORY WITH NOTHING SAYING SO. Recovery
could repoint every key a person held into another workspace, chosen by its
total size rather than by how much of it was theirs, and every read follows
the key, so a whole brain looked deleted on every agent at once. Recovery now
counts only your own items, refuses a move that would hide them unless you
confirm it, records the move on both sides and returns the exact undo. Every
session flags a key pointed away from your memory, and a removed member can
no longer point a key back in. Destructive and admin-only actions refuse when
a role cannot be confirmed, a skill belongs to its author, sharing a skill
passes the same evidence checks on every path, and stored code runs only in
an isolated sandbox, never on the server. Nothing to re-run for these: they
are server-side.

Still active from 1.7.2 (each release describes itself):
THE PRODUCT UPDATE LINE WAS DESCRIBING THE WRONG RELEASE. The managed
instruction block announces the current release by version and title, and
that title was followed by a fixed paragraph last written several releases
ago, so six releases in a row described themselves with older notes. Each
release now writes its own lead for that line, keyed by version, and a release
without one fails the build. Guidance that stays true across releases sits on
its own "Standing behaviour" line with no version attached. Re-run the upgrade
to replace the stale line in your installed block.

Still active from 1.7.1 (wrong here is not wrong):
A MISROUTED MEMORY WAS BEING PUNISHED AS A WRONG ONE. The only way to say a
recalled memory did not help was to mark it unhelpful, and enough unhelpful
reports retire a memory everywhere. A correct safety rule that surfaced on the
wrong kind of task therefore moved closer to retirement every time someone
reported it honestly, including in the workflow it was written for. Report
`cognition_atom_outcome` with `outcome: irrelevant_context` (and the recall's
`query` and `project_key`) when a memory did not belong in a recall: it teaches
recall to rank that memory lower for tasks like that one, and to stop
surfacing it there once two people (or its author) say so. It never counts
toward retiring the memory, and safety rules and sensitive memory are only
ranked lower, never hidden. A later `helped` report in that context clears it.
Use `incorrect` only when the memory itself is wrong.

A RULE NOW HAS TO EARN THE RIGHT TO STOP WORK. A rule blocks only when it
matches the task directly and meaningfully and applies to this project and this
kind of work. Rules reached through a link, or matched weakly, arrive as
`inform` or `warn` and plan/assist list them under `related_policies`, not
`gates`. Honor `block`; resolve `warn` by saying whether it applies; treat
`inform` as context. Sensitive-domain rules keep their authority on sensitive
tasks even when no project is named.

RETRIEVAL MATCHES WORDS, NOT FRAGMENTS, weighted by how distinctive each word
is, the same way in recall, plan and assist. Results carry a `feedback` block
asking for an outcome per memory; answer it. Pass `project_key` whenever a
project is resolved, and act on `scope_hint` when results span projects.

Still active from 1.7.0 (one answer per workspace):
A WORKSPACE HAD MORE THAN ONE CURRENT STATE. Workspace packets are stored as
SAVE EVENTS, so a key holds a row for every save it has ever received and its
current state is the newest of them. Every reader that did not know this read a
different row. One key resolved to two different packets depending on what the
caller happened to be asking about, so a project's goals and security boundary
changed with the question. A check meant to catch a retired workspace never
fired, because it was handed a different row than the agent had just been
shown. Archiving a workspace left the older un-archived save standing, so the
packet kept loading itself into sessions while the tool reported it hidden.
Measured on one real account: twenty-six workspaces spread across seventy-seven
saved rows, which every listing and every load had been choosing among. There
is now one definition of what a key currently is, applied where the rows are
read rather than by each reader remembering to ask. The full history is still
there and is requested by name, which is the right way round -- the dangerous
option is the explicit one.

AND A SAVE NO LONGER ERASES WHAT IT WAS NOT SENT. Saving a workspace is a full
overwrite, so a field left out is deleted rather than left alone. That is
documented in one corner of the product and enforced nowhere, and it cost two
real packets in a single session: a save carrying a name and a summary silently
wiped four goals, six preferences and five security boundaries and reported
success, and the second loss happened while repairing the first. A save that
would empty a field currently holding content is now refused, naming each field
and how much it holds, with an explicit option to clear it deliberately.
Nothing legitimate is blocked, because a genuine full save re-sends everything
and drops nothing.

A REPEATED CORRECTION IS CORROBORATED ACROSS SITES RATHER THAN COUNTED. For a
group practising inside many organisations it does not own, the same correction
reached independently at several sites is the only available evidence that it
is the group's judgment rather than one site's habit, and one person correcting
the same draft twenty times is twenty observations of one preference rather
than twenty sites agreeing. Corroboration never promotes anything on its own,
because turning one group's habit into everyone else's requirement is a
decision people make rather than one a matcher makes for them.

Still active from 1.6.99 (a refusal you can act on):
A REFUSAL THAT NAMES NO FIELD IS NOT ACTIONABLE. The done-state gate correctly
refuses a completion claim that no observation carries, and said only to attach
one, without naming the argument that carries it. An unknown argument name is
stripped before the handler ever sees it, so a caller who guesses wrong gets a
refusal identical to having genuinely done none of the work, and the next
attempt fails the same way with no new information. The refusal now names both
`evidence` and `state`, says what each is for, and states that neither
substitutes for the other; and when the done-state is absent entirely the
response says so, so a wrong key can be told apart from an empty result.

A PRACTICE RULE THAT COULD NEVER BE ENFORCED MOVED TO THE CHANNEL THAT CAN
CHECK IT. A captured correction -- draft this note the way the physician has
corrected it three times -- sat in the invariant lane and was reported
unenforceable on every call. Not a wording problem: an invariant is enforced by
naming phrases a violating step would CONTAIN, and this rule's violation is an
OMISSION, a draft missing the corrected shape, while the step says nothing
wrong at all. Repeated corrections now compose into a document's required-action
set, appended after everything else and dropped on an identifier collision, so a
local style preference can add a requirement and can never replace one or relax
a clinical floor.

AND THE DETECTOR IS LEFT ABSENT ON PURPOSE. The memory records that a
correction happened and how often, never what it was, which is the failure the
memory itself predicts: a practice that keeps paying for a rule nobody wrote
down. A guessed detector would report a document as addressed when nobody
checked it, so the channel returns undetermined, routes it to a person on every
draft, and names exactly what to capture so undetermined does not quietly
become permanent.

Still active from 1.6.98 (silence is not success):
Three ways the product could report success while doing nothing, all three
found by using it rather than by reading it.

A GATE WITH NO STEPS WAS ANSWERING SAFE TO EXECUTE. `cognition_gate` mode=plan
reads `plan`, an ARRAY of ordered steps. A caller who sent their plan as prose
in another field -- which is how this actually happens -- reached the validator
with nothing. Zero steps violate nothing, so every stored invariant "passed"
and the tool issued its strongest available assurance for a plan it had never
seen; a pitch containing three separately forbidden phrases cleared it. This
codebase already held that an empty or zero-invariant gate is not approval. The
gate itself did not. Plan mode now fails closed on an empty or all-blank plan
and names the field the steps belong in, because a caller in that state is
usually one rename away from a real check rather than acting in bad faith. The
HTTP gate a customer pipeline calls already behaved correctly, so the two
surfaces now agree.

THE MEMORY TOOL WAS NOT REMEMBERING. Persistence on `cognition_remember` was
opt-in, while the same flag is opt-out on the eval tool and its own description
stated no default at all. So the natural call -- omitting it, on a tool named
remember -- classified the memory, returned ok, and wrote nothing. Worse, every
failure signal was gated on that same flag: both branches that set a reason,
the ok inversion, and the entire persist-failed block were unreachable exactly
when the flag was absent, so the callers who most needed the warning were the
only ones who could not receive it. Persistence is now the default, the
description says so, and a non-persist always carries a reason instead of a
null. Pass `persist: false` for a deliberate classification dry run; it is
labelled as one so it cannot be mistaken for a write that landed.

AND THE MEMORY WRITE HAD NO TELEMETRY. Measured against production: the assist
tool had logged 113 activity events, session summaries 47, the voice profile
15, and the memory write exactly zero. It was the one significant tool emitting
nothing, which is why a silent write failure could live in it indefinitely --
there was no signal in which it would have appeared as anything at all. Both
outcomes are recorded now, because a store that logs only its successes cannot
be used to find out how often it fails. The remembered text is deliberately not
copied into the audit feed: the lane, the route and the reason are enough to
measure the failure class, while the body stays in the store under its own
retention rules rather than being duplicated into a feed with different ones.

DEFINITIONS THAT CONFLICT ACROSS RECORDS ARE NOW ADJUDICATED. A reading can
declare which record it lives in and whether it binds by rule, so a receipt
names WHICH systems disagree rather than only that something does. One binding
authority no longer withholds the answer: it applies the binding reading and
NAMES the local wording it displaced, because the displacement is the
actionable half and silence there would hide it. Two binding authorities that
disagree stay withheld, since that conflict is genuinely irreducible. An
unmarked authority is treated as local, so silence can never promote a caller's
own wording.

Still active from 1.6.97 (memory has one home):
COGNITION IS THE SYSTEM OF RECORD FOR DURABLE MEMORY, AND AGENTS ARE NOW TOLD
SO. Most coding agents ship a local memory or rules file of their own, and an
agent holding two plausible homes for a fact picks whichever it thought of
first. So judgment worth keeping landed in a file that is per-machine and
per-tool: it never reaches the person's other agents, their other machines, or
their team, and it is invisible to governance. Nothing Cognition never saw can
be privacy-reviewed, given typed edges, superseded when the fact changes,
expired when it goes stale, credited by an outcome loop, or carried in an audit
receipt. A local line is a note; a Cognition atom is memory under governance.
The rule now ships in the compact contract every agent receives and in the
managed block inside the host's own instruction file, which is where the two
actually compete. Agents are also told to stop asking whether to save to
Cognition AS WELL -- that framing makes the governed store the optional extra
and the ungoverned file the default, which is backwards. Write to Cognition
first; a local note is a pointer, never the only home.

REVOKING A KEY WAS NEVER A REMOVAL. Anyone who could still sign in minted a
fresh key in under a minute, so revocation bought minutes while reading like
removal. Removal is now denial of the IDENTITY, checked at all three places an
identity becomes access: minting, authentication -- before the rate limiter, so
keys already in someone's hands stop mid-session rather than at expiry -- and
RENEWAL, which is authorized by possession alone and was therefore the standing
way around the other two, indefinitely. A denied caller is refused as
authenticated-but-not-authorized rather than invited to authenticate again, and
the refusal carries no repair path, because every repair path in an auth handler
routes to the mint flow, which is the one instruction that must not reach
someone who was removed. Matching succeeds on either identity axis alone, since
most key records carry only one of the two, and a removal that silently does not
happen is worse than one that is refused.

A STANDING INSTRUCTION THAT SAID ALWAYS WAS BEING HANDED OVER LABELLED NEVER. A
directive's kind is printed in front of its text when it reaches an agent, and
the classifier behind that label tested the negative pattern first and returned
on a match anywhere in the string. A rule whose operative clause was affirmative
was therefore filed, and then rendered, as a prohibition the moment any later
subordinate clause contained a not. That is a label inverting the instruction it
introduces, on the one surface whose whole job is telling an agent what the user
wants. Position is the signal now, because a directive's operative clause comes
first in practice: earliest match wins, pattern order only breaks a tie, and an
explicitly stated kind still beats inference entirely.

Still active from 1.6.96 (sometimes is the defect):
A STATED PREFERENCE NOW ROUTES BY THE SHAPE OF THE UTTERANCE. Nothing in the
product had decided that an utterance stated a preference at all -- the
classifier ran only after something else concluded it was a directive, and the
only thing that concluded it was an agent choosing to call a tool. So the same
sentence was four independent coin flips: noticed or not, classified or not,
stored as always-on behaviour or as a retrieval-gated skill, applied or not.
Unconditional wording now applies to every session, a condition the user
attached becomes the trigger of a skill, a project scope stays inside that
project, and a one-off is deliberately not captured and the receipt says so.
A one-off marker outranks absolute wording, a reversal retires the earlier
preference rather than storing a rule that fights it, and weak wording asks
before saving.
The routing decision, its reason and its receipt are live now.
The standing tier that stores an unconditional preference switches on with the
next database change; until then that read reports itself as degraded rather
than as having none, because an agent told the second confidently acts without
a rule that does apply.

VOICE IS LEARNED PER SURFACE, AND A CORRECTION OUTRANKS OBSERVATION. A style
someone asked for is stronger evidence than one they merely exhibited. Chat,
commits, documents, messages to a person and clinical notes are separate
surfaces, because someone who wants terse commits does not want terse
discharge instructions. Style prohibitions and policy rules are kept apart:
never use em dashes is voice, never push to main is not, and folding the
second into a voice profile makes a rule look like a taste and lets it decay
like one. A profile that keeps reversing is reported as drift instead of
averaged into a bland middle.

A SKILL CARRIES ONLY AS FAR AS IT HAS EARNED. Retrieval was binary -- hand the
whole skill over or withhold it -- and the common case is neither: a skill
captured while fixing one system usually holds one paragraph of durable
reasoning and six lines of specifics that are wrong anywhere else. Near, apply
it as written. Adjacent, carry the reasoning and the checks and re-derive every
command, path and identifier. Far, mention it for orientation only. Outside,
withhold it, because a wrong skill is worse than no skill. Reach is learned per
skill from outcomes tagged with the distance they happened at, so a skill that
is excellent nearby and useless far away ends up narrow rather than mediocre;
a regulated skill does not inherit reach from success elsewhere.

A CLINICAL MENTION MUST BE PLACED, ATTRIBUTED AND DATED BEFORE IT COUNTS. The
omission engine matched terms with no idea where in a document a phrase sat,
who it was about, or whether it had happened, so a relative's procedure
satisfied the patient's requirement and a planned order satisfied a result
requirement. That is false coverage, which is exactly how a gap hides.
Eighteen canonical sections are recognised across real header formats and
detectors can scope to or exclude them; family-relation statements never
satisfy patient requirements; planned and completed are distinguished, with
both markers present satisfying neither; a document with no headers degrades to
one span rather than none. Self-contradiction is detected and demotes the
action, so the existing gate blocks and the existing receipt renders it, with
seven conservative abstentions -- a false contradiction sends a clinician to
re-read a fine document, and at scale that is alert fatigue. Classes are
reported, never content. An organisation's clinical boundaries are carried
without waiting to be asked, each marked enforced at the gate or stated only.

BOUNDS ON WHAT WAS ALREADY SHIPPING. The always-on directive path had no
character budget and no check that a directive could not countermand its host,
including directives Cognition inferred rather than the user typing them. Both
are enforced at render now, with refusals reported rather than silent, and an
over-long authority statement is refused instead of trimmed: halving one
changes what it authorises.

AND THE TEAM SURFACE. An invite's role is clamped to what the minter may
actually grant, redemption applies the role the invite carried instead of
landing everyone as a member, revoking a person's keys ends their membership
rather than leaving a row that still grants reads through a key held elsewhere,
a department cannot import authority across organisations, and the adminless
self-heal belongs to the workspace's creator rather than the first caller.

Still active from 1.6.95 (every document the chart produces):
The clinical oversight layer now covers twenty-five document workflows:
clinical notes, patient communications, transitions of care, referrals and
consults, prior authorization, decision support, triage, pre-operative
assessment, coding, trial screening, outreach, imaging, and the governance
documents around a clinical-AI programme, composable by specialty,
population, setting and acuity.

A plan gate is available over HTTP (`POST /api/v1/clinical/gate`) with five
versioned policy packs, so a health system's own pipeline is held to the same
rules as an agent; `cognition_gate` accepts the same `policy_packs`.

Reviewer sign-off is bound to content (`POST /api/v1/clinical/attest`): a
signature covers the exact version reviewed and is superseded on its own when
the content changes; `?console=1` lists every subject with its status.

An in-boundary runner (`packages/detector-runner`) scores documents where
they live, calibrates against adjudicated cases, detects drift per AI build,
and writes the audit pack. No chart text leaves the customer's boundary.

Still active from 1.6.94 (measured, not asserted):
The measurement layer catches up with the judgment layer. Four defects, each
found by reading one day's receipts against what actually happened.

THE EXTRACTOR WAS FILING THE HOST'S OWN MARKUP AS JUDGMENT. Claude Code wraps
every slash-command echo, system reminder and task notification in tags, and
the word "caveat" inside one of them matched the defect classifier, so half
the memory candidates on a checkpoint card were chrome nobody said. Host
markup is now stripped, with its bodies, before a sentence is classified; a
sentence that still carries a tag is dropped rather than filed; the capture
stats report how much of the input was never a person's words.

A STORED TIE-BREAKER WAS FIRING ON EVERY CALL. The operating model's fallback
intervention raised the first stored priority as a should_interrupt whether or
not the task touched it. It now applies the rule the skill matcher uses: a
tie-breaker must share a distinctive term with the intent or it stays silent,
and when several apply the most-shared wins. An empty intent fires nothing.

A RETRIEVAL MISS WAS SCORED AS A SKILL FAILURE. A skill that fired on the wrong
task and was honestly reported not-applied counted as a contradiction in every
health recompute, so the most useful skill of a day sat at "refresh". One
shared tally keeps misses out of the contradiction count and the helped rate,
names them in the rationale, and charges them to trigger precision.

A DEMONSTRATED WIN CREDITED ZERO. Proof-bound accounting is right; the proof
path was missing. When the harness records the agent running the exact check a
skill's body names, that is evidence independent of the agent's word. The
session-end detector now finds it and mints `skill_check_executed`,
credit-bearing on the same terms as a commit after load, detector-only. And an
exact duplicate field no longer ships twice on a response that was omitting
others to fit; the manifest says deduplicated, never omitted.

Still active from 1.6.93 (nothing gets lost):
Four ways a Cognition brain could be lost, all of them the same defect: an
ABSENCE read as a VALUE.

A JOIN THAT FOUND NOTHING WAS CREATING SOMETHING. A workspace is addressed by an
id derived from the name you type, so every variation of a name is a different
address. Nothing checked whether joining actually resolved to anything. Someone
who typed a team's name a shade differently did not fail to join -- they
succeeded into a brand-new empty workspace, received a working key, and saw a
blank brain with no error anywhere in the flow. A join may no longer create: it
refuses and names the closest existing workspaces, offered as one click.

Names identical once spacing and punctuation are ignored are now ONE workspace,
so joining reaches the team's brain instead of forking beside it, and creating a
second workspace nobody could tell apart from the first is refused unless a
person confirms the two are genuinely different. Fuzzier matches are never bound
automatically -- guessing wrong would put one team's judgment into another's
brain -- they are offered and the human chooses.

A FAILED LOOKUP IS NO LONGER AN ABSENCE. The workspace read errored into a
warning nobody consumed, then the code fell through to minting a fresh id,
turning a transient database error into a permanent fork. A failed workspace
WRITE was also only a warning, while the caller's next act was issuing a key
against a row that was never written -- a key that authenticates and then
resolves to nothing, which is what a spontaneous logout looks like from the
outside. Both fail closed now, and no key is issued.

AN EXPIRED KEY WAS TOLD TO MINT. The lifecycle layer is explicit that re-running
setup creates a new workspace and strands your memory on the old key, but the
401 an agent actually receives carried a copy of the REVOKED hint -- mint a
fresh key and reinstall. So the moment the product discovered the problem, it
routed the user into the failure it exists to prevent. Expiry now carries its
own instruction and a renewal endpoint: same key string, same workspace, same
brain, only the expiry moves forward. It works past the grace window precisely
so nobody is pushed back to minting.

THE INSTALLER HAD NO IDENTITY CHECK. One host wrote whatever key it was handed
straight to disk with no validation and no receipt, so installing under the
wrong identity was silent and only visible later as someone else's sessions. It
now verifies the key before writing, records what it wrote, and refuses a silent
identity switch.

AND THE RE-INSTALL LOOP IS CLOSED. The setup screen generates a fresh RANDOM
workspace code every time a new workspace is requested, so the duplicate-key
check -- which is keyed to the workspace you are entering -- never fired. Each
re-run landed somewhere the user had never held a key, passed the check, and
handed back a working key to an empty brain while their real memory stayed
behind in the workspace they came from. Measured on one real account: fifteen
workspaces held, twelve of them empty, all created inside a five-week window,
with real work stranded in two of the others. It shipped as a WARNING on a 200,
and nobody reads a warning attached to a success. Creating a workspace while
already holding a key elsewhere is now refused, names the workspaces you
already hold, and takes a second deliberate confirmation. A genuine second
workspace is one click away; an accidental one no longer costs a brain. If a
previous install already scattered your work, cognition_recover_workspace
action=list shows every workspace you hold a key in and what each contains.

A CORRECT SKILL MATCH WAS BEING SUPPRESSED BY A LOOP THAT COULD NOT EXIT. An
outcome reported when a skill was never applied was scored as the skill FAILING
rather than as a retrieval miss. The reliability that fell out sat under the
confidence bar, the directive that followed told agents to prefer first
principles over stored judgment, and a skill nobody is told to apply can never
earn the outcomes that would raise it. Non-application is now scored separately
from failure.

Still active from 1.6.92 (score the definition, not the number):
A published comparison gave a coding agent a production clinical warehouse and
ten analyst questions. 30% of its answers matched a human analyst exactly and
90% landed within 5%. The errors that remained were INTERPRETIVE, not technical:
the agent and the analyst disagreed about whether a virtual visit counts as
"face-to-face".

WHAT THAT METRIC CANNOT SEE. 90%-within-5% is a COMMISSION measure. It scores
the answers that were produced. It cannot count the questions answered
confidently under a definition nobody agreed to, because a wrong definition
returns a clean figure and leaves no artifact for a reviewer to catch. That is
the omission channel again, in analytics rather than in a note.

THREE OUTCOMES, AND THE MIDDLE ONE IS THE PRODUCT.
`POST /api/v1/clinical/interpret` takes the analyst's question and your attested
definitions and returns:
  GOVERNED  - one attested definition, declared with the answer, so a domain
              expert can object to the READING and not only to the number.
  AMBIGUOUS - the question turns on a term nobody has attested. Cognition says
              so instead of silently choosing. This is the finding, not an error.
  CONTESTED - two attested definitions disagree. Both are named and neither is
              applied; choosing silently is how a disagreement becomes a number
              nobody can audit.

ATTESTATION IS NOT OPTIONAL. An unattested definition is reported as unattested
and never applied as authority. The seed registry ships UNATTESTED, and every
term carries a falsifier, because a definition nobody can disprove is a
preference rather than a definition.

NO PATIENT DATA CROSSES IT. Chart text, notes, rows, result sets and assistant
output are REFUSED rather than quietly dropped. Neither a question nor a
definition is chart-derived, which makes this the cheapest clinical entry point
in the product: it can be piloted without a data-sharing negotiation.

A DENIAL EXPLAINS ITSELF. Team analytics gating now names the role that
resolved, whether you are recorded as the org creator, and the row that has to
change. Telling a workspace's founder to "ask an org admin for access" is the
wrong sentence when they are the admin.

Still active from 1.6.91 (Cognition on screen, not just on call):
Every surface Cognition had was EPISODIC. The receipt fires on a tool call, the
checkpoint renders at the end of a task, the update banner shows once, and
between those moments the layer was invisible. A layer you cannot see is a layer
you do not believe is running.

THE STATUS LINE. Always on screen, and it carries only state you could not
otherwise see and would act on: the stub version THIS MACHINE runs, so a stale
local install is visible without running a command; the resolved WORKSPACE,
which is the field that silently changes what Cognition returns, so a wrong
answer can be traced to a wrong scope at a glance; the last Cognition action
with its result; and the number of calls this session.

  COGNITION 1.6.91 - cognition-updates - cognition_recall -> 8 atoms - 25 calls

NO ORNAMENT. No logo, no tagline, no decorative rule. A status line spent on
branding is an advertisement the user cannot dismiss. The presence comes from
density, not decoration, which is the same house style the stats dashboards
already follow.

LOCAL ONLY, AND QUIET WHEN EMPTY. It runs on EVERY render, so it makes no
network call and no MCP round trip -- it reads only files the hooks already
write, and adds no latency to a tool call. Every read is guarded, because a
status line that throws puts a stack trace under the prompt continuously; the
worst failure is a shorter line. A segment with no state prints NOTHING rather
than a placeholder, since "workspace: unknown" on every render is noise.

RECOGNISABLE AT A GLANCE. The identity segment renders in Carolina blue --
colour doing the job a logo would, without spending any of the line's width on
one. NO_COLOR is honoured. The installer also APPENDS Cognition's own spinner
verbs (Potentiating, Consolidating, Recalling, Grounding, Attesting,
Reconciling, Attributing, Converging) to Claude Code's rotation. Appended, never
replaced: replace mode would rename the host's personality on every turn,
including the ones Cognition has nothing to do with. Each verb names a mechanism
this product actually has; a word that named nothing would be costume.

YOUR PROMPT IS YOURS. If you already have a status line, the installer leaves it
alone and says so. Cognition's own is updated in place, so re-installing never
duplicates it.

Still active from 1.6.90 (oversight the clinical stack can actually call):
The oversight layer built last release was reachable only over MCP. A health
system's pipeline is Python or Java behind an internal LLM gateway; it cannot
speak MCP, so every capability in it was effectively unreachable by the buyer it
was built for.

THE REST SURFACE. `POST /api/v1/clinical/observe` returns the DETECTOR CONTRACT:
the required-action set for a workflow, composed by specialty, population and
setting on request, with each action's detector and the matching semantics --
case-insensitive on WORD BOUNDARIES so "art" misses "chart", `all_of` requires
every term and `any_of` at least one, a negation cue inside the window negates
the match unless a sentence boundary lies between them, an action with no
detector is UNDETERMINED rather than not-found, and the caller reports a match
COUNT and never which term matched, because naming the matched term discloses a
clinical fact. The contract is small on purpose: any language implements it in
an afternoon. `POST /api/v1/clinical/coverage` then takes the OBSERVATIONS -- a
status, a match count and character offsets -- and runs composition, governance,
coverage, grounding, the omission receipt, extractor calibration and HTI-1
readiness. Both sit under Bearer-key auth with the existing api-v1 tenant guard.

THE BOUNDARY IS STATED, NOT ASSUMED. Neither endpoint accepts the assistant's
output. That text is chart-derived, and a caller who sends it is REFUSED rather
than having the field quietly dropped -- silently ignoring it would leave a wrong
assumption about this boundary intact. Matching text server-side is one handler
away and is deliberately NOT built: it would put chart content on our
infrastructure and turn a straightforward integration into a data-sharing
negotiation. That is a commercial decision, not a missing feature.

FAIL-CLOSED. Unauthenticated callers, bad JSON, unknown workflows, unknown
registries and malformed observations all refuse; none of them degrade to a
permissive default.

Still active from 1.6.89 (oversight for a model on the chart):
A general model is now wired into the medical record, and the safety number
everyone is quoting measures the wrong channel.

THE OMISSION CHANNEL. Rating a produced response measures whether what was said
was wrong. It cannot measure what was never said, and that is where the majority
of potentially-harmful clinical LLM error sits, leaving no artifact on screen for
a reviewer to catch. Epic's Seismometer validates predictive models against local
outcome data, which a generative assistant has no column for, and CHAI's model
card does not yet cover generative. `EHR_ASSISTANT_PACK` audits the DEPLOYMENT
instead: 7 layers, 32 checks over retrieval completeness, the omission channel,
evaluation validity, real oversight capacity, provenance near the record, the
read-only boundary and public-source grounding. Required-action registries ship
for appointment prep, medication reconciliation and results follow-up.

REGISTRIES COMPOSE. Base workflow x specialty x population x setting x your own
modifiers. Cardiology, oncology, psychiatry, paediatric, geriatric, emergency and
ambulatory ship today, and an organization authors its own as data. Composition
is asymmetric on purpose: adding and raising severity are free, LOWERING or
REMOVING requires a stated reason and returns as a visible waiver, and an action
marked non-waivable is REFUSED outright and reported rather than dropped.

GOVERNANCE. A reason string has no author, so a waiver is now a dated,
credentialed, EXPIRING grant. Unapproved, malformed, future-dated, expired or
under-credentialed all RESTORE the requirement to full strength. Weakening a
critical requirement needs a licensed clinician, and authority is judged on the
severity BEFORE the weakening, so a critical item cannot be walked down to
routine and then approved as routine. `list_waivers` shows every standing
exception across workflows and flags concentration when one approver carries
most of them.

AUDITABILITY. Clinical decisions are chained and signed: an edited payload, a
reordered predecessor and a deleted record are all detectable, and verification
stops at the first break rather than counting later records as valid. The claim
is DETECTION, not prevention. An HTI-1 readiness map assembles a Predictive DSI
attribute record and states plainly that it is not the certified list and makes
nothing compliant.

Nothing here touches patient data: checks are answered about the deployment and
the gate matches on action ids, so Cognition governs the assistant without
reading the chart. The shipped specialty registries are deliberately UNATTESTED
and UNCITED; they become authority when that specialty's clinicians attest and
cite them.

Still active from 1.6.88 (ground truth has an author):
An evaluation is only as good as whoever wrote its answer key, and Cognition
never recorded who that was.

GROUND TRUTH NOW HAS AN AUTHOR. The eval case-book rested on a single claim --
"required actions come from a person" -- and that claim lived in a code comment.
Nothing recorded WHICH person, whether they were qualified, when they said it,
or whether a model wrote the ground truth and the eval then measured the model
against itself. `cognition_eval_casebook` now always returns
`ground_truth_provenance`, so an absent attestation reads as unattested rather
than passing quietly. Model-authored ground truth is REFUSED OUTRIGHT, not
downgraded, and a valid clinician attestation on the same book does not
rehabilitate it. `risk_class='clinical'` requires a LICENSED attestor and
refuses to run the evaluation until every case is covered; domain expert is not
a clinician. Attestations EXPIRE, because the standard of care moves, and a
future-dated one is invalid rather than maximally fresh.

INTER-RATER AGREEMENT IS MEASURED, NOT ASSUMED. Pass `independent_sets` per case
and Cognition reports mean pairwise Jaccard and names the disputed actions. A
case with one rater is reported unmeasured, never as perfect agreement -- the
label's ambiguity is unknown, not zero. Cohen's kappa is deliberately not used:
the action universe is open, so chance agreement cannot be computed without
inventing the item pool.

A CITATION NOBODY CHECKED IS NOT EVIDENCE. Every required action in a
`cognition_coverage` registry can now carry its sources with a verified
entailment judgement, and the rules are asymmetric on purpose, because the
failure mode is overclaiming support. An UNVERIFIED citation contributes
nothing. A citation with no named verifier is unverified whatever its entailment
field claims. Verification EXPIRES. A source that CONTRADICTS an action is heard
even unverified and is never out-voted by ones that support it, so the action
becomes contested and a person must resolve it. Partial entailment is capped
below strong however good the source. `require_grounding_at` blocks release on
requirements that rest on nothing; `require_falsifier` makes each one name what
would retire it. Both gates are opt-in, so existing callers are unchanged.

WHAT COGNITION WILL NOT DO. It does not read the source. Entailment is asserted
by a named human, and Cognition records, grades and expires that assertion --
automated entailment checking would reintroduce the same model-checks-itself
circularity the harness exists to refuse. The published risk packs are likewise
not populated with invented per-check citations, so a pack piped into
`cognition_coverage` today honestly reports as ungrounded.

Still active from 1.6.87 (you can finally tell it is there):
Four complaints turned out to be one mechanism and one root cause.

THE BUDGET WAS FUNDING STYLE OVER PROOF. Measured across four consecutive real
`cognition_assist` calls: 97-103KB of payload against a 40KB ceiling, and the
SAME three fields dropped every time -- `capture_card` (the approval surface),
`judgment_case` (which memory was applied versus rejected) and
`retrieval_explanation` (why a skill fired). What survived every time was the
directive stack: voice, personalization, interaction contract. The evidence was
absent from the payload, so there was nothing to perceive. A `proof` tier now
drops LAST and a narrow `style` tier drops FIRST. Deliberately not ranked above
every directive: `operating_model_directive` carries hard BLOCK constraints, and
trading one for a receipt would make a legibility fix into a safety regression.

SKILLS AND WORKFLOWS SURFACE FOR APPROVAL. The capture queue was empty by
construction -- 0 pending across 30 days against 4,207 skill reuses -- because
all three paths that fill it were unreachable. Saved handoffs are now mined for
the judgment they already carry (decisions and preferences; never next steps,
state or inventory) through the same governed pipeline. And the checkpoint now
RECOVERS the `capture_card` it emitted instead of asking the agent to carry it
back, so a skill approval still surfaces when the agent forgets both.

THE CHECKPOINT STOPS EATING ITS OWN SUMMARY. Bullets were truncated mid-word, so
a bullet naming three findings lost the third and read as corruption rather than
brevity. Proven receipts lost their numbers because the compactor recovered its
phrase by running regexes over its own rendered output.

RECALL TRAVERSES THE WORKSPACE TREE. Workspaces nest, but handoff selection
matched keys as flat strings, so a subfolder's handoff was invisible from its
parent and the parent's invisible from inside the subfolder. A parent now sees
its subfolders' work; an empty subfolder falls back to its parent; an unrelated
project still matches nothing. It is a join, not a loosening.

THE LEARNING LOOP RAN ON A 1% SAMPLE. 4,207 reuses produced 41 outcomes. Skill
attribution is well built and starved: its only outcome producer reads the
firehose table that telemetry opt-in emptied. `cognition_gate` mode='final' now
feeds it -- but only for a verdict carried by execution, or by a claim checked
against evidence the caller says it READ. A bare `tests_passed` boolean is the
assertion the gate exists to distrust and produces nothing. Denials are recorded
as failures on purpose: attribution only credits a genuine fail-then-pass
transition, and without a recorded failure there is nothing to bracket.

A NUMBER NOBODY SHOULD HAVE QUOTED IS WITHHELD. The impact headline read
"~1,800,250 tokens saved" while every caveat needed to read it honestly sat in a
nested object: 100% of the estimate was unproven and 42% came from one skill. It
is withheld from the headline until a high-confidence receipt backs it, and stays
in the structured response with its caveat. It earns its way back as the repaired
outcome loop produces receipts.

UNDERNEATH ALL OF IT: `ENABLE_CC_FIREHOSE` severed three separate features when
telemetry became opt-in -- session-end handoffs, the capture queue and the
outcome loop. Every fix has the same shape: read the ARGUMENTS of calls you
already made, never a transcript. No new consent surface, and identical behaviour
on hosts that have no session-end hook at all.

Still applies if you have not re-run since 1.6.85 (Opt-in telemetry, an uninstaller, and five config bugs):
ACTION REQUIRED: RE-RUN YOUR INSTALLER. Every fix in 1.6.85 ships inside the
installer, so a machine that already has Cognition keeps the old behaviour until
it runs again. Claude Code:
`curl -fsSL https://www.cognitionus.com/api/install/claude-upgrade | sh`.

TELEMETRY IS NOW OPT-IN. A prospective user read the Claude installer end to end
before running it and refused; every objection was correct. The Bash firehose
hook POSTed each command and its output on every call. ENABLE_CC_FIREHOSE gated
STORAGE on the server and never gated TRANSMISSION, and the only off switch was a
marker file that was not mentioned until after the writes had landed. Content
telemetry now requires explicit consent: without `COGNITION_TELEMETRY=1` the
firehose hook is NEVER WRITTEN, so there is no artifact on disk that could send
shell output anywhere, and a re-run without it REMOVES a hook consented to
earlier. Both hooks fail CLOSED. The session-end hook no longer OPENS the
transcript without consent, because reading a transcript you were not permitted
to read is the same violation as sending it. The feedback link still works with
telemetry off; bundling an optional feature with data collection is what forced
the all-or-nothing choice. `~/.claude/cognition/no-telemetry` still hard-disables
everything, and still wins over opt-in.

DISCLOSURE NOW COMES BEFORE THE FIRST WRITE. A summary printed after the files
are changed is a receipt, not consent. `COGNITION_DRY_RUN=1` prints the exact
plan and changes nothing, and deliberately does not require a key: the person
most likely to want a preview does not have an account yet. The installer also
stopped touching other tools' state: an unqualified `pkill -f mcp-remote` plus
`rm -rf ~/.mcp-auth ~/Library/Caches/mcp-auth` killed every other MCP server's
bridge and deleted the auth cache they all share.

FIVE BUGS THAT DESTROYED THE USER'S CONFIG, NOT COGNITION'S. Codex config.toml
was edited by regex: with no global flag a pre-existing duplicate survived and
the installer appended a third, which is a duplicate TOML table and breaks CODEX
rather than Cognition; and the lookahead stopped at the next bracket, orphaning
`[mcp_servers.cognition.env]` with the PREVIOUS KEY still in it. Both fire only
on RE-RUN, so they hit the person already reinstalling to fix something else. The
Gemini and Claude installers caught a settings.json parse error, defaulted to an
empty object, and wrote that over the entire file. claude-upgrade did the same
and is worse: it runs on EVERY update, and the key resolves from
credentials.json first, so a malformed settings.json was invisible to every
downstream check. claude-feedback-hook passed null into JSON.stringify and wrote
the literal text `null` into settings.json, which then breaks Claude Code itself.
Cursor was the only host that already refused correctly, and that behaviour is
now pinned so a refactor cannot simplify it into the same bug. Every path that
rewrites a config shared with other tools now backs it up to
`<file>.cognition-backup` and REFUSES rather than rewriting what it could not
parse.

THERE IS FINALLY AN UNINSTALLER:
`curl -fsSL https://www.cognitionus.com/api/install/uninstall | sh`. It removes
Cognition from every host it finds, editing each host's own config format rather
than shelling out to a CLI that may not exist after a failed install. Offline,
idempotent, dry-runnable, keeps every other MCP server, and preserves the
instructions the user wrote themselves. An install that cannot be undone in one
command is a decision the user has to live with; one that can is a trial.

WHAT IS NOT CLAIMED: this changes what LEAVES the machine and what the installer
WRITES. It does not delete anything already stored in a Cognition account; that
is a separate request via `/cognition privacy`.

Still active from 1.6.84 (Compact audit checkpoint cards):
Cognition 1.6.79 makes two loops that were plumbed but never fed actually run.

THE CODE GRAPH NOW CARRIES JUDGMENT. `cognition_code_graph` impact was built to
return the decisions attached to a blast radius, and returned an empty judgment
field on every query, because nothing ever created an edge from a decision to a
component. A structural map with no judgment is strictly worse than the free AST
tools it was meant to beat, because it costs your tokens to build.
`action='link'` derives that edge from what teams already write down: a decision
naming `src/lib/mcp/checkpoint.ts` is attached to the component that owns it.
Literally, never semantically -- a fuzzy match produces a blast radius carrying
advice about code it was never about, and someone then follows it. An atom naming
more than four components is not attached at all, because a session note that
touched forty files is not a decision about any one of them. Also new:
`action='import'` ingests a deterministic extractor's `graph.json` instead of
rebuilding a parser fleet, rolling symbol-level nodes up to the module that owns
them; `action='review'` takes a diff's changed file paths and answers with the
standing invariants first; maps are commit-stamped and report their own drift;
and `action='export'` materializes `graph.json` plus a Markdown report the repo
can commit and diff.

SKILLS NOW IMPROVE, NOT JUST RANK. Every other skill surface decided whether a
skill should be USED. A skill that reliably half-works was reinforced into a
higher rank and stayed exactly as wrong as it was written.
`cognition_optimize_skill` supplies the acceptance discipline and never the
generator, so BYO-model holds: the eval set splits into train and a WITHHELD
holdout keyed on a hash of the case id, the brief carries train failures only,
edits must anchor on a substring occurring exactly once with required headings
protected, and an edit is accepted only on a strict held-out pass-rate gain with
no trigger-precision regression. Ties lose. Train-improved-with-holdout-flat is
named as overfit rather than passed. `from_outcomes=true` builds the eval set
from the skill's own recorded outcomes, so it needs no hand-written cases -- and
it ships its own limits, because a recorded outcome has no without-skill arm,
which leaves `pass_rate_delta` null and the promotion gate refusing by design.

BOUNDED RESPONSES AND PARALLEL AGENTS. A measured `cognition_assist` response was
94,699 characters across 41 fields, past the host's tool-result cap, at which
point it is spilled to a file and the agent receives none of it. Responses are
now bounded by tier -- telemetry before retrieved evidence before behaviour
directives, and gates never -- with every omission NAMED in a `response_budget`
manifest alongside the call that retrieves it, because a silently truncated
response reads exactly like a complete one. The largest single saving was not the
ceiling: `call_ledger` was 12,631 bytes of which roughly 10.7KB re-embedded
fields already present at the top level of the same response.
`cognition_claim_next_assignment` now takes `batch_size` for a parallel fan-out,
but only across assignments whose declared `ownedFiles` are provably disjoint;
collisions are deferred naming the blocker and the overlapping paths, an
undeclared footprint runs alone, and any multi-writer batch returns
`isolation=worktree`.

Still active from 1.6.78:
Cognition 1.6.78 makes checkpoint cards compact long audit receipts instead of
dumping every command, route, and gated dependency. Summary is capped to three
high-level bullets and long endpoint inventories are trimmed out of summary text.

Multiple proof receipts collapse into one `Verified:` line, safety-gated
omissions collapse into one `Blocked safely:` line, and skipped verification
checks render as `Not checked:`. The 1.6.77 card polish remains active: sections
stay separated, Immediate value does not repeat `Value:`, residuals remain
secondary, and skill/workflow drafts still explain source, why, how, observed
pattern, and reuse trigger before approval.

Still active from 1.6.75:
Cognition keeps skill approvals from disappearing at checkpoint time. When
`cognition_assist` returns a `capture_card` but the host agent has not produced
an approval-ready `drafts[]` entry, the agent should pass that original
`capture_card` into `cognition_checkpoint`. The checkpoint then renders an owed
SKILL.md draft in `Important` instead of silently falling back to residuals,
handoff, or value lines.

This is still approval-gated. Cognition does not auto-save or fabricate the
skill body from a preview. The agent must draft the SKILL.md from verified
session context, pass `body`, `description`, `surfaced_reason`,
`observed_pattern`, and `trigger` through `drafts[]`, and call
`cognition_save_skill` only after the user approves.

Still active from 1.6.74:
Cognition opens the optional generation plane to Kimi K3 and any
OpenAI-compatible open-model endpoint while keeping memory, governance,
retrieval, approval, and receipts model-agnostic. Session insight, workflow skill
compile, auto-promotion compile, brain-page enrichment, and governed JIT
synthesis now use one shared adapter instead of hardcoded Gemini calls. Set
`COGNITION_MODEL_PROVIDER=kimi` plus `KIMI_API_KEY` or `MOONSHOT_API_KEY` for
hosted Kimi, or point `COGNITION_MODEL_BASE_URL` at a local/server compatible
gateway with `COGNITION_MODEL_NAME`.
For hosted Kimi: set `COGNITION_MODEL_PROVIDER=kimi`, `KIMI_API_KEY` or
`MOONSHOT_API_KEY`, `COGNITION_MODEL_NAME=kimi-k3`, and optionally
`COGNITION_MODEL_REASONING_EFFORT=low|high|max`. Kimi defaults to low reasoning
effort for structured generation jobs.
For a local open model: serve an OpenAI-compatible endpoint, then set
`COGNITION_MODEL_PROVIDER=openai-compatible`, `COGNITION_MODEL_BASE_URL`, and
`COGNITION_MODEL_NAME`.
Still active from 1.6.73: offboarding can revoke a person's agent keys without
holding their secret key.
ALSO: workspaces gained SUBFOLDERS (a subfolder is a workspace that declares a
parent, inheriting goals, preferences, boundary, policies and retrieval scoping
for one field); repository structure became typed memory rather than a parser
fleet, so the map decays and supersedes like any other memory; a workspace is now
found by what it is FOR, with declared purpose capped below every identity signal
so it can outrank recency but never a named project; and the privacy scanner no
longer redacts the word HIPAA out of a compliance sentence.


Still active from 1.6.72 (the filler like, in the two places position settles it):
Cognition 1.6.72 finishes filler removal with the hardest word in dictation.
"like" has three jobs and only one is filler: quotative ("I was like, we should
ship"), comparative ("something like that"), and filler ("and like just telling
them"). Meaning separates them in general, which is why the model is told to KEEP
it -- an earlier prompt that said "remove filler (um, uh, like)" was read
literally and destroyed a quotative.
So the filler case is handled by POSITION, in the only two places that settle it
without meaning: comma-delimited on both sides ("We should, like, ship it"), and
immediately after a coordinating conjunction unless a noun phrase follows, so
"and like just telling" is filler while "and like a boss" is a comparison and the
next word decides. Everything else stays the model's call.
A LIMIT WORTH KNOWING: the cleanup model occasionally substitutes a very short
word rather than only deleting -- one utterance came back with "so severe" where
the speaker said "as severe". The faithfulness guard treats only words of five
letters or more as invented, because short words change legitimately when
punctuation is repaired, and tightening it would reject good output and fall back
to the raw transcript. A real limit, not a fixed one.
To pick up the new CLI (already done if you re-ran for 1.6.71):
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh


Still active from 1.6.71 (if your dictation started with Okay, it was never cleaned):
Cognition 1.6.71 fixes a dictation cleanup bug that was invisible and widespread.
THE GUARD WAS REJECTING THE SPEAKER. Polished output is checked for a model
answering instead of rewriting -- a small model once returned "Here is the
rewritten transcript:" -- by refusing any result opening with okay/sure/here/
certainly. But a real dictation began "Okay, so like, yeah, updating the user...",
so the FAITHFUL cleanup also began "Okay" and was discarded as commentary. Every
utterance starting with one of those words was uncleanable, which is a large share
of spoken sentences, and it looked exactly like the feature not working while every
test passed. An opener is now evidence only when the model INTRODUCED it.
OPENING FILLER IS GONE: "Okay, so like, yeah, updating the user" starts at
"Updating". Mechanical, not a prompt rule -- asked to do this the model also
deleted "I think for the next quarter" from mid-sentence, stripped "Yes," and
"No," despite an explicit rule, and ate the quotative "I was like,". Position is
the one thing about filler that is not semantic, so it is the one part a closed
list can own. It keeps "yes" and "no", refuses to leave a stub, and stops on a
doubled opener because "So so many people came" is emphasis.
THE COMMAND PALETTE FINDS IT. /dictation and questions about voice returned
nothing, so the feature was undiscoverable from the surface built for discovery.
A NEW USER CAN FIND IT AT ALL: someone installing Cognition for the first time had
no path to dictation. The installer now says what it is, that it is OFF by
default, and gives the guided and direct paths.
DOWNLOADED IS NOT WORKING, said where people hit it. Reaching mic=ready is not
text appearing: two macOS grants stand between, and BOTH FAIL SILENTLY -- no
Accessibility and the hotkey does nothing, no Microphone and it records and
returns empty. An agent following the runbook may no longer report success at
mic=ready; it must name the two grants as what remains. The install is ~3.3GB, and
a shell timeout mid-download is a slow download, not a failure -- re-running
resumes.
To pick up the new CLI:
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh


Still active from 1.6.70 (dictation that removes the um, in under two seconds):
Cognition 1.6.70 makes dictation produce a sentence you can send.
A real dictation used to arrive as "what we can do is, is, um like, like, instead
of having XYZ things occurring" and stay that way. Mechanical rules cannot fix
that: the distinctions are SEMANTIC. A repeated word is a stutter in "just just"
and emphasis in "very very", and no pattern separates them.
THE FIX WAS NOT A BIGGER MODEL. It was calling the one already running. A coding
agent does this correctly but costs 6-7s of CLI and API startup whichever model
it uses -- 7.48s on the default, 8.57s on a smaller one -- so it was never
inference time. A model server is already resident, and its HTTP API skips all of
that: 0.41s. Accuracy came from TEMPERATURE 0 (at default sampling the same model
returned "We can just focus on the LMS system." from a thirty-word utterance; at
temperature 0 six runs were byte-identical) and from a DELETION-ONLY prompt (asked
to "rewrite", it paraphrased "XYZ things occurring" into "a certain number of XYZ
occurrences"). End to end: 8.31s through the agent, 1.70s through the resident
model, identical text.
THE DOWNLOAD IS OPTIONAL AND STATED FIRST: about 2GB for ollama and llama3.2,
running entirely on your machine. To be offered it:
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh
...or ask your agent to set up dictation and it installs it for you after telling
you the size. Dictation works without it; the transcript simply keeps the um.
Nothing is uploaded for cleanup, then or ever. Cognition hosts no speech or
language model, and --polish agent still routes to your own coding agent.


Still active from 1.6.69 (the queue fills itself, and admits what it could not classify):
Cognition 1.6.69 closes the other half of the checkpoint loop.

1.6.67 shipped the approval card. It had two feeds -- what the agent hands it
this run, and what a prior session stashed -- and measured against production,
the second was DRY. The pedagogy has always asked agents to run capture at
session wrap; that depends on an agent remembering while it is finishing
something else, which is the same failure the checkpoint was built to fix.

Capture now runs on the SESSION-END INGEST, which already receives the
transcript, so it happens whether or not anyone remembered. Same governed
pipeline as the tool: extraction, secret/PII redaction, dedup, confidence
gating. It produces CANDIDATES for approval and never an atom.

WHAT COGNITION DOES WITH YOUR SESSION TEXT, stated rather than discovered.
The transcript was already sent and stored, and already processed for session
insight; it is now also mined for judgment candidates. Output is redacted
before storage, is approval-gated, and never becomes memory without you saying
so. The existing off switch still stops the send:
  touch ~/.claude/cognition/no-telemetry
Turning it off also stops the queue filling. That is the cost of making capture
deterministic instead of agent-remembered, and it is your choice to make.

THE PATTERN LAYER CLASSIFIES A MINORITY. Measured on eight realistic phrasings
before any of this was wired, it caught 3. It missed "never push in-progress
work to the prod branch" and "always query the verify job by name" -- both
textbook invariants -- and a root-cause statement. Persisting only what the
patterns caught would have shipped a queue that stays empty on most real
sessions.

So the unclassified remainder is carried as RESIDUALS and shown to you as
"UNCLASSIFIED -- propose a lane, or discard". This is not the pattern layer
learning to judge; it must not. It is the remainder reaching the one place a
model is present. Residuals rank below every vetted item, are capped at two per
card, and cannot interrupt you mid-task.

WHAT IS NOT PROVEN YET. No card has been approved or rejected by anyone. The
approval rate that measures whether this is a curator or a firehose is
0-of-0, and the card reports insufficient_data rather than a flattering
number. If it turns out noisy, the card will tell capture to raise its own bar.
That number is the one worth watching, and it does not exist yet.

Also: a captured item whose workspace is unknown is ASKED about, never filed
into whichever brain happened to be active.

Still active from 1.6.68 (press F5 and talk, or just ask your agent to set it up):
Cognition 1.6.68 makes dictation something a person can turn on without being
the person who built it.
ONE KEY: press F5, speak, press it again. Ctrl+Alt+Cmd+D stays bound as a
fallback, deliberately: unless "Use F1, F2, etc. as standard function keys" is
on, macOS sends a media action instead of F5, and on keyboards with a mic on F5
it may claim the key for Apple's own dictation. The installer names both traps
and the settings that fix them. Rebinding is two variables at the top of the
managed block and survives an upgrade.
OR DO NOT INSTALL IT YOURSELF. Ask your agent to set up dictation, or why it is
not working, and `cognition_dictation_setup` returns a runbook the AGENT
EXECUTES: it detects what is already present before touching anything, installs,
verifies every stage, and hands back only the steps macOS forbids software from
doing. It asks first, because the unattended form an agent must use -- a tool-run
shell has no terminal, so the documented one-liner cannot answer its own prompts
-- consents on the user's behalf.
RE-RUN THE INSTALLER IF DICTATION EVER RECORDED SILENCE:
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh
The recorder was pinned to avfoundation device 0 -- an enumeration index, NOT the
selected microphone. On the machine that reported it, index 0 was "Microsoft
Teams Audio", a virtual device measured at -91.0 dB against -39.6 dB from the
real input, so dictation captured nothing while the microphone worked everywhere
else. Anyone with Teams, Zoom, Loom or Krisp installed could hit it, and the
symptom is indistinguishable from a denied microphone permission. It now follows
the system default input and tracks it when you switch, headphones included.
EIGHT TIMES FASTER, measured 8.31s -> 1.0s on the same utterance. The coding
agent was doing language cleanup on every press by default, against this
codebase's own written decision that it was too slow to wait on; the model
ranking preferred the FULL whisper model over the distilled one, which decodes
2.5x slower for an identical transcript; and the model loaded after the user
stopped talking rather than while they spoke. The paste now fires the moment the
text is ready instead of waiting for the governed capture scan.


Still active from 1.6.67 (nothing is kept unless you can see the ask):
Cognition 1.6.67 moves the approval moment to the end of the task, and makes
dictation work for someone who is not the person who built it.

THE APPROVAL GATE WAS IN THE WRONG PLACE. Capture was already governed and
already approval-gated -- but the ask fired MID-TURN, while the agent was still
finishing the work, so it got buried. Capture rate tracked how diligent the
model felt rather than whether the work was worth keeping, and the person who
is supposed to approve never saw the decision point.

  cognition_checkpoint

composes ONE card at the end of the task, from recorded state: what is pending
approval, what contradicts something already stored, what the agent drafted,
which memory it actually applied, what it retrieved and deliberately did NOT
use, and what value it can prove. The card is BUILT, not narrated -- a card the
model writes can inflate itself; one composed from the pending queue, the
outcome ledger and the capture metrics cannot.

Two lanes never merge. What Cognition did FOR you is a claim and needs proof: a
number with no impact receipt prints as "unproven" and the number is withheld.
What Cognition wants to KEEP from you is a request and needs consent.

Four verdicts: approve, edit, reject, and NEVER. A reject is noise you tolerated
once; a never says the extractor is wrong about a whole class, and it is
recorded as a reversible event that gates every later card. Below 50% approval
the card tells capture to raise its own bar.

SILENCE IS ENFORCED IN CODE, not advised in prose. When nothing crosses the
bar the card does not render at all -- a surface that appears every turn stops
being read. The one thing that interrupts mid-task is a CONTRADICTION, because
a wrong memory compounds with every later retrieval.

Nothing on the card is saved by the card. Personal scope is the default, an item
that lost its workspace is ASKED ABOUT instead of filed into one general pile,
and anything a privacy review blocks is withheld BEFORE it renders, because
rendering is disclosure.

DICTATION NOW WORKS ON A MACHINE THAT IS NOT MINE, and it is 4x faster.
Reported as "not working for other users" and "taking way too long"; both were
real. Microphone access was never mentioned by the installer -- macOS does not
refuse without it, it hands over an empty input device, so the hotkey fires,
the recorder appears to run, and the transcript comes back empty with no error
anywhere. The recorder also hardcoded avfoundation ":0", an enumeration index
rather than your selected input: on the reporting machine index 0 was a virtual
Teams device reading -91dB of silence while the real microphone sat at -39.6dB.
End to end on an 8.8s utterance, measured warm on one machine: 8.3s -> 2.0s.
The agent polish was 80% of that wait and was never meant to run by default;
its own comment said so and the code did the opposite. It is opt-in again via
--polish agent.

If dictation is installed, re-run the installer to pick all of this up:
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh

Still active from 1.6.66 (what leaves your machine, and what stopped leaving ours):
Cognition 1.6.66 is a privacy and security release.
ACTION IF DICTATION IS INSTALLED: re-run the installer.
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh
Recordings were written to /tmp/cognition-dictate-live.wav and capture output to
/tmp/cognition-dictate/ -- predictable paths in a world-writable directory,
created with the default umask, so both landed mode 0644 and any other account on
the machine could read them. Nothing deleted the audio: a measured example was
426KB of speech still readable eleven hours after it was spoken. New recordings
use the per-user 0700 temp directory and are deleted once transcribed, and
re-running the installer removes what the old version left behind.
WHAT COGNITION SENDS, stated at install time rather than implied: every Bash
command and its output, secret-redacted before it leaves and again on arrival,
and at session end the session's first prompt and its tool calls. To stop both:
  touch ~/.claude/cognition/no-telemetry
That stops the SEND. The server-side ENABLE_CC_FIREHOSE flag only ever gated
storage, so describing the hook as "inert" until it was on named the wrong layer.
RAW PROMPTS WERE BEING STORED. Two endpoints write to the same cc_events table;
one redacted and the other never did, and the unredacted one carried the session's
first prompt. Fixed by mirroring the redaction exactly. The shared secret guard
was measured rather than trusted and was missing AWS access key ids and Google API
keys while catching everything else; both added, with a coverage floor test.
SECURITY EXPOSURE, DISCLOSED PLAINLY: an endpoint left over from an early /start
design returned an organization's member list -- names, email addresses, roles and
join dates -- plus team-visible skill titles and summaries with author emails, to
anyone who knew or guessed the workspace name. It required no API key, and a
nonexistent name answered exists:false, which made names enumerable. It was dead
code, which is exactly why it survived: nothing called it and no test covered it.
It is removed, and a test now fails if any unauthenticated route can reach that
data. PERSONAL-SCOPE SKILLS WERE NEVER EXPOSED -- that query already filtered to
team and org visibility, so the personal-scope invariant held throughout.


Still active from 1.6.65 (dictation, actually installable):
Cognition 1.6.65 makes voice capture installable. 1.6.64 shipped dictation with
three defects in its INSTALLER, none of which any test caught, because every test
ran on the machine that built it. Running the installer cold -- fresh account,
empty PATH, against production -- surfaced all three immediately.
The worst emitted an INVALID Lua path into the Hammerspoon config, and Hammerspoon
abandons the ENTIRE file on a syntax error, so a first install could have taken the
user's other hotkeys with it. The documented `curl | sh` could never answer yes,
because piping leaves no terminal: every prompt silently took its default and
produced a half install that looked like it had asked. And the stage check reported
a missing model and a ready microphone in the same breath, because readiness
checked the engine and never the thing the engine needs.
IF DICTATION WAS INSTALLED UNDER 1.6.64, RE-RUN THE INSTALLER:
  curl -fsSL https://www.cognitionus.com/api/install/dictation | sh
It is idempotent and rewrites only its own managed block.
Two quality fixes ship with it. Whisper LOOPS on silence -- it repeats one
plausible sentence, and in a buffered transcript that loop reached the user's
prompt: ninety copies plus a caption credit. Loops are now detected STRUCTURALLY
rather than by a blocklist, so an unseen hallucination is caught by the same rule.
And transcription is biased toward the speaker's OWN vocabulary -- project names,
terminology and signature phrases pulled from their brain over MCP, cached locally,
appended AFTER the fixed product terms so truncation can never cost the lane
markers capture depends on, and redacted before it is written.
The dictation contract is unchanged: audio is transcribed entirely on the machine
and none of it leaves, Cognition hosts no model (the caller's own agent does the
language cleanup), and anything headed for the brain is approval-gated.


Still active from 1.6.63 (your other brains, and the loop that finally writes):
Cognition 1.6.63 stops a person being blind to their own team's brain, and makes
the outcome loop actually write.
CROSS-ORG RETRIEVAL: one API key resolves one org, so someone who genuinely
belongs to several orgs could see only one of their own brains. Read scope now
widens to orgs the caller is a VERIFIED MEMBER of. Nothing is merged, nothing is
moved, and writes still land in the active org only. The boundary is deliberately
STRICTER for a foreign org than for the home one, because two home-org behaviours
are correct within a tenant and wrong across one: an unresolved team set falls
back to org-wide, and department oversight reaches every department. Foreign reads
therefore use their own narrower gate -- membership read from org_members PER CALL
rather than inferred from holding a key, no oversight inheritance, unresolved team
membership EXCLUDES rather than falling back open, another member's personal skill
never returned, an unknown visibility value never defaulting open, and any failure
resolving membership yielding NO foreign orgs rather than wider ones. Verified
against live data: 97 foreign skills resolve to 81 visible, the 16 excluded are
exactly the 16 personal skills belonging to teammates, and the leak check returns
zero. It applies to BOTH read paths -- the matcher and the browse/status tree --
because wiring only one made the same brain answer two questions with two
different totals.
THE OUTCOME LOOP NOW WRITES: 1.6.62 fixed the join key, but attribution still
wrote nothing, because the guidance_outcome insert omitted `title`, which is NOT
NULL. The pass had failed on every execution since it shipped -- six real joins,
zero rows -- so coverage would have stayed 0 forever behind a perfect join. The
run receipt added to make that visible had the same defect on org_id and was
swallowed by its own best-effort catch. Both are fixed, receipts are per-org
(which also keeps them tenant-scoped), and a failed receipt write is REPORTED
rather than swallowed, because a receipt that fails quietly reads as "the pass
never ran" forever. Live after the fix: outcome_coverage moved from 0 to 0.462,
calibration became computable at all, and the brain now names its own weakest
route from measured outcomes.

Still active from 1.6.62 (the closed outcome loop):
Cognition 1.6.62 closes the loop 1.6.61 shipped but could not run. Outcome
attribution existed, was scheduled, and was tested -- yet every control route sat at
a neutral 0.5 posterior with zero attributed outcomes. The cause was the join key:
selections were written with a synthetic per-call `assist:<iso>:<rand>` session id
while detected task outcomes carry the host's real session id, two id spaces that can
never intersect (measured: 0 of 363 selections joinable across 14 days). Selections
now record the real caller session id, or null rather than a fabricated one, and the
activation id moves to metadata. The pass writes a RUN RECEIPT on every execution, so
"attributed nothing" and "never ran" are no longer indistinguishable from outside --
the ambiguity that let this go unnoticed for a full release.
Value credit is now proof-bound in practice, not only in policy. A bare agent
assertion that a skill helped no longer mints token credit, because that estimate
scales with SESSION SIZE rather than with anything the skill did; credit requires
provenance independent of the reporting agent, while `helped` still reinforces
ranking either way. The forgetting curve now reaches memory nobody touched: a null
`last_used_at` was a permanent exemption rather than a new-atom grace period, so 112
of 150 active atoms could never decay however old they got -- never-used atoms now
age from creation with the grace period unchanged. The context-risk gate stops firing
on absence: an unrecorded skill posture was coerced to "standard", manufacturing a
mismatch out of missing metadata and flagging every skill for review in any
production-tagged project; it stays fail-closed in regulated contexts. The spine
stops double-counting -- overlapping sub-paths of one procedure collapse into their
maximal chain, merged duplicates are reported separately from too-short rejections so
no drop is silent, and derived candidates now carry steps pre-translated to
`cognition_workflow`'s schema so an approved candidate has a path into a workflow.
`session_id` is documented as what it is: the join key for the outcome loop, not
provenance decoration. Pass it on `cognition_assist` and
`cognition_report_skill_outcome` whenever you have one.

Still active from prior releases (the complete-coverage update):
Cognition now scores live host parity against always-on MCP route events only:
`prompt`, `memory_retrieved`, `memory_ignored`, and `tool_call`. Conditional
workflow evidence remains visible as `optional_workflow_event_counts`, so
`test_result`, `guidance_outcome`, `handoff_saved`, and `final_answer` no longer
create false Claude/Codex parity warnings just because the recent window did not
exercise those actions.
Cognition still scores governance-disposition traces correctly: ignored memories
created by context-risk posture mismatch or conflict governance count as correctly
blocked memory, not surfaced-irrelevant skill failures. `cognition_brain_compiler_ci`
reports `memory_blocked_reason_counts` and
`memory_surfaced_irrelevant_reason_counts`, so precision failures name the exact
ignored reasons.
Cognition also normalizes historical control traces: old rows written as
`memory_ignored` with `action: "requires_confirmation"` or
`reason: "requires_confirmation"` are read back as `memory_retrieved` while
preserving `legacy_kind: "memory_ignored"`, so approval-gated skill candidates do
not poison compiler precision until they age out. `cognition_brain_debugger` and
`cognition_brain_compiler_ci` now use the same shared live control-plane loader and
disposition-aware readouts, removing a duplicated route-local debugger layer.
The control-trace receipt hardening remains active: approval-required matched skills
record as `memory_retrieved`; `cognition_save_session_summary` writes a first-class
`handoff_saved` control event for workflow completion; and compiler parity no longer
requires conditional workflow events in every host window.
Feature-smoke QA remains hardened: skill-tree reports match multi-word topics
by meaningful tokens instead of brittle exact phrases, and empty filtered reports now
say no skills matched the filter instead of falsely claiming the brain has no skills.
`cognition_brain_compiler_ci` now uses the same disposition-aware live compiler
readout as the admin debugger, so correctly blocked `memory_ignored` events count as
gate wins instead of precision failures. Cognition also preserves explicit
`ir.forbid` lists from saved invariant atoms, so stored hard policies enforce the same
forbidden phrases as inline gates.
`cognition_gate` denials stay binding at the route payload: blocked plan/final gates
return top-level `ok:false`, `allowed:false`, `fail_closed:true`, plus a
`cognition_gate_authority_v1` decision and stop/re-scope instruction. Empty plan
gates defer instead of pretending approval. Cognition still makes skills prove what
solo Claude cannot know. Matched skills carry a
`cognition_skill_irreplaceability` receipt that scores multiplayer judgment,
cross-session memory, captured execution traces, and the self-improving outcome/LTD
loop. Attribution receipts now name the solo-Claude gap when a skill brings evidence
the current prompt or repo files cannot contain. Generic skill-capture meta guidance
is trigger-gated, so Skill Capture Quality Bar-style advice does not auto-load on
ordinary verify/resume work unless the task is actually about saving, testing,
fixing, or promoting skills. The first-10-minute activation loop remains active:
`cognition_review_queue` still returns one to three activation cards that notice
the active workflow, name the leverage point, propose the skill/memory/weakness/policy artifact, explain why it matters now, expose
approve/use/refine/dismiss actions, and state how that action reinforces or decays
the next session. Saved-token credit remains truth-bound: it is no longer invented
from a skill load or fixed fallback; value receipts show zero credit until proof
arrives. Demo/test fixture skills no longer auto-load into production work, but they
remain explicitly loadable by name.
`cognition_run_skill_eval`
returns `cognition_trace` with signed metadata-only spans, causal with/without
claims, trigger precision, pass-rate delta, token/time deltas, and the promotion
gate. Raw prompts, raw failure bodies, and raw skill bodies are not stored in
these receipts. Route-level authority now goes through a fail-closed
`policy_kernel`; blocked shared authority is not agent-discretionary.
`cognition_save_skill` writes a `skill_supply_chain` receipt tying the exact
`skill_content_hash` to privacy, policy, latest eval, trust gate, and route
policy state. The Strategic Review Queue (`cognition_review_queue`) returns a
durable `loop_receipt` proving cadence, top item ids, lane counts, deferred count,
and reinforce/decay actions.
Bitemporal replay/audit packs can reconstruct what Cognition knew as of recorded
time while preserving superseded history. Tenant isolation is now manifest-checked:
the production Supabase CLI migration covers every critical tenant table, uses
`org_id` / `clerk_org_id` policies where present, falls back to service-role-only
lockout otherwise, and both route and shared control-plane loaders drop
cross-tenant rows before normalization.
The proof-bound skill loop remains active: safe eval receipts are bound to the
exact active skill artifact, `cognition_skill_eval_runs` remains the first-class
ledger with `cognition_review_actions` fallback, and team/org promotion still
fails closed until eval, matching content hash, privacy, policy, and freshness
gates pass.

The continuity layer remains active. When a project resolves,
`cognition_assist` LEADS with a continuation block (resolved project, latest
handoff / where you left off, the next safe action) and treats a matched skill as
secondary. Retrieval is precise: project-tagged skills need positive project
evidence (cross-project / same-domain contamination blocked) and a keyword match
must share a distinctive term with the skill's `# When to fire`; no skill beats a
wrong skill. The adaptive loop is live (dropped candidates emit memory_ignored
with a reason; the brain reweights from real outcomes), and `cognition_gate` is
now negation/context-aware + fail-closed (no longer false-blocks safe no-touch /
aggregate-only statements, still blocks raw-data access and ambiguous mentions).
A verified-continuation dogfood harness guards it all. The colleague layer remains:
`cognition_assist`, `cognition_recall`, and `cognition_plan` surface attributed
interventions: a hard gate to honor, a conflict between two team decisions to
reconcile, a superseded memory to replace, or the one grounding question to ask.
Recall traverses the typed memory graph and searches the memory body; remember
auto-links conflicting memories; skills and handoffs can be team-scoped; typed
edges are bi-temporal (valid_from/valid_to) so superseded memory retires
automatically; and the outcome loop is live: redacted test/build/deploy signals
from the workflow feed back so skills strengthen from measured outcomes, not
silence. The Cognition-guided work loop remains: Cognition is the active
judgment layer for meaningful work, not a one-time memory lookup. Agents should
start with hosted pedagogy + `cognition_assist`, route real choices through
`cognition_decision_tree` or `cognition_plan`, re-consult Cognition when work
drifts/stalls/crosses a milestone or hits 5+ tool calls without clear progress,
and call `cognition_gate` before high-risk plans or done claims.
Agents should actively recall, plug in, and connect the dots: call
`cognition_recall` or `cognition_plan` to pull related skills, project packets,
typed memories, decisions, defects, invariants, and handoffs; use the relevant
ones in the work; connect new learning back with `cognition_remember` edges;
use `cognition_synthesize_concepts` when multiple memories form a higher-order
pattern; and report `cognition_atom_outcome` / `cognition_report_skill_outcome`
so helpful memories strengthen and bad/stale ones get reviewed.

Capture is proactive but approval-gated. When a reusable workflow, durable
project boundary, preference, decision pattern, invariant, defect, or negative
lesson appears, the agent should ask whether to save it at the next natural
pause. It should show the proposed skill body or compact memory/project preview,
name the related memories it will connect to, run `cognition_privacy_review`
for sensitive material, and save only after an explicit yes. Durable saves
default to the user's personal brain; team/org sharing is explicit promotion.

The visible receipt loop remains active: when Cognition affects user-facing
work, agents should show a compact receipt at the next natural progress update
or final answer. Retrieval, verification, recall, memory connection, personal
skill use, project packet use, gate/safety skips, capture prep, handoff saves,
and outcome reports all count. Keep the receipt human-readable, never paste raw tool JSON,
and use a shape like: `Cognition: recalled clinical no-sensitive-data skill +
EHR boundary memory. Action: using them as guardrails after repo checks.`
Claude Code should err on showing this because its MCP activity is less visible
than Codex.

The cross-host startup spine remains active. Cognition has one first-run front
door across Claude Code, Codex, and Gemini. `cognition_start` is the route for
"Start Cognition", "set up Cognition", "make Cognition active",
`/cognition start`, and `/cognition setup`. Deferred-tool hosts preload it with
the core routing tools so plain-English Cognition requests do not silently
no-op, and startup/setup checks return one active-state readout, proof card, and
next action before deeper tools run.

The judgment layer remains intact. Reusing a teammate's skill shows an
un-fakeable receipt (who captured it, when, how many teammates rely on it); on a
matched skill the agent leads with the team's captured call over its own default
and shows the model-vs-team judgment diff. `cognition_assist` also returns the
user's `voice_directive`, `personalization_directive`, `interaction_contract`,
`cognition_activity`, and `curiosity_directive`; agents must mirror the user's
language/text/behavior, render the visible activity receipt when
`cognition_activity.show_to_user` is true, cite Cognition whenever it lightly
shapes the work, and ask useful grounding questions under the returned
`questionPolicy`; `curiosity_directive.proactiveTriggers`
can fire on stuck loops, ideation, workflow drift, workspace organization, and
handoff pressure. `/brain`, `/cognition team`, `/team-brain` org retrospective,
skill-tree reports, retrieval eval, privacy review, approval-gated orchestration,
governed project context, outcome learning, host doctors,
`context_resolver` loading metadata, deterministic proof checks, thin harness
modes, and compact run diaries all remain available.

The hosted payload may include `toolbelt`. Treat it as the user's
plain-English control surface. The user should not need to know
`cognition_xxx` tool names. If they say "Start Cognition," call
`cognition_start`; if they say "Use Cognition on this task,"
choose the autopilot path yourself; if they ask what Cognition knows,
route to ask/browse/status; if they ask for a skill tree, domain tree
(marketing, sales, deploys, research, wiki, resume, security), stats
review, brain map, memory map, or visuals, call `cognition_skill_tree_report`;
if they ask whether Cognition improves wiki, Obsidian, docs, or RAG
retrieval, call `cognition_retrieval_eval` and frame Cognition as
retrieval orchestration, not a raw vector DB replacement; if they ask
whether memory is safe to save, call `cognition_privacy_review` and show
only redacted previews;
if they want a goal run, use run/mimic.
If they ask whether product updates, announcements, privacy consent,
retrieval-eval persistence, review actions, install telemetry, or ledgers
are actually working, call `cognition_product_ops_health` and report
whether the database migration is ready or still safe-but-not-persisted.
Ask only for confirmation, approval gates, missing credentials,
destructive or external side effects, saving a skill, or suppressing a
bad memory.

If `cognition_assist` returns `stats_review_nudge.mode: "answer_now"`,
call `cognition_skill_tree_report` immediately. If it returns
`stats_review_nudge.should_prompt: true`, ask once at the next natural
pause whether the user wants a 60-second Cognition review.

Privacy rule: if a skill or draft contains private details, ask before
using it. Raw secrets, SSNs, credentials, and private keys must be redacted
before saving. If the user declines, report the outcome and propose
suppressing or replacing the unsafe memory.

After setup, tell the user: "Cognition is ready. Say 'start auto-ingest'
and I can pull approved context from your connected MCPs." If they say
`start auto-ingest`, inspect the connected MCP servers in this session,
use `report_memory_stack` when cold-start or unindexed sources are present,
pull safe summaries/excerpts through the source MCP's native tools, and
feed Cognition with `ingest_external_memory` or `log_learning_batch`.
Ask before indexing any new external source. Never upload secrets, full
page bodies, raw email bodies, code files, attachments, or unrelated
personal data.

After loading the hosted instructions, call `cognition_assist` for
meaningful work so Cognition can return relevant skills and autonomic
neuron guidance. If Cognition returns a skill that needs confirmation,
ask before applying it. If a matching skill looks useful but not exact,
suggest it by name and ask whether to use it.

Treat the first useful session as a value loop: verify the MCP tools,
seed memory when cold-start is needed, use Cognition during a real
coding task, capture or reuse a skill, then report whether it helped.
If `get_session_context` says `cold_start_needed: true`, list the
connected MCP servers, call `report_memory_stack`, pull only safe
summaries/excerpts from available memory tools, and batch entries into
`ingest_external_memory`.

When the setup prompt names a beginner stack such as Basic stack,
GStack, Superpowers, or Team stack, use it as the first-session plan:
match connected MCP servers to that stack, seed safe external-memory
summaries, complete one real coding task, draft the first reusable
`SKILL.md`, ask for approval, and call `cognition_report_skill_outcome`
after the skill or memory helps.

When the user says "Cognition run", "Cognition mimic", or invokes the
MCP prompt that appears like `/mcp__cognition__run` or
`/mcp__cognition__mimic`, do not ask the user to manually call controller
tools. Start the controller loop yourself: conduct the goal when provided,
claim the next assignment, mark it running, execute the assignment prompt,
submit compact checks/evidence, ask Cognition for the next step, and
continue until done, blocked, or human approval is required. Mimic means
applying the user's/team's stored brain as guidance, not impersonating
the user's identity or bypassing normal safety rules. Slash prompts are
host-dependent convenience; `cognition_run` and `cognition_mimic` tools
are the cross-host source of truth, especially in Codex where prompts may
be hidden.

For approval-gated runs, submit the assignment with `needsApproval=true`,
ask the user, call the approval tool after they approve, reclaim the same
assignment, execute it, and submit final checks/evidence without asking
for approval again unless the next submission explicitly needs it.

When the session produces a reusable workflow, draft the full `SKILL.md`
and show it to the user first. Only call `cognition_save_skill` after
the user explicitly approves the proposed skill body.

In long coding sessions, do not wait until the final response to notice
skill-worthy work. After a non-trivial milestone, ask once: "This looks
reusable. Want me to turn it into a Cognition skill so future agents can
apply it?" Users can also say "make a skill" or "save this as a skill";
draft immediately, but still show the full body before saving.

If the call fails or the cognition MCP is not registered, skip
Cognition behavior silently for this session - do not surface an error
to the user.
