eutonomous is still being built — nothing is live yet.Interested? Get in touch

In development · not yet open source

wolfgang: a coding agent built for malgra.

The coding agent that can prove it is locked down — with local models or any hosted API. Not released yet; we intend to publish it as open source.

Sandboxed

Runs in a container it cannot edit.

Attested

Every request carries signed, single-use proof of that sandbox — malgra can refuse an agent that is not contained.

Encrypted

End to end between wolfgang and malgra, streamed tokens included.

Injection-aware

Text from tools and web pages is labelled, so instructions hidden in it are blocked.

Receipts

malgra's signed receipt shows what it redacted and where the request went.

wolfgang — first start
The wolfgang terminal interface on first start: a wolf drawn in braille characters above the words W O L F G A N G and 'Join the wolfpack · Type /h for help', with the active model in the title bar and keyboard shortcuts along the bottom.

The terminal interface on first start, here running against a local model.

How it talks to malgra

A native client, not a compatibility shim

wolfgang speaks malgra's protocol itself — no plugin, no extra dependency. Any OpenAI-compatible client can use malgra; wolfgang additionally encrypts the payload end to end, signs who is asking, and shows you what the gateway did.

01

An encrypted channel

A per-session AES-256-GCM key, wrapped with the gateway's RSA-2048 key, encrypts every request and every streamed token. Pin the gateway's key and the channel holds even through a proxy you do not trust. Tokens still arrive live.

02

Identity on every request

Your API key says who pays. The agent's own signing key says who is asking: each request carries a signed attestation bound to the exact prompt, valid once and for at most two minutes.

03

Governance you can see

malgra reports what it did — personal data it replaced, the route that served the request, the policy profile — and signs a receipt. wolfgang verifies the receipt and shows it in its header, counts only, never the data itself.

wolfgang ⇄ malgra, encrypted channel
wolfgang ── POST /secure/handshake ─────────────▶ malgra
         ◀── { session_id, RSA-2048 public key } ──
         ── RSA-OAEP-wrapped AES-256 key ────────▶  /secure/handshake/finish
         ── nonce ‖ AES-256-GCM(request) ────────▶  /chat/completions
            Authorization: Bearer <api key>
            X-Malgra-Attestation: <signed, single-use>
         ◀── encrypted frames ── decrypted into live tokens
         ◀── X-Malgra-PII · Route · Profile · Tenant · Receipt
~/.wolfgang/config.toml
[[custom_models]]
name         = "eu-coder"
endpoint     = "https://api.eutonomous.eu/v1"
backend      = "malgra"
model_id     = "scaleway/qwen3-coder-30b-a3b-instruct"

# who pays: your eutonomous key, from the encrypted secret store
api_key      = "${secret:EUTONOMOUS_API_KEY}"
# who is asking: this agent's own key signs every request
jwt_alg      = "RS256"
jwt_key_file = "~/.wolfgang/agent.key"
jwt_sub      = "wolfgang-laptop"

The example uses the eutonomous API, which is not open for inference yet. The same configuration works against a malgra gateway you run yourself.

wolfgang and malgra

When the agent can prove what it is

Any client gets malgra's server-side protection. A client that can also vouch for itself lets the gateway go further: it no longer has to guess what kind of environment the agent runs in — it can check.

01

A sandbox the agent cannot edit

wolfgang starts the agent in a container you define: no network or only the hosts you allow, project files read-only unless you say otherwise, individual tools switched off.

02

A voucher it cannot forge

The launcher, outside the container, signs a description of that sandbox with a key that is never mounted inside it. A compromised agent cannot write itself a better one.

03

Proof on every request

Each request carries a short-lived, single-use signed attestation that malgra checks before serving it. A key can require one, so an agent that is not sandboxed is refused.

04

Labels on untrusted text

wolfgang marks which parts of the conversation came from tools and web pages. malgra treats those strictly as data: an instruction inside them is blocked, while the same words typed by you are allowed.

None of this is reserved for wolfgang. The attestation and labelling formats are documented, and any client can implement them — wolfgang will simply be the first. Until then, every client gets malgra's server-side features in full.

The agent

Local-first, provider-agnostic, no lock-in

Any model, including local ones

Ollama, LM Studio, llama.cpp or vLLM with no account and no network, or any OpenAI- or Anthropic-compatible API. Switching is one command; the tools and workflow stay the same.

A real agent loop

Plan mode, bounded step limits, parallel tool calls, sub-agents, and self-checking that runs your tests after it edits.

You stay in control

Tiered approvals with diff previews before changes land, your own pre- and post-tool hooks, and one-key undo when you change your mind.

Tools and skills

MCP and SMCP tool servers, composable skills with allow-listed tools, and a graph memory that carries across sessions.

No keys in plain text

Provider keys live in an encrypted store and are referenced from the config by name, so a config file can be shared without them.

A full TUI or a plain REPL

A rich terminal interface, a classic command-line REPL, or a non-interactive mode for scripts and CI.

Want to try it early?

wolfgang is in private development. If you would like to test it against your own codebase or your own malgra gateway, write to hello@eutonomous.eu.

Get in touch

Related

The other projects