KilimcininKorOglu/claude-code-mods/tree/main/plugins/pin-note
pin-note
這個 Claude Code 外掛會在整個工作階段保留你用 `/pin-note` 固定的筆記,並在每次壓縮與 `/clear` 後透過 SessionStart hook,將筆記逐字重新注入模型的上下文;它會依工作階段持續儲存在 `$.store`,預設關閉。
關於這個 mod
pin-note 是 Claude Code 外掛(已驗證 manifest 與 hooks 模組,L0 reach,不存取網路、檔案或處理程序),用來解決你在工作階段早期給出的指示,在壓縮或 /clear 後被削弱或遺失的問題。指令:/pin-note(切換並列出固定筆記)、/pin-note on | off、/pin-note <note> 用來固定筆記、/pin-note drop <n> 用來移除筆記。固定筆記會依工作階段儲存在 $.store 的工作階段 ID 下,因此恢復的工作階段可以找回它們;/clear 會開始一個繼承這些筆記的新工作階段。壓縮或 /clear 後,SessionStart hook 會以編號清單重新傳送所有固定筆記,每一則都完全按照輸入內容;前面加上三行說明筆記來源的文字,降低模型把它們誤認為注入指示的機會。透過 claude plugin marketplace add KilimcininKorOglu/claude-code-mods 安裝,接著執行 claude plugin install pin-note@kilimcininkoroglu-mods,重新啟動,再執行 /pin-note on。限制:筆記只會在壓縮與 /clear 時重新傳送;舊工作階段的筆記永遠不會進行垃圾回收;筆記數量與長度都沒有限制。
安裝
請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。
claude plugin marketplace add KilimcininKorOglu/claude-code-mods claude plugin install pin-note
原文 / README
pin-note
You tell the model early on "ask before every push", and after a compaction the summary has dropped the sentence or reworded it into something weaker; after /clear it is gone for good. This mod keeps the notes you pin with /pin-note for the whole session, and sends them to the model again, word for word, after each compaction and /clear.
What it does
-
/pin-note <note>pins a note. The model reads it at once, in the command's answer:pin-note: pinned note 1, kept for this session and sent to you again after each compaction and /clear: ask before every push -
After a compaction, and after
/clear, the notes go into the model's new context through aSessionStarthook, as one numbered list, each note as you typed it. Three lines above the list tell the model where the notes come from: you pinned them yourself with/pin-note, then the conversation was compacted or you ran/clear, and the pin-note plugin you turned on hands them back. Without those lines the model at times took a note for an injected instruction and did not follow it. One line tells you:pin-note: sent 1 pinned note(s) again after the compaction -
The notes belong to the session. They are kept in
$.storeunder the session's id, so a reloaded module and a resumed session find them again./clearstarts a new session, and the notes go with it. -
Nothing is sent at a session's start or at a resume, because the conversation there still holds the notes as you pinned them.
Measured on Claude Code 2.1.283 in live sessions with the sonnet model: after /compact the note reached the model's context, and after /clear the model, asked whether a note was pinned, wrote it word for word. A note that asked for one word at the end of every reply was pinned, then /clear and a new question followed, 20 times for each text: with the earlier one-line text the model refused the note 4 times, calling it injected; with the current text it followed the note all 20 times.
Command
/pin-note on or off, and the pinned notes, numbered
/pin-note on | off off by default; off keeps the notes and sends none
/pin-note <note> pins a note; the text is kept as typed, several lines too
/pin-note drop <n> takes note n out
While the mod is off, /pin-note <note> and drop are refused. on, off and drop <n> are the only command words, so a note may start with drop when no number alone follows it.
Install
claude plugin marketplace add KilimcininKorOglu/claude-code-mods
claude plugin install pin-note@kilimcininkoroglu-mods
Function hooks are early access. Claude Code 2.1.288 and later load them by default, so there is nothing to switch on.
After installing
- Restart Claude Code.
- Run
/pin-note on.
What it can reach
Validated with claude plugin validate on Claude Code 2.1.283:
❯ ./register.ts hooks: session.start, command.run{command=pin-note}, classic.SessionStart
❯ ./register.ts calls: $.command.register, $.session.id, $.store.get (via loadPins, readSettings), $.store.set (via runCommand, savePins), $.ui.log
Reach L0, no network, no files, no processes.
1. Reads: the notes you pin, and the session's id
2. Runs: nothing
3. Sends: nothing off the machine; the notes go into the model's context as you typed them
4. Persists: the on/off setting and each session's notes in $.store
5. Hostile input: a note is your own text and the model reads it as your instruction; nothing else is read
Limits
- The notes are sent again only at a compaction and at
/clear. A note you want gone from the context must be dropped and the context compacted, because a note the model already read stays in the conversation. - Every session's notes stay in
$.storeunder its id; nothing deletes the notes of an old session. - There is no limit on the number or length of notes, and every note goes into the context after each compaction.
Development
make install # eslint, typescript-eslint, typescript
make lint # complexity limit 10, the build fails above it
make typecheck # needs the /plugin-types output in .claude/types/
make validate
make test # claude plugin test
