Stickies

io.github.dumbspacecookie由 GitHub 帳號 dumbspacecookie 發布v0.14.2更新於 Oct 24, 2026

Persistent, expiring, importance-graded sticky notes for Claude Code.

概覽

AI 產生的概覽

為助理提供依專案保存、會到期且分重要性的便利貼,並附上本機看板與可選的 git 同步。

可以做什麼
Stickies 把簡短的分类便利貼(decision、blocker、todo、preference、context)存進本機 SQLite 檔案,每則都有重要性等級與預設到期時間。MCP 工具 stickies_write、stickies_read 和 stickies_dismiss 讓助理新增、列出與清除便利貼,工作階段開始時還會自動把仍然有效的便利貼交回給模型。本機看板可檢視便利貼、由規劃路線圖產生的看板以及相依圖;便利貼也能匯出成 BOARD.md 或推送到 Discord。
適用情境
適合想要一份簡短、刻意記錄、會自動到期的決定、阻塞與待辦清單,並希望它在工作階段重置與 /clear 後仍然存在,而不是自動記住全部內容。適用於 Claude Code 或任何 MCP 客戶端的專案工作,也可用全域便利貼做跨專案任務。
執行需求
以 stdio 在本機執行,需要 Node.js 22.5 或更新版本以使用內建 SQLite。可透過 npm 套件 stickies-mcp 或 Claude Code 外掛安裝。可選設定:STICKIES_DB 指定資料庫路徑,STICKIES_SYNC_REPO 用於 git 同步,STICKIES_DISCORD_WEBHOOK 用於 Discord 鏡像。不需要帳號或 API 金鑰。
安裝前請注意
便利貼存放在本機 SQLite 檔案中,其私密性取決於該檔案;repo 模式會把便利貼提交進倉庫,因此其公開程度與倉庫相同。git 同步為可選,推送需要 STICKIES_SYNC_PUSH=1;Discord webhook 會把便利貼生命週期事件傳送給第三方。看板僅監聽本機並需要授權連結,啟用後看板寫回會修改規劃檔案。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Stickies,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Stickies (Claude Code plugin)

[npm] [MCP Registry] [License: MIT] [Node]

Persistent sticky notes for Claude Code. You pin a note — a decision, a blocker, a todo — and it survives session resets, /clear, and closing the terminal. Next time you open Claude in that project, the notes that still matter are handed back to it automatically.

Stickies is not a memory system, and it doesn't try to be one. It won't watch your session and decide what to remember. It's the opposite: a handful of notes you (or Claude, on request) write down on purpose, that expire on their own, and that you can read, prune, and trust. No vectors, no LLM summarization, no cloud. If you want an AI that auto-remembers everything, use Claude Code's built-in memory — it's on by default. Stickies is for when you want the twenty notes that actually matter, and you want them to expire.


Quick start (60 seconds)

