ClaudeMods
☰
ZH-TW
● 0 人在線上 · 瀏覽 0 次
贊助提交作品
GitHub 儲存庫 · 發布者 fernandomoraes

loose-ends

一個 Claude Code 外掛,在提示列上方顯示對話中懸而未決事項的即時清單:尚未回答的問題、順帶提到的重點、注意事項與延後的工作,由小型模型在每回合後更新。

已翻譯

關於這個 mod

loose-ends 是一個 Claude Code 外掛(Claude Mod),在提示列上方的狀態列顯示對話中尚未解決的事項:沒人回答的問題、順口提到的重點、沒人回應的警告,以及被延後或略過的事情。它透過 turn.complete hook 讀取新訊息,呼叫 Haiku 判斷哪些被遺漏、哪些已解決;每回合最多新增 3 項,最新一輪對話會延後一回合再判斷。清單用 ui.render 繪製在 AbovePrompt,可用 ctrl+x ctrl+a 收合,項目可以點選或按 Enter 勾選。每個工作階段的清單儲存在 $.store,支援 --resume,保留最近 30 個工作階段。項目未完成時,/exit 會先詢問。每回合呼叫 Haiku 一次,只在互動式工作階段執行,claude -p 下不會啟動。提供 /loose-ends 系列命令管理清單。開發需要 Claude Code 2.1.278 以上,並設定 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1。

安裝

請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。

claude plugin marketplace add fernandomoraes/loose-ends
claude plugin install loose-ends
原文 / README

loose-ends

A live checklist above the Claude Code prompt of the conversation's loose ends: what was raised and then left behind when it moved on. An unanswered question, a point made in passing, a caveat nobody replied to, something deferred to "later" or skipped. Not the work in progress: that one you won't forget.

loose-ends demo

<sub>The demo is a recreation of the band, with the layout, colors and flow the plugin draws.</sub>

How it works

It is a Claude Mod: a plugin whose hooks are TypeScript functions running inside Claude Code.

  • After every main-loop turn (turn.complete), it reads the messages the checklist has not seen yet ($.session.messages()) and asks Haiku ($.model.complete) which of them were left behind and which open items the conversation settled. The latest exchange is held back one turn: something raised there is not a loose end yet, so it is judged once the next exchange shows whether it was picked up. At most 3 items are added per turn. The call runs outside the main context: the conversation's model never sees it.
  • The list is drawn in the band above the prompt (ui.render on AbovePrompt). Collapse it with ctrl+x ctrl+a.
  • Each item's ○ is a button that checks it off (and ✓ reopens it): click it in the fullscreen layout, or press ctrl+x tab to focus the band, walk with Tab or the arrows and press Enter.
  • Each session keeps its own list in $.store, so --resume brings it back. The last 30 sessions are kept.
  • /exit with open items asks first, from a command.run hook that runs the exit only when the dialog says so. It covers /exit alone: ctrl+c and ctrl+d raise no event a plugin can see, and session.end only observes. Turn it off with /loose-ends exit off.
  • Items you change by hand are pinned: the model never closes an item you reopened, and never adds back one you dropped.

Cost: one Haiku call per turn with the new messages (capped at about 40k characters) and the current list. It only runs in interactive sessions, never under claude -p.

/loose-ends

| Command | What it does | |---|---| | /loose-ends | The whole list | | /loose-ends add <text> | Add an item by hand | | /loose-ends done 2 5 | Mark items done | | /loose-ends undo 2 | Reopen an item | | /loose-ends rm 3 | Drop an item | | /loose-ends clear | Empty the list | | /loose-ends scan | Read the whole conversation again | | /loose-ends on / off | Show or hide the band (off also pauses the model calls) | | /loose-ends rows 12 | Rows the band may take | | /loose-ends exit on / off | Ask before /exit while items are open |

Develop

Needs Claude Code 2.1.278 or later (the build its types were generated from) with CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 in the settings env.

claude --plugin-dir .      # loads from disk, hot-reloads on save
bun test
claude plugin validate .claude-plugin/plugin.json

For type checking, run /plugin-types in a session, then bunx -p typescript tsc -p ..

To install it for every session:

claude plugin marketplace add fernandomoraes/loose-ends
claude plugin install loose-ends@loose-ends

更多類似作品