Releases: agent-team-foundation/first-tree
0.3.2
What's Changed
- fix(gardener): align push-mode workflow with Claude Code auth by @bingran-you in #336
- fix(gardener): harden first-tree repo PR review path by @bingran-you in #337
- fix(gardener/classifiers): raise DIFF_CAP and filter noise by @serenakeyitan in #339
- chore(release): 0.3.2 by @serenakeyitan in #340
Full Changelog: 0.3.1...0.3.2
0.3.1
What's Changed
- fix(breeze): only monitor explicit mentions and review requests by @bingran-you in #320
Full Changelog: v0.2.16...0.3.1
v0.2.16
v0.2.15
Docs-only patch release so npm users get the updated onboarding narrative bundled into first-tree tree help onboarding.
v0.2.14
Highlights
- Auto-merge queueing for tree PRs (#322):
openTreePrnow callsgh pr merge --auto --squash --delete-branchafter creating a PR. Repos that haven't opted in via Settings → "Allow auto-merge" are unaffected (the specific disabled-on-repo stderr is recognized and swallowed). Fixes stuck approved PRs on tree repos likepaperclip-tree. - Onboarding prompt fix (#318): replaced the fake
gardener installcommand with the real Scenario-B flow (first-tree tree inspect→ bind →gardener install-workflow --tree-repo→breeze install). - Drop
installed_version(#316): simplifies install metadata.
Follow-ups
- #324 — reconcile
scripts/sync-version.js(enforces lockstep) withdocs/architecture/versioning.md(allows independent tree VERSIONs).
v0.2.10
Release 0.2.10
Highlights
- Breeze daemon startup now fails closed.
first-tree breeze install,start,run,daemon, andrun-oncenow require an explicit--allow-reposcope instead of silently defaulting to the full account notification/search surface. - Gardener pull-mode release. This version includes the new gardener daemon lifecycle (
start/stop/status/run-once), sync migration work, multi-target scan support, and the installable sync workflow. - Tree bindings are URL-first. Published tree URLs are now treated as canonical binding identity.
- Docs, skills, and tests are aligned with the shipped CLI. The published package includes the follow-up README / skill / test parity sweep for the Breeze repo-scope contract.
Included PRs
- #248 fix(breeze): require explicit repo scope for daemon startup
- #250 docs(breeze): align README and tests with explicit repo scope
- #241 feat(gardener): multi target_repos in scan mode + merged-PR sweep
- #242 refactor(gardener): migrate sync from tree namespace
- #243 feat(gardener): pull-mode daemon (start/stop/status/run-once)
- #244 ci: install first-tree gardener sync workflow
- #246 feat: make tree bindings URL-first
- #245 docs(cli): split Primary vs Advanced in tree/breeze/gardener help
- #247 Align first-tree docs and tests with current CLI
Validation
pnpm release:check- additional Breeze doc/skill/test parity verification before tagging and publish
v0.2.9
Tree-only release that adds a source-only companion to first-tree tree bind for agent runtimes that manage their own tree checkout.
Tree
-
#234 — feat: add
first-tree tree integratecommand.The source-only subset of
bind. Installs the first-tree skill into.claude/skills/first-tree/and.agents/skills/first-tree/, upserts the managedFIRST-TREE-SOURCE-INTEGRATIONblock inCLAUDE.md/AGENTS.md, and writes.first-tree/source.json. It does not write anything to the tree repo — notree.json, nobindings/, nosource-repos.md, no submodule syncs, no skill install on the tree side.Use when the tree repo is managed externally. The motivating case is first-tree-hub: Hub maintains a single long-lived Context Tree clone and spawns ephemeral per-chat workspaces. Running `bind` from each workspace would pollute the shared tree with transient binding metadata for every session; `integrate` keeps the tree clean. first-tree-hub#124 consumes this command from its workspace-bootstrap path.
first-tree tree integrate --tree-path PATH [--tree-url URL] [--tree-mode dedicated|shared] \ [--mode standalone-source|shared-source|workspace-root|workspace-member] \ [--workspace-id ID] [--workspace-root PATH] [--entrypoint PATH] \ [--source-path PATH]The block-builder and source-state writer helpers in
bind.ts(CommandRunner,defaultCommandRunner,readGitRemoteUrl,inferTreeMode,inferBindingMode,determineScope,resolveWorkspaceId,resolveWorkspaceRootPath) are now exported so `integrate` reuses them without duplication.
No changes to Breeze or Gardener in this release.
v0.2.8
Breeze + Gardener release. Fixes the first-tree breeze start launchd crash observed on fresh macOS installs and adds a push-mode Gardener workflow alternative to poller mode.
Breeze
- #224 — harden lifecycle and one-shot runtime.
first-tree breeze starton macOS was writing a launchd plist withProgramArguments = [node, breeze, daemon, --backend=ts, ...], so launchd (cwd/) resolvedbreezeas/breezeand crashed every invocation withCannot find module '/breeze';KeepAlive: truethen restarted the same broken invocation on a tight loop. The plist now re-execs the current CLI artifact via[node, <cli-entrypoint>, breeze, daemon, --backend=ts, ...]and carriesBREEZE_DIR/BREEZE_HOMEthrough to the daemon env. Same PR also makesrun/start--helppaths side-effect free, tightens one-shot candidate dispatch, hardens local lock liveness, and fixes a same-repo workspace preparation race under concurrency.
Gardener
- #228 — add push-mode install-workflow +
--assign-owners.first-tree gardener install-workflow --tree-repo <slug>scaffolds.github/workflows/first-tree-sync.ymlin a codebase repo — an event-driven replacement for running the gardener service as a poller. Runsgardener commenton every PR open/sync/merge.gardener commentgrows an opt-in--assign-ownersflag: on a MERGED source PR, tree-repo issues are auto-assigned to NODE owners resolved from the tree's generatedCODEOWNERS. GitHub rejection of non-collaborator assignees falls through cleanly so the issue still opens.- New reference
skills/first-tree/references/workflow-mode.mdwalks the codebase-maintainer agent through preflight,gh auth tokenquick path (with scope-bleed / audit-log / rotation caveats), scoped-PAT fallback, and a GitHub App appendix. skills/gardener/SKILL.mdgains a push/pull mode comparison table up top.
Version bumps
first-tree0.2.7 → 0.2.8breeze0.2.0 → 0.2.1gardener0.1.0 → 0.3.0tree+skill-tools0.2.7 → 0.2.8
Install
npm i -g first-tree@0.2.8
v0.2.7
Breeze-only release. Three daemon-robustness fixes found during a live 25-issue concurrency smoke, plus one configurable-concurrency feature.
Fixes
- #212 — broker: survive request-dir cleanup race. An external reaper (or abandoned shim) could remove the shim's request directory between
listPendingRequestsandwriteFailureResponse, crashing the daemon with unhandled ENOENT and orphaning every in-flight agent.writeSuccessResponse/writeFailureResponsenowensureDirtheir target, and the outer catch wraps the failure write. - #213 — gh: raise spawnSync maxBuffer to 64 MiB.
gh api notificationson accounts with a few hundred threads easily exceeds the default ~1 MiB cap, so every poll silently failed with ENOBUFS and the entire notification-driven candidate path degraded to search-only (capped at 10 per poll). NewDEFAULT_GH_MAX_BUFFER_BYTES+ overridablemaxBufferBytes. - #214 — enforce per-identity daemon singleton. The previous HTTP-port bind was the only mutex; a racing second daemon initialised broker + dispatcher before losing the port, briefly double-processing the same claim dir. The existing
acquireServiceLockhelper is now wired intorunDaemon; the lock acquisition is skipped when the injected AbortSignal is already aborted (see #216).
Feature
- #215 — expose
maxParallelandsearchLimitvia env / yaml / CLI-override plumbing. DefaultmaxParallelbumped 2 → 20. New env vars:BREEZE_MAX_PARALLEL,BREEZE_SEARCH_LIMIT. Yaml keys:max_parallel,search_limit. Startup log now echoes both values.
Release details
- #216 — version bumps (
first-tree0.2.6 → 0.2.7,breeze0.1.0 → 0.2.0,tree+skill-tools0.2.6 → 0.2.7) plus a smallrunDaemonpre-abort guard so the daemon's shutdown fast-path does not conflict with a legitimately-running daemon.
Verified under load
Post-merge live smoke (25 GitHub issues, default config on bingran-you/breeze-smoke):
- peak 17 concurrent agents (vs 10–11 capped pre-patch)
- daemon alive the full ~6 min run (vs crash at ~7 min pre-#212)
- 517 notifications ingested in first poll (vs 0 pre-#213)
- second daemon attempt cleanly rejected before broker init (vs proceeded to dispatcher then EADDRINUSE pre-#214)
Install
```
npm i -g first-tree@0.2.7
```
v0.2.6
What's Changed
- fix(generate-codeowners): prevent double @@ in CODEOWNERS output by @serenakeyitan in #89
- fix(sync): strip @ prefix from owners in extractOwnersFromCodeowners by @serenakeyitan in #91
- refactor: consolidate .first-tree/ into single source.json by @liuchao-001 in #92
- docs: replace about.md with WHITEPAPER.md in skill payload by @liuchao-001 in #99
- perf(sync): parallelize apply phase (git push + gh pr create) by @bingran-you in #94
- docs: move maintainer knowledge into Context Tree by @bingran-you in #102
- fix(sync): harden proposal branch generation by @bingran-you in #101
Full Changelog: v0.2.5...v0.2.6