Help us shape the future of Go! Take the 2026 Go Developer Survey

tenon

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 16, 2026 License: EUPL-1.2

README

tenon

tenon is a terminal coding agent, written in Go. It reads your project, proposes changes and runs commands, under your control.

It is designed for Europe:

  • the preconfigured providers are European (Mistral AI, Scaleway, OVHcloud) or local (Ollama, vLLM);
  • any data sent outside the EU requires your explicit consent;
  • by default, writes, commands and MCP tool calls wait for your approval;
  • everything is recorded in a hash-chained, verifiable audit log;
  • secrets and some personal data are masked before anything is sent;
  • commits that contain code written by the agent can be marked.

Any OpenAI-compatible endpoint works. tenon runs on Linux and macOS.

Installation

Homebrew (macOS, Linux)
brew install tenon-code-eu/tap/tenon
Install script (Linux, macOS)
curl -fsSL https://raw.githubusercontent.com/tenon-code-eu/tenon/main/install.sh | sh

The script installs the latest version in ~/.local/bin (change the directory with TENON_INSTALL_DIR, pin a version with TENON_VERSION=vX.Y.Z). It always verifies the SHA-256 hash of the archive, and the minisign signature if minisign is installed (TENON_REQUIRE_SIGNATURE=1 makes it mandatory). Read it before you run it: install.sh.

With Go
go install github.com/tenon-code-eu/tenon/cmd/tenon@latest
Binaries

Each version published on the GitHub Releases page provides:

  • one .tar.gz archive per platform: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64;
  • .deb and .rpm packages for Linux (amd64, arm64);
  • a SHA256SUMS file, signed with minisign (SHA256SUMS.minisig);
  • a CycloneDX SBOM.

Verify the signature with the project's minisign public key, provided at the root of the repository (tenon.pub):

RWR+vfCWjGO42uRKOxNSrKz5afZPCWJf8iJPO04kFdkhLldZHhxo532F

Then verify the hashes:

minisign -Vm SHA256SUMS -p tenon.pub
sha256sum -c SHA256SUMS --ignore-missing   # macOS: shasum -a 256 -c SHA256SUMS --ignore-missing

Then copy the tenon binary to a directory in your PATH, or install the package:

sudo apt install ./tenon_*.deb   # Debian, Ubuntu
sudo dnf install ./tenon_*.rpm   # Fedora, RHEL
From source

You need Go 1.26 or later. Use the latest Go 1.26 patch release (≥ 1.26.9 as of 2026-10-15): earlier ones have known vulnerabilities in the standard library. The dependencies are included in the repository: no module proxy is contacted.

git clone https://github.com/tenon-code-eu/tenon.git
cd tenon
GOFLAGS=-mod=vendor go build -o tenon ./cmd/tenon

Quick start

tenon key set mistral                  # stores the key in the system keyring
tenon                                  # interactive interface, in the project directory
tenon -p "explain the project layout"  # one turn without the interface, for scripts

The key can also come from the MISTRAL_API_KEY variable. Without a key, use a local model: tenon --provider ollama.

The interface is in English by default. For French, run with --lang fr or set lang = "fr" in the configuration.

To mark the commits that contain code written by the agent:

tenon git install-hook

Documentation

License

tenon is distributed under the EUPL-1.2 license.

En français

tenon est un agent de code en terminal, écrit en Go, pour Linux et macOS. Il lit votre projet, propose des modifications et exécute des commandes, sous votre contrôle. Les fournisseurs préconfigurés sont européens (Mistral AI, Scaleway, OVHcloud) ou locaux (Ollama, vLLM). Tout envoi hors de l'UE demande votre accord explicite, et tout est tracé dans un journal d'audit chaîné. Par défaut, les écritures, les commandes et les appels d'outils MCP attendent votre validation. L'interface est en anglais par défaut : lancez tenon --lang fr ou mettez lang = "fr" dans la configuration.

