Skip to content

Releases

chord 0.3.1

Choose a tag to compare

@Cedr1cSun Cedr1cSun released this 28 Oct 23:24

pi support

chord now runs pi agents beside Claude Code, Codex and OpenCode:

chord pi [--name <agent>] ...
  • chord loads an extension into pi with -e, so nothing under ~/.pi is written. The extension registers chord's MCP server for the session with direct exposure (pi's default, codemode, would hide the tools from the model) and a ten minute timeout for finish.
  • The extension routes pi's session_start, before_agent_start, tool_call, tool_result, agent_before_settle, agent_settled and session_shutdown to chord's hooks: the briefing and reminder arrive as one custom message, an unclaimed write is blocked with the reason the model reads, messages that arrive mid-turn ride on the tool result, a message waiting at the end of a run makes pi take one more run, and an agent is idle once pi has settled, after an Esc too.
  • Hooks know pi's edit and write, whose path is relative to the project folder or absolute.
  • chord resume reopens a pi session with --session; --no-mcp is refused because chord's tools would go with it. The exit command is /quit; pi's OSC 7501 state reports are read as Codex's are.
  • Both READMEs link to the short film on Bilibili.

Verified against pi 1.4.0 with a scripted model on Windows: briefing, refusal, claim over MCP, write, a peer message holding the agent for one more run, idle, session end and resume. Not yet run with a live model through the terminal wrapper, nor on Linux or macOS.

chord 0.3.0

Choose a tag to compare

@Cedr1cSun Cedr1cSun released this 28 Oct 17:18

OpenCode support

chord now runs OpenCode agents beside Claude Code and Codex:

chord opencode [--name <agent>] ...
  • OpenCode is configured through OPENCODE_CONFIG_CONTENT: chord's MCP server and a plugin, named by file URL, so your own config, OPENCODE_CONFIG_DIR and the project's opencode.json stay in force.
  • The plugin routes OpenCode's chat.message, tool.execute.before/after and session.idle to chord's hooks: the briefing and reminder arrive as synthetic parts, an unclaimed write is refused with the reason the model reads, messages that arrive mid-turn ride on the tool output, and idle agents are woken through the prompt.
  • Hooks know edit, write, apply_patch and the bash workdir.
  • chord resume reopens an OpenCode session with -s; --pure is refused because it would unload the plugin.
  • The pty wrapper runs the binary behind a .cmd shim that wraps an .exe, which is how opencode-ai installs on Windows.

Verified against OpenCode 1.19.5 with a scripted model: refusal, claim, write, claim clash with a message, wake-up, finish, resume and stop. chord's MCP tools run without a permission prompt.

chord 0.2.2

Choose a tag to compare

@Cedr1cSun Cedr1cSun released this 28 Oct 15:53

The npm package page shows the English README again: npm had been picking README.zh-CN.md, now README-zh-CN.md, which it ignores. No code changes since 0.2.1. The 0.2.1 changes have now also passed the test suite on macOS in CI.

Full changes: v0.2.1...v0.2.2

chord 0.2.1

Choose a tag to compare

@Cedr1cSun Cedr1cSun released this 28 Oct 15:45

macOS

chord-cli installs on macOS: the package allows the platform and sets the execute bit on node-pty's spawn helper, which the prebuilt package ships without. Codex's state=done report counts as idle.

Work that was lost or unprotected

  • chord clean no longer removes a worktree whose git link is broken; a failing git status is reported as held work instead of taken for a clean tree.
  • finish refuses to merge while a file you claimed sits untracked in the worktree, so a git commit -a that skipped a new file no longer leaves main with half the change.
  • The merge lock names its holder: a dead holder loses it at once, a live one keeps it through a long test run, and only the owner removes it.
  • An agent still running its setup command, or waiting for Codex's first start, is no longer swept offline after thirty seconds, and the wrapper no longer drops messages or a stop request that arrived meanwhile.
  • A machine waking from sleep no longer takes some agents offline because their wrappers woke a second apart.
  • Writes through a junction or symlink are checked against the claims and the main checkout like any other.

Smaller fixes

  • An agent with only merge notices unread may stop; a subagent's tool calls no longer consume the agent's messages.
  • Shell warnings: a claimed file inside a new directory covers the directory; the dirty-main warning uses the same rule as finish.
  • Parser.parse overlaps with Parser and parse when claims compare symbols.
  • Codex state reports are read once and only when complete; submodules with non-ASCII names are checked; project paths fold case on macOS.
  • claim() reads <repo>/x as a repository path and explains the two spellings that reach your copy when that can only have meant the old form.
  • The MCP server reports the package version; the log rotates at 16 MB.

Faster

  • One git diff instead of eight subprocesses after every shell command.
  • No fsync per heartbeat: the database runs with synchronous = normal under WAL.
  • Hooks load fewer modules; finish makes one rev-parse call instead of four.

Also

  • Schema version 4 drops two columns nothing read.
  • The READMEs now describe trust, the Codex sandbox and conflict handling as the code does, and the demo shows the current chord ls columns.

Full changes: v0.2.0...v0.2.1

chord 0.2.0

Choose a tag to compare

@Cedr1cSun Cedr1cSun released this 26 Oct 14:23

Agents run in the project folder

chord claude and chord codex now start the tool in the project folder, the directory you run it in yourself, so that stays its project: one /resume list, one CLAUDE.md, one trust answer. Each agent still works in its own worktree under chord/agents/<name>/. Writes to the main checkout or another agent's worktree are refused with the path of the agent's own copy, and a shell command that ran in the main checkout gets a warning.

The hooks record each agent's conversation id, so chord resume <agent> reopens exactly that conversation for Claude and Codex alike. Agents started with earlier versions have no recorded conversation; start them again with chord <tool> --name <agent>. chord no longer writes trust entries to ~/.claude.json.

Readable commands

  • chord ls fits the terminal width (CJK counts as two cells), shows busy, idle or off 3d, counts only real messages as unread and lists each agent's claims under its row.
  • chord messages prints one line per send, naming up to three recipients, and drops the sentence meant for agents.
  • chord clean says what is held (unmerged commits, uncommitted changes) and names the agents a --force would hit; -f works.
  • chord --help describes every command; chord --version exists; unknown commands and arguments are reported instead of ignored.
  • Timestamps from another day read Oct 17 23:39; a quitting agent is told how to come back.
  • A wrapper killed with its pid reused is no longer shown online for ever: ls, clean and stop watch stale heartbeats for a moment first.

Also

  • A Chinese README (README.zh-CN.md).
  • The database upgrades itself to schema version 3 on first open; the migration runs under a write lock.

Full changes: v0.1.3...v0.2.0