All notable changes to Myco are documented here. Format follows Keep a Changelog; the project adheres to Semantic Versioning.
1.2.0 - 2026-06-23
Node-free native installer. Myco now ships as a self-contained native binary — no Node runtime is required to run it. curl -fsSL https://myco.sh/install.sh | sh (macOS/Linux) and irm https://myco.sh/install.ps1 | iex (Windows x64) download the binary to ~/.myco/bin (%LOCALAPPDATA%\Myco\bin on Windows), register a managed per-user service, and connect supported agents. npm install -g @goondocks/myco still works as a thin bootstrap that converges to the same native binary.
- Single-binary self-update. The local service keeps itself up to date from its release channel in the background while idle. Upgrades can also be triggered from the Upgrade section of the dashboard's Settings page or with the new
myco upgradeCLI (--channel stable|beta).npm updateis no longer part of the main upgrade path. - Daemon coexistence. A development Myco service can run alongside the released production service on the same machine — variant-aware Grove binding keeps their Groves, services, and upgrades isolated.
- Cross-platform service lifecycle. Managed per-user service install and supervision across launchd (macOS), systemd (Linux), and Task Scheduler (Windows), validated on macOS, Linux, and Windows x64.
- Install no longer requires Node. The installer downloads a native binary instead of installing the npm package. Node 22+ is now needed only for the optional npm install path and the operator CLIs (
@goondocks/myco-team,@goondocks/myco-collective). - Platform support: macOS is the primary supported platform; Linux and Windows are in beta. Windows is x64 only — Windows on ARM is not supported.
Zero-config global install. Install once, every project works. myco init is no longer required (or available as a bare command) — the service auto-registers during npm install -g, the daemon auto-starts, and projects are auto-registered to a default Grove on the first agent hook.
- All 8 symbionts (Claude Code, Cursor, Codex, Copilot, Antigravity, Windsurf, OpenCode, Pi) install once at each agent's global configuration location, not per-project. Local
.agents/folders are no longer required. - Two global launchers —
~/.myco/launcher.cjsand~/.myco/mcp-launcher.cjs— bridge every agent's hook + MCP system to the daemon. Project-local launchers can override per-project. - Capture buffer relocated under
~/.myco/buffer/(per-Grove subdirectories). Legacy.agents/myco-buffer/is archived during migration. - Per-project archives of prior
.agents/artifacts are written on migration — auditable and restorable, but inert. - Project overrides moved to the dashboard's Symbionts page. Disable/enable a symbiont in a specific project via UI rather than CLI flags.
- New manifest fields:
detectionDir,globalHooksTarget,globalMcpTarget(string or string[]),globalSettingsTarget. - Settings-merge for shared agent config files: Myco's hook/mcp/skills entries are upserted; user-pre-existing keys (e.g. Codex
[features].hooks) are preserved across install/uninstall cycles.
- A default Grove is created at install. Projects auto-register into it on first agent hook — no
myco initstep. Hooks fired from non-git directories (cwd-fallback misfires) are silently skipped. - Users can create additional Groves and reassign projects between them through the dashboard.
- Variant-aware Grove binding: dev daemons (
MYCO_SERVICE_VARIANT=dev) bind only to Groves withserved_by="service-dev"; prod daemons only toserved_by="service". Dev and prod can coexist on the same machine — each gets its own default Grove. The previous prod-side escape hatch (default Grove regardless ofserved_by) is closed.
- New symbiont with full CLI + IDE + app surface coverage.
- PreInvocation transcript-read for user-prompt capture.
- PostInvocation spore injection with per-prompt deduplication.
- Stop processor reconciliation invokes transcript re-enrichment for symbionts whose hooks lack prompt/summary data.
- Launcher reads
workspacePathsfrom stdin for multi-agent workspaces. - One-time data remap migrates legacy
~/.gemini/artifacts and cleans staletrusted_hooks.jsonentries.
recordInjectionActivity()is the single injection path for Cortex, Spores, and Canopy. UNIQUE-index dedup, log-payload scrubbing (noinjected_textin INFO logs),recordInjectionAndShouldSuppress()wrapper for unified call sites.- Cortex injection gated on AGY's
invocationNum === 0— fires only once per session start. - Distinct UI rendering for
myco:*injection activity rows.
DaemonStateAuthorityis the only path fordaemon.jsonmutation. RawwriteOrTouchDaemonStateis no longer reachable. Every write logs reason, caller-pid, and before/after PID.
- New
MYCO_LAUNCH_AGENTS_DIRenv var lets sandboxed test installs target a non-default LaunchAgents/systemd-user directory. - Sandbox installs get a label suffix (
co.goondocks.myco-dev.sandbox-<8hex>) so they cannot collide with canonical service registrations. MYCO_LAUNCH_AGENTS_DIRis propagated into the plistEnvironmentVariablesblock so child daemons spawned byRunAtLoad: trueinherit the same sandbox context.- Production behavior is byte-identical when the env var is unset.
- Live status of every detected symbiont, with re-detect trigger.
- Per-project override controls.
- Detects
cursor-cd-cwdmissing prefix, Claude-matcher emptiness, hybrid-TOML state, project-local stub residue. - Surfaces migration audit log + service registration state.
- Clean removal of Myco's contributions to every agent's global config, preserving user-pre-existing keys.
--purgeadditionally removes~/.myco/itself.
- New invariant test suites: launcher write-ordering, daemon-bound intent bypass, daemon rebind on first project, variant-aware rebind filter, canonical-plist-no-hijack, greenfield default-Grove + first-hook auto-register end-to-end.
MYCO_LAUNCH_AGENTS_DIRpropagation regression tests intests/service/.- Test isolation hardened:
--isolaterunner enforcement, MYCO_HOME sandboxing inbeforeEachfor relevant suites.
- Default install path is global.
npm install -g @goondocks/myco(or the install script) is the only step. No per-project setup required. - Symbiont rename:
vscode-copilot→copilot, with multi-target MCP for Copilot CLI + IDE. - Claude Code hook templates now include
matcher: ""in every hook group, enforced by invariant test. - Cursor hook commands now include
cd ${CURSOR_PROJECT_DIR:-.}prefix; invariant test enforces acdprefix on every global hook template for its agent's project-dir env var. - OpenCode MCP transport switched from relative-path stdio to remote/URL.
- Windsurf manifest hookFields aligned with current Cascade payload schema.
- License relicensed from MIT to Apache 2.0 on 2026-04-29 (commit 57a9571a). Marketing site and docs updated accordingly.
myco initCLI command — entirely. Both the bare invocation and the--project <path>form. Project setup is fully automatic on global install; per-project overrides (portable Grove identity, dogfood binary pinning, project-local launcher) move to the dashboard's Symbionts page.--worktreeflag.- Per-project
.agents/myco-buffer/location (replaced by~/.myco/buffer/, with migration archive in each project).
- Limit-cap saturation in
syncTranscriptPromptBatches(event-handlers.ts): swappedlistBatchesBySession(capped at 200) forcountBatchesBySession+insertBatchStateless, wrapped indb.transaction()for fsync win. - React Hooks violation in
ActivityList.tsx:useStatewas called after an early return forMycoInjectionItem; dispatch moved to parent component. - Codex
[features].hooksdata loss onmyco remove: audit-track TOML settings preserves user-pre-existing keys. - Brownfield walker orphan stubs: walker now cleans up unregistered legacy projects (was registry-driven only).
- Cross-Grove walker boundary: enforced via
served_byfilter (R3.0). Audit pass on alllistGroves()callers. - TOML upsert newline bug in
buildTomlMcpSection. /api/symbionts/detectentry point now callsrunGlobalBootstrap, notrunSymbiontDetection.- Layered launcher path resolution:
runtime.commanddispatch correctly resolves project-local override → global launcher → daemon binary. - Atomic writes for every agent-config write (was inconsistent across symbionts).
- Canopy mass-delete bug: walker scope correctly differentiates project root vs grove root.
- Daemon-bound
installGlobalLaunchersinfinite no-op: addedskipIntentparameter so the reconciler can bypass its own intent-routing. MYCO_LAUNCH_AGENTS_DIRnot propagated to launchd child daemons: caused the canonical~/Library/LaunchAgents/co.goondocks.myco-dev.plistto be overwritten during sandbox installs. Fix propagates the env var through the plistEnvironmentVariablesblock.- Stop processor empty-named buffer events no longer overwrite parser breakdown.
prompt_count/tool_countdrift in sessions: now derived from row scans.
- All migration writes go through audit logging (bounded). Migration completion surfaces a notification with audit-trail summary.
If you have an existing per-project .agents/ install in a project:
- Upgrade Myco globally:
npm install -g @goondocks/myco@latest. - The daemon restarts and runs the migration walker on next start.
- Per-project
.agents/artifacts are archived in-place; agent global configs are updated to point at the new global launchers. - The Symbionts page in the dashboard shows the new global install state.
No myco init invocation needed. Run myco doctor after upgrade to validate.
The license changed from MIT to Apache 2.0 on 2026-04-29. No code action required, but if your team's compliance review tracks license metadata, re-acknowledge.