Documentation en français : guide d'utilisation, sécurité et limites.

Directories

Path Synopsis
cmd
tenon command
internal
audit
Package audit writes a hash-chained JSONL audit log and verifies it.
Package audit writes a hash-chained JSONL audit log and verifies it.
config
Package config charge la configuration globale et projet (TOML).
Package config charge la configuration globale et projet (TOML).
engine
Package engine contient la boucle agentique : il relie le fournisseur, les outils, les permissions, le contrôle sortant et l'audit, et émet des événements typés consommés par les interfaces.
Package engine contient la boucle agentique : il relie le fournisseur, les outils, les permissions, le contrôle sortant et l'audit, et émet des événements typés consommés par les interfaces.
event
Package event defines the session event log model.
Package event defines the session event log model.
gitmark
Package gitmark marque les commits qui contiennent du code écrit par l'agent : des trailers git (AI-Assisted-By, AI-Session) sont ajoutés au message par un hook commit-msg qui ne bloque jamais le commit.
Package gitmark marque les commits qui contiennent du code écrit par l'agent : des trailers git (AI-Assisted-By, AI-Session) sont ajoutés au message par un hook commit-msg qui ne bloque jamais le commit.
i18n
Package i18n fournit les chaînes FR/EN de la CLI, du mode headless et du prompt système.
Package i18n fournit les chaînes FR/EN de la CLI, du mode headless et du prompt système.
instructions
Package instructions charge AGENTS.md et TENON.md depuis la racine du projet pour les injecter dans le prompt système.
Package instructions charge AGENTS.md et TENON.md depuis la racine du projet pour les injecter dans le prompt système.
llm
Package llm defines the provider-neutral types exchanged with LLM backends.
Package llm defines the provider-neutral types exchanged with LLM backends.
mcp
Package mcp connecte tenon à des serveurs MCP (stdio et HTTP streamable) et expose leurs outils comme des tools.Tool.
Package mcp connecte tenon à des serveurs MCP (stdio et HTTP streamable) et expose leurs outils comme des tools.Tool.
mcp/mcptest
Package mcptest fournit le serveur MCP stdio des tests : le binaire de test relancé avec EnvServer=1 joue un serveur selon EnvMode.
Package mcptest fournit le serveur MCP stdio des tests : le binaire de test relancé avec EnvServer=1 joue un serveur selon EnvMode.
policy
Package policy contient le moteur de permissions : chaque appel d'outil y est vérifié avant exécution.
Package policy contient le moteur de permissions : chaque appel d'outil y est vérifié avant exécution.
provider
Package provider talks to LLM backends over HTTP.
Package provider talks to LLM backends over HTTP.
secrets
Package secrets recherche les clés API des fournisseurs : d'abord dans l'environnement, puis dans le trousseau système (Keychain sur macOS, Secret Service sur Linux).
Package secrets recherche les clés API des fournisseurs : d'abord dans l'environnement, puis dans le trousseau système (Keychain sur macOS, Secret Service sur Linux).
session
Package session persists a session's events as redacted JSONL and reloads them.
Package session persists a session's events as redacted JSONL and reloads them.
tools
Package tools définit l'interface des outils de l'agent et les outils fichiers.
Package tools définit l'interface des outils de l'agent et les outils fichiers.
ui/headless
Package headless exécute un tour d'agent sans interface interactive : toute demande de permission est refusée, la sortie est du texte ou du JSON.
Package headless exécute un tour d'agent sans interface interactive : toute demande de permission est refusée, la sortie est du texte ou du JSON.
ui/tui
Package tui contient l'interface interactive de tenon.
Package tui contient l'interface interactive de tenon.
ui/tui/diff
Package diff calcule l'aperçu des modifications affiché par la TUI avant qu'une écriture (write_file / edit_file) soit approuvée.
Package diff calcule l'aperçu des modifications affiché par la TUI avant qu'une écriture (write_file / edit_file) soit approuvée.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL