Skip to content
claudemods

Assumption Tracker Claude Code mod: a Claude Code assumption tracker

Log claims with /assume, then confirm or refute each one with written evidence; the history is kept per session.

Permissions

  • Reads filesCan read files and list directories on your machine ($.fs.read / list / stat / exists).
  • Runs commandsCan run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
  • Intercepts tool callsSees every tool call Claude makes (tool.call / tool.check) and could block or change it.
  • Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
  • Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
  • Stores dataKeeps data between sessions in the plugin's private store ($.store.*).
tested with
v2.1.307
last tested
requires
Claude Code ≥ 2.1.287
surfaces
none

Install inside Claude Code:

/plugin install assumption-tracker --marketplace YeonwooSung/my-claude-code-mods
All install options ↓

What does this mod do?

Assumption Tracker is a community mod by YeonwooSung (YeonwooSung), one of the plugins in the my-claude-code-mods collection. It is a Claude Code assumption tracker: you write down something you or Claude are taking for granted, and later mark it confirmed or refuted with a line of evidence. It is for the moments in a long session when "I think the API returns UTC" quietly turns into a fact nobody checked.

Everything goes through one slash command, /assume:

  • /assume add <claim> | <reference> records a claim as UNVERIFIED. The reference, such as a file path, is optional.
  • /assume confirm <id> | <evidence> and /assume refute <id> | <evidence> set the status. Evidence is required, so a claim cannot be resolved with nothing written.
  • /assume reopen <id> goes back to UNVERIFIED, clears the current evidence and keeps the history.
  • /assume show <id> prints one claim with its history, /assume list (or /assume alone) prints all of them, and /assume reset clears the records.

The answer comes back as plain command text, so it also works in headless sessions. The mod draws nothing on screen.

Install

Use any of the methods in the install block; they install straight from the author's own marketplace. Reload plugins or restart Claude Code, then run /assume help.

$ install assumption-tracker

Requires Claude Code ≥ 2.1.287

Installs from the author's own marketplace: YeonwooSung/my-claude-code-mods

  1. 1.One line, inside Claude Code

    /plugin install assumption-tracker --marketplace YeonwooSung/my-claude-code-mods

    Paste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.

  2. 2.From your shell

    claude plugin marketplace add YeonwooSung/my-claude-code-mods
    claude plugin install assumption-tracker@my-claude-code-mods

    Then run /reload-plugins in any session that is already open.

  3. 3.Try it without installing

    git clone https://github.com/YeonwooSung/my-claude-code-mods
    claude --plugin-dir ./my-claude-code-mods/assumption-tracker

    Loads the mod for one session only. Nothing is added to your settings.

How it works

The mod keeps its data in a small Feature class in hooks/core/feature.ts, and hooks/register.ts wires it to the /assume command and saves it with $.store. The part that matters is the status change, from feature.ts:

if (verb !== 'reopen' && !evidence) return 'Resolution evidence required: confirm/refute <id> | <evidence>'
item.status = verb === 'confirm' ? 'CONFIRMED' : verb === 'refute' ? 'REFUTED' : 'UNVERIFIED'
item.evidence = verb === 'reopen' ? '' : safeText(evidence, 2000)
item.history = [...item.history, { status: item.status, evidence: item.evidence || '(reopened)' }].slice(-20)

Each command runs through a queue, so two commands never write at once. The storage key combines the working directory and the session ID. If either changed while a command was running, the command is dropped with "Session changed; operation not applied". The text is cleaned by safeText (escape codes removed, obvious secrets masked) before it is saved, and the state is checked for size before the write. If the write fails, you get a visible error instead of a silent loss.

Customize it

There are no options in /config. The limits (200 claims, 20 history entries, the text lengths) are constants in hooks/core/feature.ts and hooks/core/runtime.ts if you want to edit a local copy. The | character separates the parts of a command, so a claim or an evidence line cannot contain one.

Permissions & safety

