Skip to content

tenon v0.9.0

Choose a tag to compare

@tenon-code-eu tenon-code-eu released this 28 Oct 22:33
· 42 commits to main since this release

tenon v0.9.0

The editor release. tenon now runs inside your editor, with every guarantee it has in the terminal: permissions, sandbox, masking, routing, checkpoints and audit.

Site and documentation (EN/FR): https://tenon-code-eu.github.io/tenon/ · Editors: https://tenon-code-eu.github.io/tenon/editors/

New

tenon acp: an Agent Client Protocol agent

  • tenon acp speaks the Agent Client Protocol over stdio. Editors launch it as a subprocess: Zed, JetBrains AI Assistant, Neovim (CodeCompanion, avante.nvim), Emacs and VS Code.
  • Same startup as tenon: global and project config, signed policy, profile, allowlists, sandbox probe, routing and MCP servers. A startup refusal shows in the editor with tenon's message.
  • tenon's own tools do all the work. The editor never reads or writes files for tenon (fs/* and terminal/* are not used).
  • Permission requests appear in the editor: Allow, Always for this session, Reject, and Allow with network for a sandboxed command. "Always for this session" never grants network. A cancelled request or a client error counts as a refusal. Consent to a non-EU provider is asked in the editor and refused by default.
  • Everything sent to the editor is masked: messages, tool arguments and results, diffs, session titles, errors.
  • Diffs: old text from the checkpoint, new text from the masked tool arguments, never read from disk.
  • Sessions: session/load replays a session, session/list lists the sessions of a folder.
  • Session metadata (_meta.tenon): provider, model, jurisdiction, sandbox (with an explicit confined flag), profile, policy. usage_update carries the context size, the provider and its jurisdiction, so an editor can follow a routing fallback.
  • Editor MCP servers are ignored by default. With [acp] accept_editor_mcp = true (global config only; a policy can force it off) they go through the same filters as configured servers. Editor-provided env and header values are dropped.
  • Audit: SessionStarted records the editor (client) and transport: "acp"; the compliance export shows the editor per session.

tenon for VS Code

  • A tenon-branded extension, tenon-code-eu.tenon, on the Visual Studio Marketplace and Open VSX (VSCodium, Cursor, Windsurf). Also attached to this release as .vsix files, covered by the signed SHA256SUMS.
  • One package per platform (macOS and Linux, arm64 and x64) with the tenon binary of this release bundled, byte for byte. A tenon.path setting or a tenon on the PATH also works.
  • Chat panel: streamed answers, tenon's notices as thoughts, tool calls, Stop, past sessions and resume, / skills.
  • Permission cards in the thread, and a notification when the panel is hidden. No automatic answer.
  • Diffs open in VS Code's own diff editor, read-only.
  • Attach the selection or a file to your message.
  • Status bar: tenon · <provider> · <EU|non-EU|local> · <sandboxed|not sandboxed>, in the warning colour outside the EU or when the jurisdiction is unknown. It follows routing fallbacks.
  • Terminal mode: Cmd+Esc / Ctrl+Esc opens the tenon terminal interface beside the editor; Cmd+Alt+K / Ctrl+Alt+K inserts @<file>#L<a>-<b>.
  • English and French interface. No telemetry and no network access from the extension: only tenon talks to providers.

Known limits

  • No Windows build (as for tenon).
  • No images or audio in prompts.
  • Editor buffers are not read; tenon reads files itself, under permission.
  • On Linux without Landlock network support, commands are sandboxed for files but keep network access: the status bar still shows "sandboxed"; tenon warns at startup.
  • If you set terminal.integrated.commandsToSkipShell yourself, add tenon.insertReference to it.

Verify

minisign -Vm SHA256SUMS -p tenon.pub
sha256sum -c SHA256SUMS --ignore-missing