Repository navigation
Releases: wckdboy/invincible
Release list
v0.0.17
For an agent left running for months: backups you can restore in one step, alerts when something goes wrong, and its logs from one command.
Backup and restore
autobot backupwrites the whole agent (config, personas, skills, conversations, memory, recall index, every bot) to one.tar.gzwith a checksum for every file. Tokens, passwords and keys stay out unless you add--include-secrets.autobot restore FILEchecks every file first, shows what will be new, changed or gone, and asks. Your current home is kept beside it as<home>.before-restore-<time>, and nothing changes if the restore fails. It works even whenconfig.tomlis broken.[backup] every = "1d"makes backups on a schedule whileautobot serveruns and keeps the newestkeep.
Alerts to your chat
[alerts]sends a message to your home channel (orto = [...]) whenautobot servecrashed and restarted, the gateway or a model stops answering, the disk runs low, a scheduled task, heartbeat or backup fails, or an update is available or was applied. A message follows when the problem is gone.- At most
per_houralerts an hour, and none twice withinrepeat. Duringquiet_hoursthey wait and arrive together. An alert no channel accepted is not counted as sent: it is tried again. autobot alertsshows where they go and the latest ones;autobot alerts testsends one now.
Logs
autobot logs [agent|gateway|update] [-n N] [--grep TEXT] [--follow]reads a service's log from the end and follows it across rotation.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.16
Faster everywhere, Autobot in your editor, files delivered on every channel, a safer skills hub, and project files checked for prompt injection.
Faster
autobotstarts in about 6 ms, down from about 105 ms. Connections to your own machine no longer load the system's certificate store.autobot servehandles about twice as many turns per second, and long conversations need about half as many model calls per turn.- Both services use less memory.
autobot servekeeps at most 64 idle conversations per bot in memory; the rest stay on disk.
Autobot in your editor
autobot acpspeaks the Agent Client Protocol, so Zed and other ACP editors can use Autobot as their agent. Edits arrive as diffs, approvals as the editor's permission prompts, and reads and writes go through the editor's open buffers. The README shows how to add it to Zed.
Files on every channel
- Speech and images now arrive as real files on Slack, Signal, Matrix, WhatsApp and email, as they already did on Telegram and Discord.
- The agent API takes photos in a turn, so the app's photos reach the node agent.
Skills hub
autobot skills checktells you which installed skills have updates, are gone from their source, or were edited locally.autobot skills updateshows exactly what changes, with a risk scan, and asks before replacing anything. It restores the old skill if the update fails.autobot skills auditscans a skill for risky scripts and shows how far its source is trusted.uninstallremoves one.
Safer project files
- AGENTS.md, CLAUDE.md and the others are checked for prompt injection. A suspicious file is not dropped: the model gets it quoted as data under a warning, and
/contextmarks it. - A restart no longer repeats a subfolder's instructions that a conversation already had.
Smaller things
autobot config getshows the value in effect, and whether it is a default.autobot sessions prune --days Nremoves conversations untouched that long.- Property tests and a nightly soak test found and fixed five bugs, including an unbounded allocation from a malformed tool call and a hang when splitting long Markdown.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.15
Settings from the command line, recall across conversations, speech and images through your node, a skills hub, and project instructions.
Tools, config and model
autobot toolsshows each tool group and tool as on or off, per bot with--bot.autobot tools enable|disable <group|tool>changes them. The new groups arescheduleandmedia.autobot config get|set|unset <key>editsconfig.tomlor a bot'sbot.tomland keeps your comments. A change is checked before it is written; a bad one is refused and the file stays as it was.autobot modelpicks the model from your node's list.
Recall
- Each conversation gets a small search index, so finding an old conversation no longer reads every transcript.
- The best matches are summarized for what they say about your question, and the summary is cached until the conversation changes.
[agent] recall_modelpicks the model;offturns summaries off. /recall <query>works in the terminal, and on chat channels for the owner.
Speech and images through the node
- The gateway has two new endpoints,
POST /v1/audio/speechandPOST /v1/images/generations, served by the[[speech]]and[[images]]backends in your config.- A backend on the machine is local. Any other backend follows the same rules as cloud chat: private and offline requests never leave the machine.
- The text that leaves is redacted, and every request gets a signed receipt.
- The agent has
speakandgenerate_imagetools when your node has those backends. It asks first before using one off the machine. - Telegram sends the results as a voice message or a photo, and Discord as a file. Other channels get the file's path.
Skills hub
autobot skills search <words>searches the public skills directory at skills.sh, falling back to GitHub.autobot skills install <name>shows where the skill comes from, its files and the whole SKILL.md, and installs it only when you say yes. It is pinned to one commit and size-limited. Scripts are never made executable.
Project instructions
- The agent reads
AGENTS.md,CLAUDE.md,.hermes.md/HERMES.mdand.autobot/AGENTS.mdfrom the repository root down to where you work. It reads.cursorrulesonly when none of those exist. - A subfolder's own
AGENTS.mdarrives before the agent's first edit there. /contextlists everything in play.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.14
Bots that change while they run, Home Assistant, WhatsApp, and a steadier browser.
Bots, live
autobot servepicks up changes as they happen. A bot you add or enable starts. One you disable or remove stops and closes its channels. One whosebot.tomlor tokens changed restarts. The other bots aren't touched.autobot bots add|enable|disable|remove|editand the app's on/off switch take effect at once.POST /v1/agent/bots/reloadrereads everything.- A
SOUL.mdedit applies from the next message, with no restart.
Learning from every channel
- The pass that keeps your profile (USER.md) and memory up to date now runs after turns from every platform and the API. It runs in the background, at most once a minute per bot, and never posts a message in the chat.
Home Assistant
- A
hometool: the agent can read entities and services freely. Calling a service is an approval, of the new kindhome. Unattended runs can be allowed per service (home:light.turn_on) or per domain (home:light.*).[homeassistant] entitieslimits what the agent sees. - A conversation agent for Home Assistant: an OpenAI-compatible endpoint lets HA's assistant talk to a bot.
autobot homeassistant setup <url>sets it up, and the token is kept in a 0600 file.
- Through the WhatsApp Business Cloud API, off by default. Meta's webhook calls are checked, with signatures and duplicates handled once. Pairing, approval buttons and voice notes work as on the other platforms.
- It needs a public HTTPS URL, such as a tunnel. WhatsApp only allows free-form replies within 24 hours of the person's last message.
Fixes
- The browser waits for a page to commit before reading it. An approval is always about the right page, and returning to a site you already allowed no longer asks again.
- Stopping a bot stops all of it. Some of its tasks kept running before.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.13
Always on, many bots, and the agent grows up: an installer you can rerun, rolling releases, self-update, bots with their own channels, and the features of a full agent harness.
Install, update, run 24/7
install.shconverges. Run it any number of times. The same release downloads nothing, a new one swaps the binaries atomically and restarts only what changed, and your config and data are never touched. A lock stops two runs at once, and a broken download resumes. Flags:--channel stable|edge,--version,--prefix,--no-service,--uninstall [--purge],--yes. Piped, it asks nothing;autobot setupasks the questions.- Rolling releases. Every green commit on main is published as the
edgeprerelease, signed like a stable release;invincible --versionsays0.0.13-edge.<sha>. invincible update(andautobot update) installs the newest release of your channel, checked exactly as the installer checks it.--checkonly asks.--auto stable|edge|offturns on a daily job; it is off by default, so nothing phones home.- 24/7 on a Mac or a VPS. On macOS the services are launchd agents. On Linux they are systemd user units with linger, or system units when installed as root. They start at boot and restart when they exit.
- Health and logs. Both services answer
GET /healthz, and a watchdog restarts them when it goes quiet. Logs are capped at 16 MiB. - Checking it.
autobot service statusshows each service's state and how it last stopped.autobot doctorends with a 24/7 readiness check: linger, Mac sleep, disk, clock sync and the update channel.
Bots
- Several bots on one node. Each lives in
~/.autobot/bots/<name>/with its own persona (SOUL.md), model, tools, approvals, memory, skills, sessions, schedules and channels. Your existing setup is the bot nameddefault. - The CLI:
autobot bots add|show|edit|remove|enable|disable|status, and--bot <name>on any command. - Isolated. One
autobot serveruns them all; one bot's crash or slow model doesn't stall the others.
Channels
- Slack (Socket Mode, no public URL), Email (IMAP and SMTP, only allowlisted senders that pass SPF/DKIM/DMARC), Signal (signal-cli) and Matrix join Telegram and Discord. All of them get pairing, approvals, steering, chunking and the commands
/status /new /stop /model /sethome /bots. - One conversation everywhere.
autobot identities linkmakes you one person across platforms./sethomepicks where notices go, andcron add --to slack:#ops --to email:me@xsends results anywhere. - Voice memos are transcribed (with a local speech-to-text server, or whisper.cpp) and answered.
The agent
- Personalities: SOUL.md, plus
/personalitywith four built in and your own. - A profile of you in USER.md, which the agent keeps up to date, checked for secrets, with a quiet line when it learns something.
- Skills in the agentskills.io format. The agent proposes new skills after hard tasks and improves the ones it has. Install skills with
autobot skills install <git-url>;/<skill>runs one. - New commands:
/retry,/usage,/insights,/stop. - A browser tool drives a local headless Chrome. Opening a new site and typing into a form are approved; navigation waits for the page to commit.
[agent.ssh]runs commands and file tools on another machine over SSH.execute_coderuns a Python or sh script that calls the read-only tools without a model turn each.autobot migrate hermes|openclawbrings over SOUL.md, memory, the profile, skills and settings. Secrets come only with--with-secrets.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.12
Show the agent an image, and see from your phone what is waiting for you.
Images in the terminal
- Attach an image by dragging or pasting its path (one or several files), with
@shot.pngin the project, with/image <path>, or with Ctrl+V from the clipboard (pngpasteorosascripton macOS,wl-pasteorxclipon Linux). It shows in the composer as[image 1: shot.png 1280×720]. - Big images are scaled down to 1568 px on the longest side before sending.
- Models that can't see images get none. You're told plainly and pointed to
/model; nothing is sent. - Sessions keep a reference to each image (path, SHA-256, size), never the bytes. An image that is gone by the time a session resumes is replaced by a note.
Gateway
- Images pass through to local engines and cloud backends. Only the text is redacted.
/v1/modelssays which models can see. A local model sees with a projector (mmproj).vision = true|falseoverrides that, and a cloud model is judged by its name.- Image requests are routed to models that can see. With
auto, only those are chosen. A model asked for by name that is known to be blind gets400 model_cannot_see_images. - Receipts and the audit log list images by hash, size and type, never their contents.
- Inference requests can be up to 32 MiB.
Agent API
GET /v1/agent/approvalslists the questions waiting for you now, so a paired phone can show them without watching a turn as it runs.- Answer an approval with what to do instead:
{"answer": "instead", "text": "…"}.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.11
The terminal, round two: search, pickers, and saying what to do instead.
Autobot in the terminal
- Ctrl+R searches what you sent, as you type. Ctrl+R again goes further back, Enter keeps the match, and Esc puts back what you had.
- Shift+Enter starts a new line in terminals with the kitty keyboard protocol (kitty, Ghostty, WezTerm, iTerm2 with it turned on). Alt+Enter and Ctrl+J work everywhere.
- Say what to do instead. An approval card now has a fourth key:
emeans no, and you type what the agent should do instead. It reads that with the refusal and does it. In plain mode, typee <text>. - Pickers.
/modelon its own lists the node's models and their context./resumelists recent conversations with their first request and how long ago they were. Type to narrow, then press Enter. - The window title reads
autobot · <project>, and your old title comes back when you leave. - Notifications. A turn of 10 seconds or more, or an approval that is waiting, notifies you while the window is in the background: OSC 9 in iTerm2, Ghostty, WezTerm and kitty, a bell elsewhere. Set
[terminal] notify = "auto" | "bell" | "off". /copyputs the last answer on your clipboard as Markdown, inside tmux too.- Long
refused:anderror:lines are cut to the width instead of wrapping mid-word.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
v0.0.10
A new terminal for the agent, and the brand's vivid colors.
Autobot in the terminal (autobot chat, autobot code)
- It stays in your scrollback. Only the bottom of the screen redraws, and only the rows that changed. Nothing flickers.
- A real composer. It takes several lines (Alt+Enter, Ctrl+J or a trailing
\) and keeps your history. Long pastes fold into[pasted N lines]and still go out in full. The usual editing keys work (Ctrl+A/E/W/U/K/Y, Alt+B/F/D). - A status line: the model (
auto → qwen (node)once a receipt says which model auto picked), your approvals mode, the project and branch, how much of the context is used, and tokens. The hints on the right follow what you can do now. /opens a palette of commands, your own included, each with a one-line description.@completes file paths in the project and respects.gitignore.- Live steps. A spinner shows the running step and its seconds. Esc or Ctrl+C interrupts, and typing while the agent works steers it.
- Answers render properly: headings, lists with hanging indents, quotes, aligned tables, and framed code blocks with a light syntax tint.
- Tool output is short. Command output shows its last lines and the exit code. Diffs show line numbers in green and red.
- Approvals are a card you answer with one key: y, a (always, this session) or n.
- Scripts still work. Without a terminal it falls back to plain lines.
NO_COLORis respected. The terminal is restored on exit, on a crash, and on SIGTERM and SIGHUP. - Smaller: rustyline is gone, taking 10 dependencies with it.
Brand
- Vivid colors: Invincible orange
#FF8A1E(256-color 208) and Autobot purple#7C5CFF(99), for the symbols, the prompt and what is running, never for text.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS
edge (0.0.17-edge.0ecbaa9)
Built from 0ecbaa9 on main after CI passed. Not a release: curl -fsSL https://invincible.sh/install.sh | sh -s -- --channel edge or invincible update --channel edge installs it.
v0.0.9
The agent grows into a full harness, and the node gets its brand.
Agent (Autobot)
- Background processes:
terminalwithbackground: trueleaves a dev server or watcher running;processreads its output, waits for it or stops it./psin the TUI. - Your own slash commands from
.autobot/commands,.claude/commandsand~/.autobot/commands($ARGUMENTS);/initwrites AGENTS.md;/compactfolds the conversation. [agent.docker]: commands in a per-project container.- Webhooks:
[hooks]andPOST /hooks/<name>, signed like GitHub; the body is fenced as data.autobot hooks,autobot hooks new. - Discord: direct messages and mentions, pairing codes, approval buttons, steering.
autobot discord approve|users|revoke. allow = ["cloud"]lets unattended turns use a cloud model that keeps prompts.
Brand
- Invincible is orange, Autobot lilac. Each has a pixel symbol: an
iand ana. Warnings are yellow, errors red. - Both CLIs share one terminal palette and grammar;
autobotshows its symbol beside the header, and the installer shows Invincible's.
Verify
echo 'invincible-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/0fXPq1j51BcfGY0Jp9QfPGy6kHVQQ+W282VFPR/Qo' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I invincible-release -n invincible-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS