Skip to content

ahpd 0.12 ​

The good stuff ​

Webhooks arrive, worktree sessions clean up after themselves, and the docs are a site.

0.12.0 - 2026-10-15 ​

Upgrading ​

  • A plugin id is a bare slug, such as webhook or computer. The npm package names stay @ahpd/.... The daemon skips a plugin whose exported name is not a slug, and ahpd plugin list shows it as error.
  • Sessions, automations, wake senders and usage saved under an old owner, such as plugin:@ahpd/webhook, read as the new one. Nothing on disk is rewritten.
  • @ahpd/webhook is published to npm for the first time.
  • docs/sdk/LIBRARY.md is now docs/sdk/BUILD-A-HOST.md, and upgrading has its own page, docs/server/UPGRADE.md.

Webhooks ​

  • @ahpd/webhook keeps endpoints as records, each with its own vault secret, and passes a call only with that secret as its bearer token. See packages/webhook.
  • A webhook talks to a bot by thread, or fires an automation whose run reads the event.
  • Routes can listen on a public port of their own.
  • A callback follows no redirect. A refused chat answers 409, and a failed sync turn answers 502.

Sessions and VS Code parity ​

  • A session and its chats are marked read and unread together, and a turn marks its chat unread, as the protocol does.
  • Archiving a session shelves its worktree, and unarchiving restores it. archiveDirtyWorktree says what archiving does with uncommitted changes.
  • A merged session archives and deletes itself. pullRequestLookup says how the host learns a pull request's state.
  • A turn started on a busy chat is refused.
  • Automations run with no client, so VS Code lists them. Every automation due at once fires, a run can be stopped, and each automation keeps its 50 newest runs.
  • A customization switched off for every session, or for one folder, stays off in each new session there.
  • The root state says what machine the host runs on, and the host sends its build.
  • # completes a file, and #chat: completes a chat of the session. A chat attachment gives a pointer and an excerpt.
  • A session tool acts as the person it works for, with VS Code's limits on spawning and messaging. The session tools can be switched off, and a running Claude session follows the switch.
  • A host can take a remote session and keep its origin, and the agent is told to report back to it.
  • A turn's end pushes the files of a watched changeset.
  • shellEnv sets the environment of every shell the host starts, including Claude's Bash commands.
  • A session record keeps its working folder, and Claude and pi look for a session there first.

Agents ​

  • Claude: a client tool's JSON Schema reaches the model whole, a cancelled call closes its confirmation, a spawn failure names its cause, and the handshake has a bound.
  • ACP: a withdrawn question is removed, and a question can take a typed answer.
  • cofold: @cofold/agents 0.4.0, cofold's slash commands are offered in a session, and /compact draws one notice.

Bots ​

  • A bot's first turn is its filled template, each new chat of a bot starts with the template, and a fork gets no preamble.
  • An edit passes when its template is gone.

Computers ​

  • An ssh machine is listed from the options, and a session on it runs nested over ssh.
  • A restart of this host leaves a nested session for the next one to resume.
  • A profile names the OCI runtime its machines run under, such as runsc.

Daemon ​

  • On Windows, ahpd stop and ahpd restart reach the daemon through a named pipe, and stop waits for it to exit.
  • The shutdown method stops the daemon gracefully, and the host closes each WebSocket with 1001.
  • ahpd paths lists, adds and removes the served folders, and a change reaches the running daemon. ahpd status shows the start folder.
  • ahpd start logs each stage, and npm installs a plugin on Windows.
  • A plugin's late problem is logged.
  • session:write holds chat:write.
  • A 0.10.0 protocol offer is answered with 0.10.0.

Documentation ​