Talos AI Agent Super Secure Talos, an open-source autonomous agent from talos-agent.ch, runs on a user's own machine and executes tools only after a deterministic security kernel approves each action via a capability token valid once for 30 seconds, with 164 adversarial scenarios tested on every change. The agent refuses to run without a sandbox on Linux or macOS, and ships with zero identities that may command it, positioning itself as a secure alternative to conventional AI agents that request shell access. An autonomous agent you can hand a shell to,because it can prove what it will not do. talos-agent.ch https://talos-agent.ch · Field manual https://talos-agent.ch/docs/ · Changelog /talos-kernel/talos/blob/main/CHANGELOG.md Talos runs on your own machine, takes instructions over a chat channel, thinks through a language model, and executes tools — but only after a deterministic security kernel has ruled on the action. The model proposes. It never decides. message ──▶ event log ──▶ reason ──▶ ╔══════════╗ ──▶ capability ──▶ execute ║ KERNEL ║ token │ ╚══════════╝ ▼ ▲ verify ──▶ receipt the only place effects are authorised Authority | a token bound to exact arguments — valid once, for 30 seconds | A tool without a target extractor | DENY by construction, not by a rule someone wrote | Ships with | zero identities that may command it | The shell | sandboxed, or it refuses to run at all | curl -fsSL https://talos-agent.ch/install.sh | less read it first curl -fsSL https://talos-agent.ch/install.sh | sh then run it The installer verifies the signature and the checksum, runs the full suite — and then stops . Nothing starts listening until you say so. Contents — twenty sections, in the order they matter Start here Why this exists why-this-exists · What it does not do what-it-does-not-do · Install install Using it A session in the terminal a-session-in-the-terminal · Work on the side work-on-the-side · What it remembers what-it-remembers · Seeing what it did seeing-what-it-did · Commands commands How it holds How the kernel decides how-the-kernel-decides · The autonomy dial the-autonomy-dial · Timed runs timed-runs · Announced plans announced-plans · The browser that only reads the-browser-that-only-reads · Delegating delegating · Identity identity Evidence What a run looks like what-a-run-looks-like · Audit trail audit-trail · Tools tools · Architecture architecture · Roadmap roadmap Every capable agent eventually asks for shell access. At that moment you are trusting a language model with your machine, and the usual answers are unsatisfying: either it asks you to confirm everything and you stop reading the prompts by day three , or it runs free behind a regex blocklist and you hope. Talos takes a third position. Authority is a token, not a list. Every effect is authorised individually, bound to its exact arguments and targets, valid once, for thirty seconds. Forgetting to call the gate does not produce an unchecked effect — it produces no effect at all, because the raw runners are unreachable without a token. That design is testable, and it is tested: 164 adversarial scenarios run on every change and try to get an effect past the kernel. They are in redteam.py /talos-kernel/talos/blob/main/redteam.py . Read them before you trust anything written above. Stated plainly, because a security claim without its limits is marketing: It runs under bubblewrap on Linux and run shell needs a sandbox the platform can actually provide. sandbox-exec on macOS. Where neither is available it refuses rather than running unprotected, so on such a host the shell tool is simply unavailable until the operator overrides it on purpose TALOS SANDBOX ALLOW UNCONFINED=1 . It is not a multi-tenant security boundary. One operator, one machine. Anyone who can run code in the process can reach the token mint. There is no gateway, no setup portal and no Each was considered and left out for the same reason. A gateway terminates foreign identities and then config.yaml . claims channel:id to the kernel instead of proving it, so identity checking would hang on a component outside the kernel. A web portal is a network service with its own authentication — by definition a second source of permission beside the allowlist. And a second config file would mean two truths about who may command it, when the path floor protects exactly one. What weakens a guardian is not the number of commands; it is a second way in. It does not defend against a malicious model. It defends against a mistaken one, and against prompt injection arriving through tool output. Those are different threats. Search needs no account. Without TALOS BRAVE API KEY it used to refuse; now it answers over DuckDuckGo the ddgs package, imported at call time . A key decides which provider answers, not whether one does. It has two ways in, and both of them fetch Telegram long-polling, mail over IMAP . That is the rule, not an accident: an inbound webhook would need a port the world can reach, which turns "outbound only" into "publicly reachable". Mail sits at Trust.ASK — an address proves no account, so it may ask and receive answers but never approve anything. WhatsApp is delivery-only for the same reason. It hears locally or not at all. hear transcribes a recording with faster-whisper on the machine it runs on — what was said is often the most private thing in a day, and sending it to somebody else's model to be understood is the one place where "runs on your machine" would be traded for convenience. It is an ordinary READ with the file as its target, so a recording under ~/.secrets/ is refused without the module knowing anything about secrets. The model loads on first use, not at boot. It can see, on a real file. A photo you send is fetched into workspace/inbox/ and the note carries the path, so see image has something to point at — and the kernel has a target to judge. The fetch asks the allowlist first: the channel parses updates before the kernel has ruled on identity, so an unconditional fetch would let anyone who finds the bot write files to your disk. speak writes a WAV offline piper . It can take one still out of a video. grab frame runs ffmpeg once and puts a single picture in the inbox; see image looks at it afterwards. Both the video and the picture are targets the kernel judges, so a video under ~/.secrets/ is refused exactly like a recording — without that, calling a file a video would have been the way around the secret floor. Where the picture lands is derived by the kernel, not chosen by the model, and it is deliberately one frame rather than a series: fanning ffmpeg out over a whole film and encoding every frame is how a small machine ends up unreachable. It does not generate pictures or video, on purpose. Reading one is a READ with a target; making one is a paid call to somebody else's model, and it was removed rather than kept around waiting for credit. Seeing stays. Requires Python 3.11+ and a working Claude Code CLI https://claude.com/product/claude-code the reasoner runs it headless via OAuth — no API key, no per-token billing . git clone https://github.com/talos-kernel/talos.git cd talos python3 -m venv .venv && . .venv/bin/activate pip install -r requirements.txt python -m talos setup asks three things, writes a file, stops python -m talos doctor what is still missing python -m pytest tests/ -q 1596 tests python redteam.py 164 adversarial cases python -m talos run it setup proves what it can rather than trusting what you type: the token goes to getMe , and your identity comes from a real message you send your own bot — not from a number you copy. A wrong token announces itself on the first poll; a wrong identity does not, and a stranger's identity never does. It writes the file and stops; starting is yours. Later, a single part can be redone without repeating the rest: python -m talos setup model switch what it thinks with python -m talos setup mail add the second way in IMAP python -m talos config list every key, its kind, whether it is set python -m talos config set TALOS MODEL claude-fable-5 python -m talos models --refresh ask each provider what it offers now python -m talos status what it did last python -m talos chat a session here; approvals at a terminal python -m talos ask "how many …?" one turn from here, answer on stdout python -m talos events --tool run shell what happened — read-only, filterable python -m talos why 4831 why that was allowed or refused python -m talos review what this installation should change python -m talos report --out audit.txt what was done and what was refused A full walkthrough — install, identity, the session, every command, and the ones that are missing on purpose — is at talos-agent.ch/docs . ask is not a second way in — it is a channel like any other , with the same protocol and no special right. Two consequences follow, and both are the point of it. Whoever types there must be in the allowlist as cli: