kivisolipse53 downloadsMark which characters were written by you, by an AI, or quoted from elsewhere, with plain-text inline markers. Every character, signed.
Every character, signed.
An Obsidian plugin that shows, in colour, which words of a note you wrote, which an AI wrote, and which you quoted.
English · 中文
| Write | Meaning |
|---|---|
| Plain text | Written by you |
&&text&& |
Written by an AI; &&text&&[@gpt] names the model |
&& Claude (claude-opus-5-5) … && |
A whole AI block, each marker on a line of its own |
@@text@@ |
Your own words inside AI text |
"text"[@key], 「text」[@key] |
A quote, credited to an author (a model's quote stays the model's until checked) |
Without the plugin, the note still reads as ordinary Markdown. The full syntax is in docs/SPEC.md.
Select text, right-click and choose Rakkan → Mark as AI-generated. What you type inside AI text is marked as yours. Reading view shows only the colours.
Human 37% · AI 38% · Quotes 25%; hover for the count by model and by author.@@…@@. Moved lines keep their authors. Copied text leaves the markers behind.- @key: Name (id) · human / AI / source · #colour, with an optional second · #colour where gradient text ends. Quotes take their author's colour.A detailed guide is in docs/GUIDE.md.
Rakkan comes with an Agent Skill that teaches an agent to sign what it writes: paragraphs in an AI block signed with its model ID, a few words inline, and the author's own markers left as they are.
npx skills add Kivisolipse/Rakkan
Or copy skills/rakkan into your agent's skills folder (~/.claude/skills/ for Claude Code). For an agent without skills, paste the body of SKILL.md into its instructions, such as AGENTS.md or CLAUDE.md.
The skill brings a small command that the agent runs itself, with Node.js 18 or later. rakkan sign marks exactly the characters the agent changed in your text, with the same diff as Paste revision. rakkan lint checks a note for markers that don't work: blocks left open, markers without a partner, [@key] that nothing defines. Without the skill, npx rakkan lint path/to/notes runs it too.
What the agent writes looks like this:
&& Claude (claude-opus-5-5)
Paragraphs the agent wrote.
&&
A sentence of yours, with &&a few words the agent changed&&[@claude-opus-5-5].
Requires Obsidian 1.8.7 or later, on desktop or mobile.
Rakkan is in Obsidian's community plugins. In Settings → Community plugins, select Browse, search for "Rakkan", then select Install and Enable.
By hand. Download main.js, manifest.json and styles.css from the latest release, put them in <vault>/.obsidian/plugins/rakkan/, and enable Rakkan in Settings → Community plugins.
Rakkan makes no network requests and collects no data.
npm install
npm test
npm run build # writes main.js
npm run demo # builds and installs into demo-vault/
npm run fuzz # the property-based tests at full length
Besides the unit tests, a property-based fuzz suite checks the parser, signing, quoting and Clarify quote against random text built from Rakkan's and Markdown's syntax: 16 properties, each run 100 000 times before a release.
MIT. Inspired by iA Writer's Authorship. Bundles monkey-around by PJ Eby (ISC).