You need Node ≥ 22.5 (node -v to check — it's for the built-in SQLite).

sh
claude plugin marketplace add dumbspacecookie/stickiesclaude plugin install stickies@stickies --scope user

Restart Claude Code. That's it — install once, it works in every project. Now try it:

  • Ask Claude to remember something: "pin a P1 todo: fix the auth leak before release." Claude writes it down; it'll be waiting for you next session.
  • See your notes: type /stickies in Claude Code. Prefer a shell? npm i -g stickies-mcp gives you a stickies command — then stickies list.
  • Open the board in a browser: /stickies dashboard, then stickies dashboard --link for an authorized URL (the board serves your notes, so it only answers a browser you've let in).

Nothing leaves your machine. Everything is a local SQLite file on your disk until you turn on optional git sync.


Where it works

Notes belong to the project, not the app you're in — one local database, scoped by project. What changes between surfaces is how much happens automatically.

SurfaceWhat you getHow
Terminal (Claude Code CLI)✅ the full loop — auto-capture, session-start digest, /stickies, statusline, dashboardinstall the plugin
Claude Desktop (chat app)✅ read / write via MCP tools (no hooks; pass the project path)add the MCP server to claude_desktop_config.json
iPhone / web (Remote Control)✅ full loop — the phone drives a session running on your machinerun claude remote-control on your machine
iPhone / web (cloud sandbox)✅ full loop via repo-mode — notes committed into the repostickies init-repo (see Repo-mode)
Any MCP client✅ read / writeit's on the MCP Registry as io.github.dumbspacecookie/stickies
Anywhere, read-only✅ a glance at your boardDiscord digest / board card

Two things here you won't find elsewhere

  • Zero-turn capture. Claude parks a note by writing one line in a reply it was already writing — !!sticky todo P1 :: fix the auth leak — and a Stop hook persists it. No extra tool call, no extra turn, no tokens spent on a round-trip. (See Auto-capture.)
  • Importance-graded injection. The session-start digest degrades by importance, not by position: P1 in full, P2 truncated, P3 a bare count. It never just chops the list at N lines.

Flow Board

If your project plans work in a .planning/ROADMAP.md (the GSD planning convention), Stickies also gives you a live Kanban board derived straight from that roadmap — To-Do / Doing / Done — with your stickies cross-linked onto the phases they're about. It's a projection of your plan, derived on the fly, so it can never drift out of sync with it.

Four places to see the same board, pick whichever fits where you are:

WhereCommandGood for
On GitHub / your phonestickies board → commit BOARD.mdglancing at progress from a phone browser — BOARD.md renders natively on github.com, no server, no app
In a browser (local)stickies dashboard → open /boardan interactive Kanban; /graph shows the plan's dependency DAG
In Discordstickies board --discorda push-glanceable card — progress, column counts, per-phase status
In your statusline(see Statusline)a tiny always-on 📋 ▶2 ☐1 ✓2 (doing / to-do / done)
sh
stickies board                     # write BOARD.md in the project root (commit it → view on GitHub)stickies board --out docs/BOARD.md # write it somewhere elsestickies board --discord           # post the board to your Discord webhook instead

Each phase shows its progress (3/4), its wave, whether it shipped (✓ shipped 4/4) and whether it's blocked (⛔). In a cloud/mobile session with no .planning/, a committed .flow/ snapshot keeps the board self-sufficient — same repo-mode idea as the notes.


Everyday commands

In Claude Code (the /stickies slash command):

CommandDoes
/stickieslist this project's active notes (+ globals)
/stickies alllist every project's notes
/stickies add <text>add a note by hand
/stickies dismiss <id>clear a note (a todo is "done" when dismissed)
/stickies dashboardopen the local web board
/stickies syncsync through your git repo (if configured)

In any shell (the CLI — same engine). Install it with npm i -g stickies-mcp to get the stickies command on your PATH, then:

sh
stickies list                          # active notes for this dir + globalsstickies list --all                    # every project + globalsstickies add "ship the release" -c todo -i P1     # add a P1 todo to this projectstickies add "pay invoice" -c todo --due 2d       # a deadline (30m/2h/1d/1w/tomorrow/YYYY-MM-DD)stickies add "call the bank" -c todo -p global    # a global todo — shows up everywherestickies dismiss <id> -r "done"        # clear itstickies dashboard --open              # local web board, open the browserstickies board                         # write a GitHub-viewable BOARD.mdstickies status                        # the one-line statusline summarystickies sync                          # pull → merge → commit (push needs STICKIES_SYNC_PUSH=1)stickies notify                        # push the open list to Discordstickies init-repo                     # make notes work in cloud/mobile (repo-mode)

Auto-capture

The lowest-friction way in: Claude captures a durable fact by writing one line in its reply, and a Stop hook persists it — no tool call, no extra turn.

!!sticky <category> [P1|P2|P3] [global] [#tag ...] :: <content>!!sticky decision P1 #storage :: storage is node:sqlite, no native deps!!sticky todo P1 global :: cut the npm release

category is required; importance defaults to P2; notes are deduped. global and #tags are optional and may appear in any order. Without global, a note is scoped to the current project; with it, the note surfaces in every project.

The hook scans the whole completed turn, so a directive written before Claude runs more tools still gets saved. Directives inside subagent replies are ignored. Secrets are scrubbed on write.


Statusline

Point your Claude Code statusline at Stickies to get an always-on summary. It's opt-in — add this to your settings.json:

json
{ "statusLine": { "type": "command", "command": "stickies status" } }

(that uses the stickies command from npm i -g stickies-mcp)

By default it's compact — a count plus an urgency flag, e.g. 🟨 2!·19 (2 urgent of 19). It deliberately does not print note text (so nothing sensitive lands in your prompt); set STICKIES_STATUSLINE_VERBOSE=1 if you want the top note's text too.

Light / dark. A statusline can't repaint your terminal's background — it can only colour its own text — so the theme's job is to stay legible on whatever background you already have. The dark palette (default) uses the terminal's own bright colours; the light palette swaps in darker truecolour values that survive a white background (tuned to clear WCAG AA text contrast). Pick it with STICKIES_THEME=light (or dark) in your environment, or per-invocation with stickies status --light / --theme dark. On macOS/Linux terminals that publish $COLORFGBG it also autodetects; Windows Terminal / PowerShell don't set that variable, so on Windows set STICKIES_THEME explicitly if you run a light terminal. The dashboard (/, /board, /graph) is a real web page, so it gets a full ☾/☀ toggle that flips the whole background — that's a page it owns, unlike the statusline.

Clickable link. In a terminal that supports OSC-8 hyperlinks (Windows Terminal, iTerm2, WezTerm, Kitty, Ghostty) the segment becomes a Ctrl+click link that opens the dashboard. Two things it needs:

  • A dashboard must actually be running — stickies dashboard --detach. The segment is a link only while one is; with none running you still get the counts, just not underlined and not clickable. That is deliberate: a link to a closed port looks alive, fails only when you click it, and blames your browser rather than us. Autostart is off unless you ask for it, so no link is the default state on a fresh install. If the segment is not clickable and you expected it to be, stickies doctor says which of these two it is.
  • On Windows Terminal, Claude Code doesn't auto-detect hyperlink support, so set FORCE_HYPERLINK=1 in your environment before launching Claude Code (e.g. setx FORCE_HYPERLINK 1, then restart). Without it the segment renders but isn't clickable.

The link auto-skips under tmux (which mangles OSC-8), disables with --no-link, and its port follows STICKIES_DASHBOARD_PORT.


Dashboard

sh
stickies dashboard                 # http://127.0.0.1:7317/stickies dashboard --open          # and open the browserstickies dashboard --detach        # run in the backgroundstickies dashboard --link          # print an authorized URL for a browserstickies dashboard --stop          # stop the running one

Loopback only (never leaves 127.0.0.1). Routes: / the notes board, /board the Flow Board Kanban, /graph the plan dependency DAG. One dashboard covers every project you take notes in — the header switcher moves between them, so you don't run one per folder.

It only starts when you ask. Installing Stickies does not put a server on your machine. If you'd rather each Claude session bring one up automatically, set STICKIES_DASHBOARD_AUTOSTART=1 (skipped in CI and remote sessions regardless).

"Not authorized"? That's expected, not a bug. The dashboard serves your notes and planning documents, so it answers only a browser you've authorized:

sh
stickies dashboard --link          # → paste into your browser

…or Ctrl+click the Stickies segment in your statusline, which carries one. Opening the link sets a cookie; that's what lasts. Links themselves expire after a few minutes, so an old one from your scrollback will be refused — get a fresh one. Prefer it open? STICKIES_DASHBOARD_AUTH=0.

Editing the plan from the board is off by default. With STICKIES_BOARD_WRITEBACK=1, dragging a card rewrites that phase's **Status:** line in .planning/ROADMAP.md, keeping a pre-edit copy in .flow/roadmap-backups/. A move that contradicts the phase's plan checkboxes is refused rather than written.

Something not behaving? stickies doctor reports the whole setup in one shot — what's running, on which port, whether the installed plugin copy is stale — with your home directory abbreviated to ~ so the output is safe to paste.


Provenance

Every note records where it was written — 💻 terminal, 🖥️ desktop, or 📱 mobile — so on the dashboard you can tell the note you jotted from your phone from the one Claude captured at your desk. It's a best-effort stamp each entry point knows about itself; no configuration needed.


Sync (git-backed, opt-in)

Sync through a git repo you own — no third-party service, no new account. This is the only feature that ever touches the network, and only once you point it at a remote.

sh
export STICKIES_SYNC_REPO=/path/to/your/stickies-data   # a git clone you controlstickies sync           # pull → merge (last-writer-wins) → export → commit (push: STICKIES_SYNC_PUSH=1)
# or offline, through any file channel:stickies export -f notes.jsonstickies import -f notes.json

Each note carries a machine-independent key derived from the project's git remote (SSH and HTTPS collapse to the same key), so a project's notes follow you between machines even when the checkout lives at a different path on each. Merge is whole-record last-writer-wins by updated_at — conflict-free and order-independent.

Auto-sync (also opt-in): set STICKIES_AUTO_SYNC=1 alongside STICKIES_SYNC_REPO and Stickies pulls on session start and commits when a turn captures a note. Unset, nothing syncs on its own.

Pushing is a third opt-in. Capturing a note commits to your sync repo and stops there — STICKIES_SYNC_PUSH=1 is what makes it git push as well. Without it your notes are versioned locally and never leave the machine, so a second machine will never see them. The push runs bare (no remote, no refspec) so your own git config decides where it goes; deriving that ourselves went wrong three separate ways, once writing a stray branch onto a shared main.


Repo-mode (cloud / mobile)

The plugin lives in ~/.claude, so it doesn't exist in a cloud session (the iPhone app / claude.ai/code run in an ephemeral VM that only sees the repo they cloned). Repo-mode makes Stickies work there — no plugin, nothing to install:

sh
stickies init-repo         # run inside the repo you want notes in

That commits a self-contained, zero-dependency engine and wires it up:

  • .stickies/notes.json — the store, plus a human-readable .stickies/NOTES.md mirror
  • .claude/settings.json — a SessionStart hook (the digest) and a Stop hook (!!sticky capture)
  • CLAUDE.md — teaches Claude the !!sticky convention
  • .github/workflows/stickies-sync.yml — converges notes from every session branch into main

Cloud sessions write to their own branch; the bundled Action merges each note into main (union + dismiss-wins + dedupe) — one converged board per repo, hands-off. Same !!sticky grammar and same redaction as the local plugin.

Two things worth knowing before you run it: your notes live in that repo, so they are as public as it is; and if a step can't be done safely — an unparseable .claude/settings.json, most often an unresolved merge conflict — that file is left alone and the command warns and exits non-zero rather than replacing it.


The sticky model

Fields: id, content (≤ 500 chars), category, importance (P1/P2/P3), project_path (absolute, or null for global), tags[], origin, timestamps, expires_at, source (auto/manual), status (active/stale/dismissed).

Default TTLs: decision 30d · blocker 7d · preference 90d · context 14d · todo never expires (a task is done when you dismiss it, not when a timer runs out). That last one is what makes todo + global a real cross-project task list — an unfinished task can't silently vanish.

Storage: one SQLite file for all projects, scoped per-project — $STICKIES_DB if set, else ~/.stickies/stickies.db. It uses Node's built-in SQLite (node:sqlite, hence Node ≥ 22.5), so the plugin has zero compiled dependencies and survives Claude Code's plugin-cache copy on any machine.

Session-start digest: P1 in full, P2 to ~100 chars, P3 a count. It's handed to Claude through the SessionStart hook's additionalContext — it reaches the model without writing to any file.


Claude Desktop (MCP only)

Claude Desktop supports the MCP tools (stickies_write / stickies_read / stickies_dismiss) but not hooks or the slash command, so there's no auto-capture or digest there — add it and pass the project path explicitly. In claude_desktop_config.json (%APPDATA%\Claude\ on Windows, ~/Library/Application Support/Claude/ on macOS):

json
{  "mcpServers": {    "stickies": {      "command": "node",      "args": ["--disable-warning=ExperimentalWarning", "/abs/path/to/stickies/src/server.js"]    }  }}

Both clients read the same ~/.stickies/stickies.db, so a note written in one shows up in the other with no sync step.


Components (reference)

ComponentFilePurpose
MCP serversrc/server.jstools stickies_write / stickies_read / stickies_dismiss
SessionStart hooksrc/session-start.jsinjects the digest via additionalContext (touches no file)
Stop hook (auto-capture)src/auto-capture.js, src/directives.jspersists !!sticky … directives, deduped
Local dashboardsrc/dashboard.js, src/dashboard-page.jsloopback web UI: notes, /board, /graph
Flow Boardsrc/flow/derive the Kanban from .planning/ROADMAP.md; BOARD.md export; .flow/ snapshot
Slash commandcommands/stickies.md/stickies …
CLIsrc/cli.jsbacks the slash command; usable directly
Store / DBsrc/store.js, src/db.jsCRUD + schema + TTL + dedup + provenance
Syncsrc/sync.js, src/git-sync.jsexport/import + git pull→merge→commit (push is opt-in)
Redactionsrc/redact.jsscrubs secrets from content on write
Repo-modesrc/repo-mode/committed store + hooks + reconcile Action for cloud/mobile

Install & develop

sh
# use it:claude plugin marketplace add dumbspacecookie/stickiesclaude plugin install stickies@stickies --scope user     # restart Claude Code after
# work on it:git clone https://github.com/dumbspacecookie/stickiescd stickiesnpm test        # 27 suites, 558 assertions, no network

Install once at user scope and it's in every project; per-project scoping is by project_path on each note, not a per-project install.


How Stickies compares

Persistent-notes-for-Claude-Code is a crowded space. Honestly:

  • Claude Code's built-in memory — on by default, the model decides what to save, no expiry, no importance tiers, no cross-project globals, per-repo only. Stickies is the deterministic, human-authored, expiring alternative for people who turned that off.
  • Knowledge-graph / vector memory servers (mem0, OpenMemory, server-memory, basic-memory) — fuzzy retrieval over everything you've said. Different job. Stickies stores a small typed set, not an embedding index.
  • Hook-based memory plugins — several exist, some excellent. Stickies' narrow bets are the ones above: zero-turn !!sticky capture, importance-graded injection, a global tier that surfaces across projects, and a Flow Board derived from your plan.

If you want auto-recall of your whole history, use one of those. Stickies is for a short, trustworthy, self-pruning list — and a board you can glance at from your phone.


MIT · built by dumbspacecookie

來源:README.md,提交 ae9f7ea

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.14.2最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分