Skip to content
Back to skills

Rationale Capture

ASecurity

Closes a change and writes only durable knowledge to the canon through finalize_change.

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
ai-agentsgoexpressgit

Works with

  • mcp

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add Ragosorio/Rationale --skill rationale-capture --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Rationale Capture?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Rationale Capture
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ragosorio-rationale-capture/badge)](https://www.skillsdirectory.com/skills/ragosorio-rationale-capture)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: "Closes a change and writes only durable knowledge to the canon through finalize_change."
argument-hint: "[statement]"
arguments: ["statement"]
disable-model-invocation: true
---

Close the current change with Rationale. Optional statement from the person:

`$statement`

Live Git context injected by the skill:

- Current HEAD: !`git rev-parse HEAD`
- Status: !`git status --short`
- Diff since HEAD: !`git diff --no-ext-diff HEAD`

If those lines still appear as literal `!`command`` text (for example, because this action arrived as an MCP prompt), collect the same data with the available Git tools before continuing.

Reply in the language the user writes in. Keep tool names, Record ids, field values, paths, and commands verbatim. Write candidate statements and rationales in the language the existing Records use.

1. Review the diff and the tests that ran. Separate observed facts from intent and inference.
2. Decide which knowledge will stay true after this change: why the code is the way it is and what must be preserved. What only describes this change (what was edited, the steps, temporary state) is not memory: it goes in `summary`, not in `candidates`.
3. **One decision per Record.** Split into several candidates when the parts could be replaced or revoked separately, answer different questions, or have different lifetimes. Do not break a single decision into fragments that mean nothing apart.
4. Call `finalize_change` with the preflight's `operation_id` (if there is one), a short `summary`, and the `candidates`. Each candidate has `kind`, `statement`, a `rationale` that gives the cause (not a repeat of the statement), `durability: "durable"`, and `bindings` to the code it governs (`src/x.rs` or `src/x.rs::symbol`). Name the Records it replaces in `supersedes`. Use the statement above only when it is not empty and expresses a real decision.
5. When nothing durable was learned, call `finalize_change` without candidates: no memory is written, and that is fine.
6. Rationale writes valid candidates as canonical Records in that same call, with agent provenance; there is no approval queue. Report what was written, what was discarded and why, and which Records were superseded.
7. If the response includes `conflicts`, a candidate tried to replace a pinned rule. Stop: show the person both statements and the question, and only after their explicit answer call `resolve_conflict(conflict_id, decision, human_answer)` with their literal words. Never decide for them.

When the `rationale` skill is installed, its `references/capture.md` and `references/records.md` cover candidates in depth, and `scripts/check_candidates.py` checks them against the gate's rules before you send them.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.