Repository navigation
v0.2.1
Toolchain and release verification
- TypeScript 7.0.2 is the default native type checker and watch compiler.
TypeScript 6.0.3 remains the JavaScript compiler API for typescript-eslint;
both compilers are invoked by explicit paths to avoid npm bin collisions. verbatimModuleSyntaxenforces explicit type-only imports in ESM code.- Release checks keep the package, lockfile, plugin, marketplace, skill,
and bundled versions aligned. CI rejects stale committed bundles and
exercises CLI and MCP from an independently installed local tarball. - Updated the MCP SDK's transitive Hono dependency to 4.13.13.
- Package, plugin, marketplace, and skill versions advance to 0.2.1.
Added
- Portable Claude Code JSONL imports via CLI
--fileand MCPfile, project
selection/configuration via--cwd, and parse-free session catalogs via
--sessions [--limit N]and the sixth MCP tool,agent_tree_sessions. - Complete redacted JSON mindmaps/catalogs (
--json, MCP list
format: "json") without stdout banners, and CLI--strictmalformed-line
rejection. Incompatible selectors, modes, and flags fail with exit code 2. CLAUDE_CONFIG_DIRdiscovery support; project paths encode every
non-ASCII-alphanumeric character as-. Exports without a valid session
UUID use a stable path-derived 32-hex identity for local pick history.
Changed
- Config precedence is defaults < user < project < environment < explicit
CLI. Per-field validation warns without discarding valid sibling settings.
MCP analysis caches invalidate on caller config and file identity metadata. - LLM model, input/output limits, parallelism, prompt caching, and language
settings are honored. Exactmessages.countTokenspreflight reservations
precede paid calls; failed counts make no paid labeling call, and failed
requests do not refund reservations. The input budget is not a spending cap. - CLI and MCP share the package version source. ESLint 10 flat config and
Vitest 5 modernize the toolchain. TypeScript 7 performs type checks, while
TypeScript 6 supplies the compiler API for typescript-eslint. - Docs and skill schemas now describe six tools and Claude Code-only input;
Codex/Gemini native session adapters remain unimplemented. - README rewritten around a terminal demo (
docs/demo.svg, rendered from
real CLI output), a quick start, what's new in 0.2, the Claude Code plugin
and a roadmap, with reference material in collapsible sections and verified
install paths for the development version and the plugin. The marketplace
command isclaude plugin marketplace add lifrary/agent-tree; current
Claude Code rejects the previously documentedgithub:prefix.
Fixed
- Phase-only text rendering preserves canonical node numbers for subsequent
snapshot selection. Hidden children no longer renumber later phases. - Dropping sidechains preserves original source-event ranges and keeps
dropped events out of the selected tree's metadata and snapshots. --dry-runskips dump/cache writes and pick changes while retaining
analysis; use--no-llmas well to avoid paid labeling.- TUI selection shares the
--snapshotpath for git context, redaction,
pick history, and clipboard behavior, and honors text display options. --redact-dryrunreports per-pattern hit counts from parsed source
strings on stderr without exposing matched values.- UUIDless Claude Code metadata lines of any non-event type (
custom-title,
agent-name,mode,atis-latch,ai-title,file-history-delta, …)
are skipped as metadata, and structured attachmentcontent(hook context
lists, file and memory objects) is dropped without a malformed warning.
Previously a real 14.7 MB session printed 1,592 multi-line warnings and
--strictrejected all 150 recent real transcripts tested. /pre-publish-auditreadsnpm pack --jsonfrom npm 12, which prints an
object keyed by package name instead of an array; its tarball check
previously failed with "Cannot index object with number".
Security
- Discovery accepts only UUID-named regular session files, excluding
agent/subagent and symlink entries. JSON exports/catalogs and errors retain
redaction at output boundaries. - Security redaction cannot be disabled. Config accepts only the implemented
anthropicprovider andtelemetry.enabled: false.
Breaking
- Node.js ≥22.13.0 is required. CI covers Node 22/24/26 on Linux and macOS.
- Per-session MCP tools accept
sessionIdorfile, never both;
agent_tree_pickstakes{}only. JSON exports reject display filters.
Invalid config fields and unsupported settings now warn instead of being
silently accepted.
Docs: README jargon + redact-strict accuracy pass (2026-04-29)
Follow-up audit on the README rewrite that landed three days ago. Three
load-bearing claims were either reader-hostile or factually wrong:
/wrapreference removed. The opening tagline framed agent-tree
against "linear/wrapsummaries", but/wrapis a third-party plugin
command (session-wrap:wrap) — readers without that plugin installed
see a comparison they can't parse. Rephrased to "linear end-of-session
summaries".skills/agent-tree/SKILL.mdhad the same trap in two
places (like /wrap or /ooo,Generating a /wrap summary); both
rewritten in tool-agnostic language.- One-shot
npxinstall command was broken. README's "Install"
section opened withnpx -y @seungwoolee/agent-tree --list, which the
same README's "Why not bare npx?" section explicitly says doesn't
work — the package ships two bins (agent-tree,atree) so npx 10+
can't auto-resolve, and--listgets eaten as a positional. Replaced
with the isolated/tmp/atreeinstall pattern that/mcp-smoke
already uses (regression-tested every release). --redact-strict"adds card" was a documentation-vs-code split.
The README, the CLI--help, theredact.tsheader comment, and the
SKILL.md privacy section all claimed--redact-strictadds 5 PII
patterns includingcard. In realityredactCreditCards()is called
unconditionally insideapply()(default-on for everyone), and
STRICT_EXTRAdefines 5 regex entries covering 4 PII categories —
email, ssn_us, rrn_ko, plus phone split into two regexes
(phone_e164+phone) for ReDoS safety. Fixed to "16 named secret
patterns + always-on Luhn-validated card check;--redact-strictadds
4 more PII patterns (email/phone/SSN/RRN)" everywhere. Behavior
unchanged — this was purely a doc/help-text drift.
Also tightened a few smaller items: --diff <a> <b> table notation →
<from> <to> (more readable than commander's variadic <ids...>),
version 0.1.2 (as of 2026-04) in the For-agents identity block →
(npm badge above shows latest) so the README doesn't go stale on
release day, and dist/*.js ships in git too — optional for Option A
comment placement clarified to apply to both install options
(dist/ is committed, so npm run build is only needed after editing
src/).
dist/ rebuilt to ship the new --help text in the next release. Tests
still 134 / 12 (no behavioral changes).
Docs: README rewrite + agent-friendly surface (2026-04-26)
Rewrote README.md for v0.1.2 accuracy and added a top-level
"For agents (LLMs handed this URL)" section. Modern agentic workflows
often hand a repo URL to an LLM with no other context; the new section
provides:
- Identity block (package / repo / version / runtime / data source)
- One-shot self-test sequence (isolated
/tmpinstall +--version/
--help/--list); see "self-test npx form" note below for why
barenpxis unreliable here - MCP tool schemas — zod-derived JSON, copy-paste-ready
- Common task recipes ("user says X → call Y")
- Constraints + failure modes (no
~/.claude/projects/data, in-progress
sessions, ambiguous prefix, LLM cost, redaction, MCP path resolution
per marketplace type) - Pointer table to
CHANGELOG/SKILL.md/src/mcp/server.ts/
src/cli/options.ts/RELEASING.md/CONTRIBUTING.md
Also refreshed stale references across the doc set:
- README test count
113 / 12 → 134 / 12and pattern count
10 default → 16 default(5 strict). Original "10 default" was a much
earlier number; the v0.1.2 audit added several token classes (slack,
github_pat_finegrained, openai_project_key, stripe, huggingface, npm,
gcp_oauth, aws_temp). The v0.1.2 CHANGELOG line "all 14 DEFAULT_PATTERNS"
was itself stale — direct count ofname:entries between
DEFAULT_PATTERNSandSTRICT_EXTRAinsrc/utils/redact.tsis 16 - README self-test npx form. Earlier draft used
npx -y @seungwoolee/agent-tree --versionwhich silently fell back
to npx's own--version(returning the npm version10.9.4, not the
package). Multi-bin packages (agent-tree+atree) need the
explicit bin name:npx -y @seungwoolee/agent-tree agent-tree --version
works for--version/--help(commander short-circuits), but breaks
--listbecause npx passes the bin name through as an arg →
commander reads it as[session-id]. Final form is an isolated
/tmp/atree-probeinstall (same pattern/mcp-smokeuses, so it's
regression-tested every release). skills/agent-tree/SKILL.mdinstall fallback. The same multi-bin
npx trap bit this file'scommand not foundrecovery line —
npx -y @seungwoolee/agent-tree …was offered as a one-shot
alternative tonpm i -g. Removed the npx option;npm i -gis
the only suggestion now, with an inline note pointing Claude Code
at the README "Why not bare npx?" explanation so the reflex
doesn't reintroduce it.- README plugin-cache verification path
0.1.0→ version-agnostic glob
*so future bumps don't immediately re-stale the troubleshooting steps - README MCP smoke example now points to the bundled
/mcp-smokeslash
command instead of an inlinetools/listecho (which lacked the
spec-requiredinitializehandshake under SDK 1.29) CONTRIBUTING.mdtest count113 / 12 → 134 / 12skills/agent-tree/SKILL.mdnpx oh-my-agent-tree …→
npx -y @seungwoolee/agent-tree …(the legacy package name predates
the rebrand chainoh-my-claude-map → claude-map → claude-tree → agent-tree)