Repository navigation
Releases: yelmuratoff/exuno
Release list
0.47.0
Release Notes
Added
- One run at a time:
sync,rollback,import,init, andmcp usetake a lock on.ai/backups/.lock, so a second run started meanwhile stops before touching anything and names the run in its way.importtakes it before it plans and holds it through the confirmation, so the changes you approve are the ones it applies. - Crash recovery: a run killed partway through (
kill -9, a crash, power loss) is restored by the next command that changes the project, which keeps the half-written state as a backupexuno rollbackcan bring back. - Hidden personal skills: names listed under
skills.hideinexuno.yamlturn off the personal skill a project skill replaces, throughskillOverridesin.claude/settings.jsonandpermission.skillinopencode.json;doctorpoints out a project skill that shares its name with a personal one.
Changed
- Claude settings: the base settings let agents read
.envfiles and deny editing the secret variants;.env.examplestays editable. - Building from source: needs Rust 1.89.
Fixed
- Rollback: restores folders as well as files, so rolling back a first sync no longer leaves an empty
.claude/behind. - Check: fails on an output edited since the last sync even when it already matches the source, as a script that edits the source and its outputs together leaves it, so
checknow fails whereverexuno syncwould refuse an edited output.
Install exuno 0.47.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/exuno/releases/download/0.47.0/exuno-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/exuno/releases/download/0.47.0/exuno-installer.ps1 | iex"Download exuno 0.47.0
| File | Platform | Checksum |
|---|---|---|
| exuno-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exuno-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exuno-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| exuno-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exuno-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/exunoYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.46.0
Release Notes
Breaking
- Import: a source that brings MCP servers, tool config, or skill scripts lists them under
Runs commands:and asks before writing them; without a terminal, pass--force. - Import: keeps the project's own
exuno.yaml; pass--configto take the source's.
Added
- Import from git: any git URL, a GitHub or GitLab link to a ref and folder, or
owner/repo;--refand--pathpick them, and private repositories use your git credentials. - Skill packages:
importreads.skilland.ziparchives and folders of skills, andexport --skill <name>writes a.skillfor Claude's skill upload. - Export:
-o bundle.zipwrites a ZIP. - Import: an import that changes files is backed up first, so
exuno rollbackundoes it.
Changed
- Import: an imported skill replaces the project's copy whole, so files its new version dropped are removed.
- Import: also reads
.tar,.tar.xz, and.tar.bz2, and no longer needscurl.
Fixed
- Export: the bundle now carries all of
.ai/src,mcp.jsonincluded, and leaves hidden files and symbolic links out. - Import: a symbolic link in an archive or a remote no longer brings in files from outside it.
- Update and import: their temporary folder is created private, so another user on a shared
/tmpcannot tamper with it.
Install exuno 0.46.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/exuno/releases/download/0.46.0/exuno-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/exuno/releases/download/0.46.0/exuno-installer.ps1 | iex"Download exuno 0.46.0
| File | Platform | Checksum |
|---|---|---|
| exuno-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exuno-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exuno-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| exuno-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exuno-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/exunoYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.45.2
Release Notes
Fixed
- Migrate: run as
agentsync, suggestsagentsync migrate --applyandagentsync syncrather than anexunocommand that is not installed yet. - Setup-hooks: with
core.hooksPathset elsewhere, still rewrites an agentsync block in the repository's own hooks, so theexuno setup-hooksthatdoctorsuggests for it works.
Install exuno 0.45.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/exuno/releases/download/0.45.2/exuno-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/exuno/releases/download/0.45.2/exuno-installer.ps1 | iex"Download exuno 0.45.2
| File | Platform | Checksum |
|---|---|---|
| exuno-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exuno-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exuno-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| exuno-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exuno-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/exunoYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.45.1
Release Notes
Changed
- Migrate: moving the config to
.ai/exuno.yamlnow warns that releases before 0.45.0 cannot read it, so the team updates before the move is committed.
Install exuno 0.45.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/exuno/releases/download/0.45.1/exuno-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/exuno/releases/download/0.45.1/exuno-installer.ps1 | iex"Download exuno 0.45.1
| File | Platform | Checksum |
|---|---|---|
| exuno-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exuno-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exuno-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| exuno-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exuno-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/exunoYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.45.0
Release Notes
Breaking
- Rename: AgentSync is now Exuno — the
exunocommand, theyelmuratoff/exunorepository, and installs in~/.exuno; theagentsynccommand,AGENTSYNC_*variables,.ai/agent_sync.yaml,agentsync_version, andmetadata.agentsync-*keys keep working until 1.0. - New projects:
initandenablewrite.ai/exuno.yamlwithexuno_version, which AgentSync 0.44 and earlier cannot read. - Project format r3: every command reminds a project below r3, and
exuno migrate --applyrenames what still carries the old name and re-pins a project, and its CI gate, pinned before 0.45.0. - Bundled skill: ships as
exuno; a project copy underskills/agentsync/stops replacing it untilexuno migratemoves it.
Added
- Doctor: names every file, key, skill, and git hook that still carries the agentsync name.
- Install: links both
exunoandagentsync, andEXUNO_VERSIONpins a release from before the rename too. - Update: installs a release from before the rename when a project pins one.
Changed
- Git hooks and shell-init: call
exuno, oragentsyncwhen only that is installed, andsetup-hooksreplaces an older agentsync block instead of adding a second. - CI gate:
init --ci githubwritesexuno-check.ymland keeps an existingagentsync-check.yml. - Export: writes
exuno-bundle.tar.gzby default. - Releases: keep publishing
agentsync-<target>archives until 1.0, soagentsync updateon an older install reaches them.
Fixed
- Codex: a rule index synced from the home directory points at
~/.ai/src/rules. - Bundled skill and command template: no longer run a documented shell example or blank
$ARGUMENTSwhen Claude Code loads them.
Install exuno 0.45.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/exuno/releases/download/0.45.0/exuno-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/exuno/releases/download/0.45.0/exuno-installer.ps1 | iex"Download exuno 0.45.0
| File | Platform | Checksum |
|---|---|---|
| exuno-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exuno-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exuno-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| exuno-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exuno-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/exunoYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.44.2
Release Notes
Added
- Update: after a successful update, points to
agentsync refreshfor the project's rule, skill, and command templates. - Doctor: advises when a project copy replaces the bundled
agentsyncskill and so stops receiving its updates.
Install agentsync 0.44.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/agent_sync/releases/download/0.44.2/agentsync-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/agent_sync/releases/download/0.44.2/agentsync-installer.ps1 | iex"Download agentsync 0.44.2
| File | Platform | Checksum |
|---|---|---|
| agentsync-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| agentsync-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| agentsync-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| agentsync-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| agentsync-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/agent_syncYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.44.1
Release Notes
Fixed
- Profiles: a profile with its own
src/now gets the bundledagentsyncskill and its extensions, like the personal tools.
Install agentsync 0.44.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/agent_sync/releases/download/0.44.1/agentsync-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/agent_sync/releases/download/0.44.1/agentsync-installer.ps1 | iex"Download agentsync 0.44.1
| File | Platform | Checksum |
|---|---|---|
| agentsync-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| agentsync-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| agentsync-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| agentsync-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| agentsync-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/agent_syncYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.44.0
Release Notes
Added
- Extend an inherited skill instead of replacing it. A directory named after the bundled
agentsyncskill, or after a skill ashared:parent provides, that has noSKILL.mdof its own now adds to that skill: its files join the inherited ones, a file at the same path replaces the inherited one, and aSKILL.append.mdis appended to the inheritedSKILL.mdat sync. The directory can sit at the skills root or inside any category. The inherited text keeps updating with the engine or the parent; a directory with its ownSKILL.mdstill replaces the skill outright.doctorno longer reports such a directory as an empty skill.
Changed
- The bundled
agentsyncskill loads less up front. ItsSKILL.mdis about half as long and points to topic references the agent reads when the task needs them:maintenance.md(now also backups, rollback, version pins, and the other commands),workspaces-and-profiles.md,mcp-and-tool-targets.md(with per-host notes on where an MCP server is actually live),settings-hooks-and-harness.md,writing-skills.md, andevaluating-skills.md, which is new. The writing guidance adds the removal and addition tests for rule lines, failure-mode vocabulary for skills, and a loop for turning an agent mistake into a harness change.
Fixed
updateprints code in the changelog as written. The release notes it shows dropped every**along with the bold markers, so a glob such assrc/**read assrc/; text inside backticks now keeps every character. A nested bullet also wraps under its own text instead of starting its continuation lines to the left of it.migratefinds an engine-owned skill copy inside a category. A copy of the bundledagentsyncskill moved to.ai/src/skills/<category>/agentsync/still overrides the one the engine ships, butmigratelooked only at.ai/src/skills/agentsync/and reported no copy. It now finds the copy by name, removes it when unedited along with any category it leaves empty, and keeps it when edited.- A command's folded description reaches Codex, Kimi Code, Kiro, Amazon Q, and Zed whole. A command whose
description:is a>or|block became acommand-*skill described only as>, and an entry in the inlined## Commandsindex reading— >; both now carry the folded text.
Install agentsync 0.44.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/agent_sync/releases/download/0.44.0/agentsync-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/agent_sync/releases/download/0.44.0/agentsync-installer.ps1 | iex"Download agentsync 0.44.0
| File | Platform | Checksum |
|---|---|---|
| agentsync-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| agentsync-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| agentsync-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| agentsync-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| agentsync-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/agent_syncYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.43.0
Release Notes
Breaking
- Windsurf output moves to
.devin/. Windsurf is now Devin Desktop and reads its project rules, skills, workflows, MCP config, and hooks from.devin/. The first sync after the upgrade writes there and removes the files it had recorded under.windsurf/; files you wrote there yourself stay.listshows the tool as Devin Desktop; its slug is stillwindsurf. - Cline gets native skills and its current layout. Cline reads
AGENTS.md,.cline/rules/,.cline/skills/, and.cline/workflows/, so skills are copied as skills instead of inlined as an index in.clinerules/00-context.md. The first sync removes the files it had recorded under.clinerules/. - The config reader no longer borrows a list or a section from elsewhere in the file. An empty key such as
enabled:followed by another key read the next- itemlist anywhere below it, sotools.enabledcould pick up an unrelated list; it now reads as empty. A key holding a value, such asversion_pin: warn, no longer hides a later mapping with the same name, soversion_pin:withmode: strictfurther down now applies. A config written either way reads differently after the upgrade. - A tool override can set a field to empty.
header: ""orexclude: []in.ai/src/tools/<tool>.yamlused to fall back to the shipped value; a key you write now wins even when empty. Abase:in an override of a shipped tool now fills the fields the shipped file leaves empty, where it used to be ignored. - Frontmatter fields read the first occurrence and whole quoted values. A field written twice in a command took its last value, and
description: "use # with care"was cut at the#; the generatedcommand-*skills and the inlined command index now carry the first value, quoted text intact. - A rule's globs come only from
paths:. A rule withpaths:also took every other list in its frontmatter, such astags:, into the globs of Cursor's.mdc, Copilot'sapplyTo, and the other scoped headers.paths: ["src/**"]andpaths: src/**now scope a rule too, where they used to leave it always on. - The inlined skill index shows a folded description whole. A skill whose
description:is a>-block was indexed as-, and a>block showed only its first line; the index now carries the descriptionskills showprints. enableaddsenabled:inside an existingtools:block. A config whosetools:had other keys but noenabled:got a secondtools:block at the end of the file, which the reader then ignored.- A nested config key matches only at its own level.
tools.enabledalso matched anenabled:nested deeper, such astools.foo.enabled, when reading or editing a config; a key one level further in no longer answers for it. simplify --applydeletes nothing off a terminal without-y. A script running it removed byte-identical payload copies while keeping the override file it had emptied; both now wait for-y, and each kept file says so. Scripts that relied on the deletion add-y.migrateleaves a file without an extension where it is. AREADMEunder.ai/src/settings/moved to.ai/src/tools/README/settings.README, as if it were a tool's payload; it now stays, andupdateno longer counts it as a legacy override.refreshoff a terminal changes nothing without--yes. When only auto-updates were pending it applied them silently, and with--include-deletedit printed restore prompts it then declined; any pending change now stops with the sameUse --yeserror new files and conflicts gave. CI jobs that ranrefreshto take auto-updates add--yes.initrecords no template hash for the files it adopts. The template manifest was written before adoption, so an adoptedAGENTS.mdor rule carried the shipped template's hash andrefreshtreated the project's own text as an edit of the template. A project initialised earlier keeps the manifest it has.add mcpkeeps the rest of.ai/src/mcp.json. Adding a server dropped every top-level key other thanmcpServers, replaced a file withoutmcpServerswholesale, took anmcpServersnested inside another key for the real one, and silently lost servers after an invalid key. Other keys now stay in order,mcpServersis added beside them, and a file that is not valid JSON is refused and left as it is.importfollows the source project'ssource.*paths. A project keeping, say, its commands incustom/cmdsexported them, but no import read them back, and the importedagent_sync.yamlthen pointed at acustom/cmdsthe new project did not have. Import now reads each section from its declared path, writes it into the project's own.ai/src/, and drops thesource.*entries that would point elsewhere.
Added
- Skills can be grouped into category directories. A directory under
.ai/src/skills/without its ownSKILL.mdis a category, soskills/flutter/bloc/SKILL.mdandskills/backend/auth/SKILL.mdcan sit side by side, up to four category levels deep. Claude Code, VS Code Copilot, and Gemini CLI skip nested skills, sosynclands every skill flat at<dest>/<name>/for every tool; the category exists only in the source. Skill names stay unique across categories: two skills with the same name stop the sync before anything is written, and the error names both.targets.skills.includeand.excludetake a category path as well as a name:exclude: cloudflare/*.agentsync add skill <name> --category flutter/uiscaffolds into a category.skills listgains a category column,skills showaCategory:line, and an inlined skill index groups its entries under### <category>headings.adoptreturns an edited skill to its category, anddoctorreports a name collision, a skill nested deeper than four categories, an empty category, and a category name that is not lowercase-kebab.
- Kiro.
kiro.yamlwritesAGENTS.md, rules to.kiro/steering/withinclusion: always(orinclusion: fileMatchfor a rule withpaths:), skills to.kiro/skills/, commands ascommand-*skills, subagents to.kiro/agents/as Kiro Markdown agents, and MCP servers to.kiro/settings/mcp.json. Kiro's IDE and CLI succeed the Amazon Q Developer CLI;amazonq.yamlstays for projects still on Amazon Q Developer. - Three tool YAML options for tool authors:
{globs_list}inscoped_headerbecomes a quoted YAML list of a rule's globs,format: kiro_mdconverts a subagent to a Kiro agent, andlegacy_destnames where an earlier version wrote a target so the move cleans up after itself.
Fixed
doctorreports a secret beside an angle-bracket placeholder. A line such ashost: <your-host> token: ghp_…was skipped whole, so the token went unreported. Only the<…>span is skipped now, as${…}already was.simplifyfinds payload overrides undersource.tools. With the tool override directory moved, it looked in.ai/src/toolsand reported no payloads to remove.import https://github.com/user/repo.git/downloadsrepo. The trailing/hid the.gitsuffix, so the download asked for a repository namedrepo.git.profile add --toolstrims names and refuses an unknown tool.--tools 'claude, nope'wrote a variant namednope-hub, space included, for a tool that does not exist; it now stops withunknown tool: nope.and exit status 2. A--toolswith no value says so instead of exiting 1 in silence.diff <slug>no longer answers "No user overrides" for any slug. In a project without overrides, a mistyped slug read as nothing to diff; it now fails withNo override found for '<slug>', as it already did when other tools had overrides.show <slug> <resource>labels an override by the file sync reads. An override such as.ai/src/tools/cursor/hooks.jsoncwas shown as[base]because its extension differed from the shipped template's.disablelists only the tools it disabled. An unknown slug, and a slug named twice, appeared underDisabled N tool(s)beside the tools that were really switched off.sync --workspaceexits with the highest status of its projects, as itsmax exit codeline says. It exited with the last failure's status, so an OpenCode composition error (26) followed by an ordinary failure (1) ended as 1.adopt .rulesexplains that Zed's rules file is merged. It answered that.ruleswas not a recognised AgentSync output; it now says the tool merges rules into one file and names the source rules directory to edit.- A file in the way of an output directory is named.
initorsyncwith, say, a file where a tool writes a directory stopped withBackup target parent is not a directory: <target>; the message now names the file and says to move or rename it. A single-file.clinerulesno longer triggers it, since Cline writes to.cline/. dedupekeeps.ai/src/rules/and the other top-level source directories. Deleting the last duplicate in one removed the directory itself; now only the empty folders below it go, such as a skill folder or a skill category left empty.init --toolsand--contentread what was typed. A space inside a name was dropped, socla udeenabledclaude; it is now refused. An empty value such as--tools=or--content ,skipped the wizard and contributed nothing, and--content ,scaffolded a project withoutAGENTS.md; both now stop withrequires a value.add mcpchecks--envbefore creating.ai/src/mcp.json, so a malformed pair no longer leaves an empty server map behind.--argsand--envvalues that span lines are read whole: a newline separates arguments, and env pairs, like a space or a comma does.profile removedeletes only what AgentSync generated in the config home. It removed the whole directory, such as.claude-hub/, with the credentials, history, and settings ...
0.42.0
Release Notes
Added
- Key ownership covers every settings and MCP file in a config home, not only Codex. Claude Code writes the model, theme, effort level, and plugin choices into
~/.claude/settings.json, and an editor such as Cursor adds servers to its globalmcp.json, so a global sync stopped on those edits the same way it did on Codex's. Synced from$HOMEor into a profile, AgentSync now owns only the declared keys of each TOML or JSONsettingsandmcpfile: Claude Code'ssettings.jsonand.mcp.json, Gemini CLI'ssettings.json, the MCP files of Cursor, Windsurf, Junie, Amazon Q, Kimi Code, and MiniMax Code, and OpenCode's composedopencode.json. A plugin Claude Code enabled or a server Cursor added stays where the tool put it; a declared key the tool changed stops the sync by name, andagentsync adopt <file>moves it into the source. Every server inmcpServers,mcp,mcp_servers, orcontext_serversis owned as one entry; a changed one is named by the sync, and for a server that came from an MCP sourceadoptsends you to that source rather than splitting a sharedmcp.jsonbetween tools.targets.mcp.ownershipjoinstargets.settings.ownership; both default toautofor every tool, which in a repository keeps owning files whole, so project output does not change. Codex and OpenCode compose one file from both, sotargets.settings.ownershipdecides for it. Tools that write the same MCP file, such as Claude Code and MiniMax Code with.mcp.json, must use the same mode, or the sync stops before writing.- A JSON file is left byte for byte while its declared values match, and
60matches60.0. When a declared value changes, the file is rewritten pretty-printed with its keys sorted, andadoptwrites a JSON source the same way. JSON with comments stops the merge with a hint to useownership: file; Zed's settings allow comments, so Zed's shipped tool owns its settings whole. A parse error says whether the source or the live file is at fault. - A tool you disable keeps its key-owned files, and they no longer hold up later syncs.
- If you adopted a whole settings file before, it may carry state the tool wrote, such as Claude Code's
feedbackSurveyState. Now that sync owns every declared key, remove such keys from.ai/src, or each change the tool makes to them stops the sync.
Changed
- New lines in the sync log. A key-owned file is written as
<source> → <dest> (owned keys only), a disabled tool's key-owned file asKept <dest> (the app writes to it too), and a dry run warnsA real sync would stop: …where the real run would stop on a whole-file switch or a first-run difference. The--jsonsummary is unchanged.
Install agentsync 0.42.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yelmuratoff/agent_sync/releases/download/0.42.0/agentsync-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/yelmuratoff/agent_sync/releases/download/0.42.0/agentsync-installer.ps1 | iex"Download agentsync 0.42.0
| File | Platform | Checksum |
|---|---|---|
| agentsync-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| agentsync-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| agentsync-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| agentsync-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| agentsync-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo yelmuratoff/agent_syncYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>