Skip to content

Releases: Apra-Labs/apra-fleet

v0.2.1

28 May 04:08
ce8ee62

Choose a tag to compare

Highlights

Antigravity (agy) is now a supported LLM provider alongside claude and gemini. You can run a fleet member -- doer, reviewer, or PM -- on agy and dispatch across providers freely.

apra-fleet install --llm agy

What's new

Antigravity (agy) provider (#277)

  • Provider adapter with auth handled like claude's (sign in once on each machine via browser OAuth, or set an API key env var for headless use), and a new AGY.md instruction file (parallel to CLAUDE.md / GEMINI.md)
  • Tier-to-model mapping per workspace: cheap -> Gemini 3.5 Flash (Medium), standard -> Gemini 3.1 Pro (Low), premium -> Claude Opus 4.6 (Thinking). Written into <workspace>/.gemini/antigravity-cli/settings.json on every dispatch (Unix and Windows code paths)
  • Workspace .ignore overlay scaffolding for local agy members (writes .ignore markers for apra-fleet MCP + pm / fleet skills -- see Known limitations below)
  • Helper scripts (transcript reader, settings merge) bundled as standalone .js assets via the existing SEA pipeline. Eliminates a Windows shell-quoting class of bug from inline node -e '<literal>' invocations
  • New e2e suites s8.1 / s8.2 / s8.3 covering agy PM on Windows / Linux / macOS
  • Agy supports parallel dispatch, same as claude (only gemini has the documented sequential-dispatch limitation)

Documentation overhaul (#271)

  • README rewritten from a 644-line reference manual into a ~250-line value-first front door: hero, embedded demo video, copy-paste install in the first screen, concrete example mirroring the demo, mermaid how-it-works diagram
  • New docs/install.md (install / --skill / --llm / uninstall / self-update)
  • New docs/troubleshooting.md
  • New docs/writing-skills.md
  • docs/provider-matrix.md refreshed (stale Opus 4.6 references corrected to 4.7)
  • Compare-to-alternatives table, production fleet config, cross-provider collaboration callout

Docs accuracy + llms.txt as source of truth (#272)

  • scripts/gen-llms-full.mjs now scrapes llms.txt for the doc list instead of carrying a hardcoded list. Idempotent generator + new tests/gen-llms-full.test.ts
  • New user-facing docs/provider-guide.md (concise provider strengths + role recommendations); docs/provider-matrix.md stays the dev reference
  • New docs/beads.md (how Fleet uses Beads)
  • Removed two factually-wrong Gemini claims (silent output truncation; "OAuth copy is Claude-only")
  • README repositioned: Fleet as a general multi-agent coordination platform; the PM skill framed as one reference workflow

Bug fixes

  • apra-fleet update self-update bug fixed (#271)
  • Workspace defaultModel preservation -- previously, every apra-fleet install clobbered the user's custom defaultModel. Now preserved on reinstall (regression fix for all providers, surfaced during agy review)
  • sessionId shell injection defense in the Windows agy prompt wrapper
  • hooks.json file mode -- agy install now writes hooks.json with 0o600 (matches OAuth credential file mode)
  • requiredPerms deduplication -- duplicate activate_skill(*) and tracker_* entries removed from install payload
  • SKILL.md context-file mapping for agy fixed (was pointing to GEMINI.md, now AGY.md)
  • Windows shell-quoting robustness for agy transcript reader and per-dispatch settings merge -- both moved out of inline node -e literals into bundled .js files

Known limitations (tracked, not blockers)

  • agy workspace .ignore overlay is created but not yet honored by agy at runtime -- local agy doer/reviewer members can still call apra-fleet MCP tools. Tracked.
  • Other tracked follow-ups: install-test coverage for agy, model-identity logging gap in agy transcripts, registry-driven env-unset list, pm-skill plan-review step.

Quality

  • Unit tests: 1298 passing (up from 1282 in v0.2.0)
  • e2e regression matrix green across all four suites on this release: s1.1 (Windows claude), s1.2 (Linux claude), s1.3 (macOS claude), s8.1 (Windows agy PM + agy doer + agy reviewer)
  • CI Build & Test green on all three runners (ubuntu / macos / windows)

Install / upgrade

# fresh install (claude by default)
apra-fleet install

# fresh install with a specific provider
apra-fleet install --llm agy
apra-fleet install --llm gemini

# upgrade an existing install
apra-fleet update

Download links for the standalone installer (no Node.js required) are in the Assets section below.

v0.2.0

17 May 21:19
b35f5e0

Choose a tag to compare

Highlights

End-to-end test harness -- A new phased E2E test facility exercises the full product -- member registration, dispatch, doer/reviewer sprints, real PRs -- across Claude and Gemini and across Windows/Linux/macOS. The CI workflow runs a setup phase and a sprint phase with separate turn budgets, fails loud on errors (no more masked failures), and gates on terminal checkpoints so an incomplete run cannot report success. (#260, #263, #269)

Smart stall detector -- Members that hang are now detected by monitoring session-log activity, with log correlation to pinpoint where a member stalled. (#241, #252, #263)

Reliable provider dispatch -- Fixed a session-id collision where a local Claude member could resume the orchestrator's session instead of its own (cross-wiring context and token usage). Fleet now mints a session id up front and passes it explicitly for both Claude and Gemini. (#269)

Unified credential handling -- Credential collection is consolidated into a single secret subcommand; auth now writes local CLI auth (--oauth / --api-key). The out-of-band headless fallback prompts the correct command per mode. (#257, #269)

Other changes

  • PM skill: merge gates added, duplication reduced, templates cleaned up (#255)
  • credential_store_set fixed on Windows (#260)
  • Security: dependency vulnerabilities patched; directory-watcher fix (#252)
  • Test suite rationalized -- dead tests removed, coverage added (#262)
  • Repo hygiene: ASCII-only pre-commit hook; line-ending normalization (#269)

Upgrade notes

  • Version scheme moves to 3-part semver (0.2.0) from the prior 4-part 0.1.9.x.
  • apra-fleet auth <name> no longer collects out-of-band credentials -- use apra-fleet secret --set <name> (egress confirmation: apra-fleet secret --confirm <name>).

Full changelog: v0.1.9.0...v0.2.0

What's Changed

  • feat: smart stall detector with session log activity monitoring (#241) by @kumaakh in #246
  • fix(deps,stall): security vulns + stall-detector log correlation + dir-watch fix by @kumaakh in #252
  • feat: redesign auth → secret subcommand (#216) by @kumaakh in #239
  • fix(pm-skill): add merge gates, reduce duplication, clean up emojis and templates by @kumaakh in #255
  • revert: remove auth-secret redesign from main (806eb78) by @kumaakh in #256
  • refactor(auth): unify credential collection into collectSecret() by @kumaakh in #257
  • feat(e2e+oob): LLM-driven e2e suite, credential_store_set Windows fix by @kumaakh in #260
  • test: rationalize test suite — delete dead tests, add coverage, fix misleading fixtures by @kumaakh in #262
  • feat(e2e): end-to-end test facility + stall-detector improvements by @kumaakh in #263
  • E2E test harness rewrite + provider-dispatch and auth hardening by @kumaakh in #269
  • chore(release): bump version to 0.2.0 by @kumaakh in #270

Full Changelog: v0.1.9.0...v0.2.0

v0.1.9.0

06 May 04:39
227c999

Choose a tag to compare

What's new

New features

  • apra-fleet uninstall — surgically removes MCP registration, permissions, hooks, statusLine, and skill directories. Supports --dry-run, --force, --yes, --llm <provider>, and --skill fleet|pm|all. Settings files are edited per-key — unrelated user config is preserved.
  • Beads task DB — PM now uses bd (Beads CLI) for persistent task tracking across sessions. Installed alongside fleet. Run bd ready to see in-flight work.

Fixes

  • Reject unknown CLI arguments with a clear error and help hint (#244)
  • Exclude apra-fleet from Gemini child process MCP via allowlist (#243)

Docs

  • README: uninstall command, self-update command, Beads mention
  • docs/features/uninstall.md — design notes for the uninstall command
  • docs/features/update.md — design notes for the self-update command
  • deploy.md rollback section corrected (no .bak file is created; rollback via re-running old installer)
  • GEMINI.md, AGENTS.md, CLAUDE.md — project context files aligned across all three providers

Upgrade

apra-fleet update

What's Changed

  • fix(gemini): exclude apra-fleet from child process MCP via allowlist by @kumaakh in #243
  • fix(cli): reject unknown arguments with error and help text by @kumaakh in #244
  • feat(beads): install bd CLI + PM/fleet Beads integration by @yashrajsapra in #235
  • feat(#245): uninstall command by @kumaakh in #250
  • chore: post-245 cleanup + README uninstall docs by @kumaakh in #251

New Contributors

Full Changelog: v0.1.8.2...v0.1.9.0

v0.1.8.2

04 May 02:07
4ef1305

Choose a tag to compare

What's Changed

  • fix(update-check): support N-part version tags (e.g. v0.1.8.1) by @kumaakh in #236

Full Changelog: v0.1.8.1...v0.1.8.2

v0.1.8.1

03 May 04:57
c572e53

Choose a tag to compare

What's Changed

  • fix: CLI help, version parse, logging improvements, fleet_status log path by @kumaakh in #214
  • fix: resolve Windows drive-letter paths in SFTP transport (issue #220) by @joiskash in #221
  • fix(gemini): MCP exclusion + BOM-free config write on Windows (#219) by @kumaakh in #228
  • improve: strengthen plan-prompt and tpl-plan with elaboration, verification and tier rules by @kumaakh in #222
  • fix: harden execute_prompt busy-state — unconditional clear on all exit paths (#210) by @kumaakh in #230
  • feat: apra-fleet update command — self-update with install option replay (#212) by @kumaakh in #229

Full Changelog: v0.1.8.0...v0.1.8.1

v0.1.8 — Pino Logging, Claude 2.1.113+ Compatibility & Session Lifecycle

30 Apr 07:30
1ee1881

Choose a tag to compare

What's new in v0.1.8

Claude 2.1.113+ compatibility fix

Claude Code 2.1.113 switched from a bundled JavaScript binary to a native executable, which changed --output-format json output from a single JSON object to JSONL (newline-delimited JSON events). Without this fix, execute_prompt returned raw JSONL as the result text.

  • Three-tier parseResponse — handles (1) classic single JSON object (pre-2.1.113), (2) JSON array of events, and (3) JSONL newline-delimited stream (2.1.113+). All formats are transparently detected and parsed.
  • Direct shell execution on WindowswrapWindowsPrompt reverted from ProcessStartInfo+CreateNoWindow to direct shell execution. The native claude.exe binary does not inherit stdout through ProcessStartInfo; direct shell execution captures stdout correctly through the PowerShell pipe.
  • windows-wrapper.tsdefaultWindowsPidWrapper (ProcessStartInfo approach) extracted into its own module for use by the Copilot provider.

Pino JSONL structured logging (#202)

Fleet server now emits structured logs in JSONL format using pino.

  • Each log line is a JSON object: {"ts":"...","level":"info","tag":"execute_prompt","msg":"..."}
  • Log files: ~/.apra-fleet/data/logs/fleet-<pid>.log
  • Log messages for execute_prompt now include the LLM model name: [claude-haiku-4-5] timeout=60s ...
  • MCP cancellation signals thread through execute_prompt and execute_command via AbortSignal, with proper child process cleanup

Session lifecycle & credential trust model (#183)

  • Full session lifecycle management — sessions track state across turns, resume correctly, and clean up on server shutdown
  • Trust model for credential operations — members with explicit auth grants can perform credential operations without repeated prompts
  • stop_prompt fixed — correctly terminates in-flight prompts and releases session locks
  • Structured log tags: startup, execute_prompt, pid_kill, stop_prompt, execute_command

Model tier updates (#171)

  • Gemini provider updated to Gemini 3.x model generation (gemini-3-flash, gemini-3-pro-preview, etc.)
  • deleteFiles and other path operations now use escapeDoubleQuoted/escapeWindowsArg consistently

Fleet-MCP suppression for members (#173, #178)

  • Claude and Gemini members no longer see apra-fleet in their own MCP server list — prevents recursive self-invocation
  • Release update notifications — members are notified when a newer fleet version is available

Stability & bug fixes

  • send_files collision detection (#175) — detects and skips files that would collide on case-insensitive filesystems
  • Stale task cleanup (#175) — background tasks that exceed their TTL are automatically reaped
  • SSH username with spaces (#177) — SSH connections now correctly handle usernames containing spaces
  • Improved SSH error messages (#177) — connection failures include the remote address and auth method in the error
  • Windows path rejection in send/receive_files (#174) — backslash paths are rejected early with a clear error
  • credential_store TTL cleanup (#176) — expired entries pruned on startup; remove_member fully decommissions all associated credential state
  • ESM __dirname shim (#174) — remaining __dirname usages replaced with fileURLToPath(import.meta.url) for ESM compatibility

Documentation

  • MseeP security badge added (#205)
  • llms-full.txt regenerated

What's Changed

  • fix: Gemini 3.x model tiers, deleteFiles space escaping, test assertions by @kumaakh in #171
  • fix(#151): suppress fleet-mcp for Claude and Gemini members by @kumaakh in #173
  • fix: ESM __dirname shim + Windows path rejection in send/receive_files by @kumaakh in #174
  • fix: SSH username with spaces + improved SSH error messages by @kumaakh in #177
  • fix: send_files collision detection + stale task cleanup by @kumaakh in #175
  • fix: credential helper TTL cleanup + full remove_member decommission by @kumaakh in #176
  • feat(#161): release update notification in fleet_status by @kumaakh in #178
  • chore: bump version to 0.1.8 by @kumaakh in #181
  • chore: remove orphaned merge.ts from dashboard/src/api by @kumaakh in #187
  • feat: Sprint 1+2 — session lifecycle, auth UX, credential & trust model (#147, #160, #148, #106, #157, #158, #163, #54) by @kumaakh in #183
  • docs: add badges.md with security and build badges by @kumaakh in #205
  • Update MseeP badge link and text by @kumaakh in #206
  • feat: #201 pino JSONL logging framework by @kumaakh in #202
  • fix: JSONL parseResponse + direct shell stdout fix for Claude 2.1.113+ by @kumaakh in #207

Full Changelog: v0.1.7.0...v0.1.8.0

v0.1.7 — Credential Store & Secure OOB Input

22 Apr 04:52

Choose a tag to compare

What's new in v0.1.7

Credential store & {{secure.NAME}} token resolution

Secrets can now be stored out-of-band and referenced by name — they never appear in prompts, logs, or chat history.

  • credential_store_set — prompts for a secret value in a separate terminal window (OOB), stores it encrypted at ~/.apra-fleet/data/credentials.enc
  • credential_store_list — lists stored credential names (values never shown)
  • credential_store_delete — removes a credential from both session and persistent tiers
  • {{secure.NAME}} token resolution — use credential handles in execute_command, register_member, update_member, provision_vcs_auth, provision_auth, and setup_git_app; the server resolves and redacts values before the LLM sees any output
  • execute_prompt guard — prompts containing {{secure.NAME}} tokens are rejected with an error; secrets must never reach LLM context
  • setup_git_app{{secure.NAME}} tokens now resolve as PEM content for private key fields
  • OOB fallback for provision_vcs_auth and provision_auth — when no token is provided, triggers secure out-of-band collection automatically

OOB secure input improvements

  • Replaced raw-mode terminal input with @inquirer/password masked input for secure value entry
  • OOB prompt header changed from "Member: X" to "Enter secure value for: X" — accurate for both member auth and credential store use
  • Generic secure-input message on the OOB collection window (no longer labels as "API key")

Bug fixes

  • OOB retry hang (#164) — after a cancel or fallback, hasPendingAuth() was returning true and blocking re-entry; fixed by cleaning up pendingRequests and passwordWaiters in all exit paths
  • Credential name shown as member name (#165) — credential_store_set was passing the credential name as memberName to the OOB prompt; now shows "Enter secure value for: MY_CRED" instead of "Member: MY_CRED"
  • ESM __dirname incompatibility (#33) — __dirname used in ESM context replaced with fileURLToPath(import.meta.url) across affected modules
  • cloud_activity_command blocked empty string (#5) — removed .min(1) Zod validation that prevented clearing the custom activity command
  • Headless OOB hint (#106) — when the OOB terminal can't open (headless / CI environment), the error message now includes a hint to use credential_store_set pre-flight

CI & deliverable fixes

  • update-llms-full workflow now checks out by commit SHA rather than branch name — survives branch deletion after PR merge
  • CLAUDE.md and AGENTS.md are now restored from origin/main by the cleanup command rather than deleted — preserves them as project deliverables
  • paths-ignore added for llms-full.txt on main push — prevents auto-commit loops
  • Refuse-to-commit guard added: update-llms-full will not auto-commit directly to main

Documentation

  • Comprehensive credential store documentation added to README, fleet skill, and PM skill
  • PM skill documents {{secure.NAME}} usage rules, OOB workflow, and mid-sprint credential rotation
  • llms-full.txt regenerated

v0.1.6 — Install UX, Bug Fixes & Doc Consolidation

18 Apr 22:07
8f040a5

Choose a tag to compare

What's new in v0.1.6

First-run onboarding experience (#101)

New users now get a guided introduction the first time the MCP server responds to a tool call:

  • ASCII welcome banner with a getting-started guide on first use
  • Contextual nudges at three key journey points: after registering the first member, after dispatching the first prompt, and when a multi-member fleet is running
  • Welcome-back message on server restart when an active fleet is already registered
  • wrapTool() central wrapper replaces 21 inline wrappers — consistent entry/exit handling across all tools
  • Onboarding state stored at ~/.apra-fleet/data/onboarding.json (atomic writes, upgrade-safe)
  • Existing users on upgrade get a one-time upgrade nudge rather than the full first-run flow
  • 57 new tests (658 total)

README rewrite — leads with doer-reviewer workflow (#133)

The README was substantially rewritten to lead with what makes apra-fleet useful:

  • Repositioned tagline: opens with the doer↔reviewer loop rather than generic "fleet manager" copy
  • Single-machine quickstart: step-by-step from install to first delegated task on one machine
  • One-liner install prominently featured for all platforms (macOS/Linux/Windows)
  • Provider recommendations table: which LLM to pick for which role
  • FAQ section — 8 collapsible Q&As drawn from community discussions (#127): cost, model choice, single-machine vs. multi-machine, Windows support, and more
  • docs/FAQ.md added for AI agent consumption, with llm-context / keywords / see-also frontmatter
  • LLM context hints (<!-- llm-context --> comments) added to 8 doc files so agents navigating the repo get better orientation
  • README tool table synced with CLAUDE.md

Install UX, bug fixes & doc consolidation (#143)

Closes #115, #108, #39, #96, #139, #142, #140, #136, #134

Install UX

  • apra-fleet install --help / -h now prints usage and exits — no files written (#142)
  • Bare apra-fleet install defaults to --skill all (installs both fleet and pm skills) (#139)
  • --skill fleet, --skill pm, --skill none, --no-skill flags for fine-grained control (#139)
  • Running-server guard: install exits with a hint to use --force when the MCP server is active (#96)
  • --force kills the running server and proceeds with reinstall (#96)
  • Unknown flags (--typo, etc.) are rejected with a clear error message (#96)

Bug fixes

  • Unknown llmProvider values now throw TypeError instead of silently using Claude behaviour (#115)
  • Codex config.toml now writes defaultModel = "gpt-4o" (properly quoted) instead of a bare unquoted value (#115)
  • Claude session resume uses -c flag instead of --resume <session-id> (#108)
  • Statusline cleared (file emptied, state reset to {}) when the last fleet member is removed (#39)

Doc consolidation

  • docs/user-guide.md absorbed into readme.md — 20 sections merged with <details> collapsibles (#140, #136)
  • CLAUDE.md and AGENTS.md rewritten as thin wrappers (≤ 30 lines each) pointing to readme.md (#140)
  • llms.txt updated to reference readme.md (was docs/user-guide.md) (#134)
  • scripts/gen-llms-full.mjs updated to source from readme.md (#134)
  • All stale user-guide references removed from .md, .ts, .js, .json, .yml files (#136)

Full changelog: v0.1.5...v0.1.6

What's Changed

  • docs: rewrite README to lead with doer-reviewer loops and add FAQ by @kumaakh in #133
  • feat: first-run onboarding experience and user engagement nudges by @mraduldubey in #101
  • feat: Install UX, bug fixes, docs & doc consolidation by @kumaakh in #143

Full Changelog: v0.1.5...v0.1.6

v0.1.5

15 Apr 20:47

Choose a tag to compare

What's Changed

  • Add open-source community health files and templates by @joiskash in #20
  • Fix: Fleet uniqueness check should use host+port+folder for RPort support by @Copilot in #104

New Contributors

  • @Copilot made their first contribution in #104

Full Changelog: v0.1.4...v0.1.5

v0.1.4

08 Apr 04:33
d0139ff

Choose a tag to compare

What's changed

  • send_files: renamed destination_pathdest_subdir — unambiguously describes subdirectory scope; paths outside work_folder are rejected
  • receive_files: renamed local_destinationlocal_dest_dir — clearly identifies a local directory, not a filename
  • Schema descriptions updated to clarify defaults, boundary enforcement, and required/optional status
  • Skill doc fixes: onboarding step count (7→8), skill-matrix step reference (7→6), AzDevOps token URL, installAgentupdate_llm_cli
  • PM skill: fleet call sequencing rule clarified (sequence → single background Agent), reviewer model tier wording updated
  • Test: receive-files.test.ts updated to match renamed parameters

What's Changed

  • fix: use single .fleet-task.md filename + cleanup wildcard removal (closes #67) by @kumaakh in #94
  • fix: rename send_files/receive_files params and fix skill doc inconsistencies by @kumaakh in #97

Full Changelog: v0.1.3...v0.1.4