We read every file the plugin can execute before running it: plugin.json, hooks/hooks.json, hooks/register.ts, the three files in hooks/core/, and the tests. There is no package.json inside the plugin, no install script and no bundled or minified code. The repository's own package.json only holds development scripts and two dev dependencies.

  • Network: none. We found no fetch, HTTP or socket code, and the README says there are no network calls. No telemetry.
  • Stores data: claims, references, evidence and history go to the plugin's $.store, keyed by folder and session. Nothing else is written, and the mod does not touch ~/.claude, settings.json, shell files or any daemon.
  • Processes and files, disclosed but not used: register.ts builds a shared helper (lines 13 to 36) that can read files, run git and node through $.process.run, and replay a Bash command through $.tool.call. That is why claude plugin validate lists $.process.run, $.fs.* and $.tool.call. In this plugin, Feature.command never uses any of them, so /assume runs no commands and reads no files. The helper is code the author shares across the collection.
  • Tool-call hook: claude plugin validate reports the tool.call and command.run hooks as gating hooks without a .catch. The tool hook only observes when the Feature class has an observe method (register.ts:9). This one has none, so the hook returns next(e) untouched and never blocks or rewrites a call. /assume itself wraps its work in a try/catch and returns the error text.
  • Model influence: the mod does not add anything to prompts or tool results, and we found no hidden or zero-width characters. Its output goes to you as command text. If you paste that text back to Claude, Claude will read it, so keep claims honest.
  • Secrets: it reads no environment variables or credential files for /assume. Typed text is masked on a best-effort basis (core/redact.ts).
  • External requirements: none for /assume. The shared helper would call git and node, but only if code reached it, which it does not.
  • License: Apache-2.0, with a LICENSE file at the repository root (Copyright 2026 Yeonwoo Sung), so the mod is redistributable. The plugin folder has none of its own.

claude plugin validate reported no errors or warnings for the manifest and the hooks. It gave one non-blocking directory note: the plugin has no icon. The author's 7 tests passed on Claude Code 2.1.307.

Reads files
Can read files and list directories on your machine ($.fs.read / list / stat / exists).
Runs commands
Can run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
Intercepts tool calls
Sees every tool call Claude makes (tool.call / tool.check) and could block or change it.
Changes the UI
Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
Adds commands/tools
Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
Stores data
Keeps data between sessions in the plugin's private store ($.store.*).

Compatibility & troubleshooting

Checked with Claude Code 2.1.307 on macOS (validate and tests). The author ran their tests on 2.1.302 and says the live terminal and Desktop displays have not been checked. If /assume does not respond:

  • Run /reload-plugins or restart Claude Code after installing; the command is registered at session start.
  • You get an empty list in a new session or folder, because records are separate for each folder and session ID.
  • "Assumption not found" means the ID is not in the latest 200 claims; IDs keep counting up and restart only after /assume reset.
  • Put | between the parts: /assume confirm 1 | evidence text. Without evidence you get "Resolution evidence required".

To check it works, run /assume add The config is read at startup | src/config.ts, then /assume confirm 1 | checked in src/config.ts line 12 and /assume show 1.

FAQ

Does the Assumption Tracker check whether my evidence is true?
No. The README says the truth of the evidence text is not evaluated. /assume confirm and /assume refute only require that the evidence is not empty, and the mod stores whatever you wrote. There is no model call and no automatic source editing.
Where are my assumptions stored?
In the plugin's own store through $.store, under a key built from the working directory and the session ID. Reloading or resuming the same session brings them back, and a different folder or session starts with an empty list. /assume reset clears this mod's records only.
How many assumptions and history entries does it keep?
The latest 200 claims, and the last 20 status changes of each claim. Claims are cut to 2,000 characters, references to 500 and evidence to 2,000. The saved state is capped at 256 KiB, and a larger state is not saved.
Does it hide secrets I type into a claim or evidence?
It masks obvious ones, such as API_TOKEN=value, Bearer tokens, --password flags and passwords inside URLs, and it strips terminal escape codes, before storing or showing the text. The README calls this best effort, so do not paste real secrets into a claim.
Does it change how Claude behaves or block my tools?
No. It registers a tool.call hook, but in this version the hook returns the call untouched. The mod never injects text into prompts; /assume only returns text to you.
Pin Memo running in Claude CodeFeatured

Pin Memo

Pin notes and clickable todo checkboxes above the Claude Code prompt with /pin, saved per session.

  • above-prompt
  • Changes the UI
  • Adds commands/tools
  • Stores data

tested with v2.1.303

Context Inspector running in Claude CodeFeatured

Context Inspector

Shows what fills your Claude Code context, how much is re-reads and duplicates, and what compaction kept.

  • status
  • pane
  • toast
  • Writes files
  • Intercepts tool calls
  • Reads your prompts
  • Changes the UI
  • Adds commands/tools

tested with v2.1.303

>_ loop-detective

Loop Detective

Opens a case when the same Bash command fails the same way three times in a row, and shows it in the status line.

  • status
  • toast
  • pane
  • Intercepts tool calls
  • Changes the UI
  • Adds commands/tools

tested with v2.1.303

More in Timers, todos, standups, Slash commands.