nonscalea/featherlog
v1.0.0-rc.1MIT
Featherlog — Team rules + my work, from git history. Featherlog MCP, 8 tools: log_decision · log_blocker · log_next · log_correction · get_handoff · get_rules · get_rule_history · get_my_work. log_* writes a one-line note, get_* reads. The server never reads your code; this plugin ships no scripts and reads no files.
Changelog
All notable changes to @nonscale/featherlog are recorded here.
Format: Keep a Changelog, versions follow SemVer.
[Unreleased]
Glossary pass (docs/glossary.md in the main repository, founder decisions 2026-09-17). Human-readable strings only — env names, headers, file names and function names are unchanged. No version bump.
Changed
- Commands are now
connect/disconnect(Connect Claude Code / disconnect).initanduninstallkeep working as hidden aliases and are no longer listed in--help. --helpand every run-time message are in Korean, using the same words as the app: 이어하기 메모 (handoff note), 연결 키(FEATHERLOG_TOKEN) (connect key), 에이전트 연결 (connect agent), 팀 (team), 리포 (repo), Claude Code 세션, GitHub 아이디, 기기 이름 (device name).todayis described as '오늘 내가 한 일 (로컬 git, 서버 없이)',backupas '대화 기록 압축 (부가, 서버와 무관)', andbackupnow prints its summary in Korean.- Manifest descriptions (
.claude-plugin/plugin.json,.claude-plugin/marketplace.json,.cursor-plugin/plugin.json,plugin.json,gemini-extension.json,hooks/hooks.json,codex/README.md) use the product line 'Team rules + my work, from git history' and list the 8 Featherlog MCP tools:log_decision · log_blocker · log_next · log_correction(write a one-line note) andget_handoff · get_rules · get_rule_history · get_my_work(read). The old namesrule_history/my_summaryand the count 7 are gone. Token fields are titled 'connect key' and point at Featherlog → Settings → Connect agent → Create connect key. - Hook template comments (
hooks/templates/featherlog-envelope.sh,hooks/templates/README.md) say handoff note / connect key / device name; the four JSON templates carry no comments and are unchanged. - README rewritten with the new command names and terms; the per-agent section is now 'Connect agent, per agent'.
- CI smoke runs
--help,connect,init(alias) anddisconnect;test/cli.test.jspins the command names, aliases and help wording.
[1.0.0-rc.1] - 2026-09-13
Release candidate for the 2026-10-13 launch. Plugin manifests for four ecosystems in this one repository.
Added
plugin.json+mcp.json— Agent Plugins 1.0 manifest (agent-plugins.org;$schema+namerequired,type: "streamable-http"). Header token${FEATHERLOG_TOKEN}expansion is client-defined and unverified..mcp.json— Claude Code plugin MCP server (type: "http",Authorization: Bearer ${user_config.TOKEN}), referenced from.claude-plugin/plugin.jsonmcpServers..cursor-plugin/plugin.json+hooks/cursor.json— Cursor 2.5 plugin (hooks/mcpServerspaths,variables.FEATHERLOG_TOKEN). Unverified in a live Cursor.gemini-extension.json— Gemini CLI extension bundlingmcpServers.featherlog(httpUrl+ headers) andsettings[](FEATHERLOG_TOKENsensitive); hooks fromhooks/hooks.json.httpUrlinside an extension is unverified.codex/README.md—~/.codex/config.toml[mcp_servers.featherlog]snippet + experimental hooks ([features] codex_hooks = true).- README '설치 — 에이전트별' (Claude Code · Cursor · Codex · Gemini CLI · Copilot CLI one-liners) and 'What leaves your machine' table.
test/manifests.test.js— version parity, required fields, shared-hooks invariants,npm pack --dry-runships every manifest.
Changed
- Plugin hooks (
hooks/hooks.json) are command hooks only, shared by Claude Code, Gemini CLI and Copilot CLI: the httpSessionEndhook is gone from the plugin path (Gemini supports onlycommand;${user_config.*}inside an httpurlwas unverified anyway). Notimeoutkey — Gemini counts ms and Claude Code seconds — socurl -mbounds each call; SessionEnd uses-m 1to fit the 1.5 s plugin budget. Token falls backFEATHERLOG_TOKEN→$CLAUDE_PLUGIN_OPTION_TOKEN. The CLI path (init --write) still installs the verifiedhttpSessionEnd hook. .claude-plugin/plugin.json:INGEST_URLis now optional (defaults),TOKENdescription names the MCP use;mcpServerspoints at.mcp.json.hooks/templates/gemini/settings.json:timeout10 → 10000 (Gemini hook timeouts are milliseconds).X-Featherlogmarkers:plugin/1.0.0-rc.1,template/1.0.0-rc.1.package.jsonfilesships the manifests (plugin.json,mcp.json,.mcp.json,.cursor-plugin,gemini-extension.json,codex).
Unverified (tracked for W4 "매니페스트 4개 로컬 로드 확인")
- Live load in Claude Code, Cursor 2.5, Gemini CLI, Codex, Copilot CLI; token substitution in each; whether Cursor/Gemini also pick up the other ecosystem's hooks file.
Changed (W2 work, previously unreleased)
- Hook contract verified (CLI path) against the Claude Code hooks reference (2026-09-13):
SessionEndstays anhttphook (POST <INGEST_URL>/hook,timeout: 10to raise the 1.5 s SessionEnd budget);SessionStartis acommandhook (curl →POST <INGEST_URL>/handoff, printshookSpecificOutput.additionalContext) because SessionStart does not supporthttphooks. FEATHERLOG_INGEST_URLis now the ingest base URL (…/api/ingest); a legacy value ending in/hookis still accepted.init --writeinstalls both hooks;uninstallrecognises the marker in a curl command as well as in theX-Featherlogheader.X-Featherlog-Device: $FEATHERLOG_DEVICEheader (optional device label).
Added (W2 work, previously unreleased)
hooks/templates/— generic-envelope curl templates for Cursor, Codex CLI, Gemini CLI, Copilot CLI (featherlog-envelope.sh), marked unverified against live agents.
[0.1.0] - 2026-09-13
Added
featherlog today— Korean markdown summary of local commits since 05:00 KST (SHA · scope · message, file/line counts). No LLM, no network.featherlog backup— gzip Claude Code / Codex / Cursor transcripts into~/.featherlog/archive/<repo>/, idempotent via size+mtime manifest.featherlog init— detect agents (~/.claude,~/.cursor,~/.codex,~/.gemini), dry-run the Claude CodeSessionEndhttp hook,--writemerges into~/.claude/settings.jsonwith a timestamped backup.featherlog uninstall— removes only hooks tagged with theX-Featherlogheader..claude-plugin/manifest +hooks/hooks.jsonskeleton, CI (Node 20/22), node:test suite.
Notes
- npm name
featherlogis taken by an unrelated logging SDK; this package is published as@nonscale/featherlog. - TODO(W3): verify
${user_config.*}substitution inside http hookurlin the plugin spec; the CLI path (init --write) does not depend on it.