Skip to content

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). init and uninstall keep working as hidden aliases and are no longer listed in --help.
  • --help and 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). today is described as '오늘 내가 한 일 (로컬 git, 서버 없이)', backup as '대화 기록 압축 (부가, 서버와 무관)', and backup now 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) and get_handoff · get_rules · get_rule_history · get_my_work (read). The old names rule_history / my_summary and 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) and disconnect; test/cli.test.js pins 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 + name required, 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.json mcpServers.
  • .cursor-plugin/plugin.json + hooks/cursor.json — Cursor 2.5 plugin (hooks/mcpServers paths, variables.FEATHERLOG_TOKEN). Unverified in a live Cursor.
  • gemini-extension.json — Gemini CLI extension bundling mcpServers.featherlog (httpUrl + headers) and settings[] (FEATHERLOG_TOKEN sensitive); hooks from hooks/hooks.json. httpUrl inside 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-run ships every manifest.

Changed

  • Plugin hooks (hooks/hooks.json) are command hooks only, shared by Claude Code, Gemini CLI and Copilot CLI: the http SessionEnd hook is gone from the plugin path (Gemini supports only command; ${user_config.*} inside an http url was unverified anyway). No timeout key — Gemini counts ms and Claude Code seconds — so curl -m bounds each call; SessionEnd uses -m 1 to fit the 1.5 s plugin budget. Token falls back FEATHERLOG_TOKEN$CLAUDE_PLUGIN_OPTION_TOKEN. The CLI path (init --write) still installs the verified http SessionEnd hook.
  • .claude-plugin/plugin.json: INGEST_URL is now optional (defaults), TOKEN description names the MCP use; mcpServers points at .mcp.json.
  • hooks/templates/gemini/settings.json: timeout 10 → 10000 (Gemini hook timeouts are milliseconds).
  • X-Featherlog markers: plugin/1.0.0-rc.1, template/1.0.0-rc.1.
  • package.json files ships 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): SessionEnd stays an http hook (POST <INGEST_URL>/hook, timeout: 10 to raise the 1.5 s SessionEnd budget); SessionStart is a command hook (curl → POST <INGEST_URL>/handoff, prints hookSpecificOutput.additionalContext) because SessionStart does not support http hooks.
  • FEATHERLOG_INGEST_URL is now the ingest base URL (…/api/ingest); a legacy value ending in /hook is still accepted.
  • init --write installs both hooks; uninstall recognises the marker in a curl command as well as in the X-Featherlog header.
  • X-Featherlog-Device: $FEATHERLOG_DEVICE header (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 Code SessionEnd http hook, --write merges into ~/.claude/settings.json with a timestamped backup.
  • featherlog uninstall — removes only hooks tagged with the X-Featherlog header.
  • .claude-plugin/ manifest + hooks/hooks.json skeleton, CI (Node 20/22), node:test suite.

Notes

  • npm name featherlog is taken by an unrelated logging SDK; this package is published as @nonscale/featherlog.
  • TODO(W3): verify ${user_config.*} substitution inside http hook url in the plugin spec; the CLI path (init --write) does not depend on it.