By David Speakman ·
SPEAKMAN.AI is the free, local, open source engine behind the same MCP workflows the hosted platform runs. Version 1.5.0 puts the skills inside the exe and starts a new install in a mode where every AI step goes to the assistant you already use, so there is no model key to find before the first run. It also keeps tunnels shut until you open them, and records who did each step without claiming more than it knows.
The same click copies the 17 skills into ~/.claude/skills. A skill file you had edited is backed up first, and your own skills are never touched.
Until now, getting going meant downloading the exe and cloning a separate skills repository, then finding a model API key from one provider or another. Now the exe carries the skills, and a new install with no model API starts in Delegate Only mode. The planner and every AI step are handed to your connected assistant, which does the work with its own tools and its own model. Switch to your own key on the setup page whenever you want background runs. Your saved keys and provider settings are kept either way.
Validators needed a decision too. With no model API, an AI validator used to call a model that wasn't there and score 0, which sent the assistant through up to three redos on error text. Now it passes automatically and the run record notes that the step was not validated.
One more change in the same spirit: the packaged exe no longer counts a key like
ANTHROPIC_API_KEY sitting in your environment for some other tool as a configured
model API. Before, a first run could start in auto mode and bill every step to that account.
The exe uses only what you save on the setup page. Docker and run-from-source still read the
environment.
Each output now carries executed_by and validated_by, and an approved
human review gate carries gate_answered_by. get_outputs shows them,
with a short note on how to word them.
When the engine ran the step on its own model, the record holds the provider and model, plus the mode it ran in, as fact.
The record holds the name the assistant reported and the client's user agent, and says whether the connection was local or remote. The name is stored as given and is not checked.
A human gate is recorded as answered through the connected client, never as "human approved". The engine can't tell a person's answer from the assistant answering for them. A run done by one assistant from start to finish reads that way, and the record makes no claim of independent review. The skills in the bundle tell assistants to pass their own name.
Copilot Studio can't reach localhost, so it needs a public tunnel. Before this
release a tunnel exposed the whole app, setup page and API included, with no authentication.
Now any request that isn't local gets a 403, until you turn on Remote access
on the setup page.
| Remote access | Local use | Through a tunnel |
|---|---|---|
| Off (the default) | Works, no token | 403 on everything |
| On | Works, no token | /mcp only, with the token in x-api-key or as a Bearer header |
The setup page and its API never accept a remote request, so a tunnel can't read the token or switch the setting off. The token is made the first time you turn Remote access on, and you can replace it. We tested it through a real Dev Tunnel and in Copilot Studio with the token as an API key, and the Docker image applies the same gate.
The limits are worth knowing. The gate separates tunnels and proxies from local software, but software on the same machine can claim to be local, and a static key on a public URL narrows exposure without making it a secured cloud endpoint. Turn it off and stop the tunnel when you are done. A related fix: the local API now refuses state-changing requests that another website sends through your browser.
Opens on who runs the AI steps and a picker for your assistant, and shows only the steps for the one you choose. An Update workflows button brings an older database up to the shipped prompts, after backing up what it replaces. The footer shows the app version.
A small extension, speakmanai-local.mcpb, connects the app's chat, Cowork and Code tab to the local engine. It needs no Node and no admin rights, and the app shows an unsigned warning when you install it.
list_skills and get_skill let an assistant with no installed skills fetch one from the server. A full Solution Architecture run in Copilot Studio completed this way.
A session records the mode it started in. Switch from assistant to model API mid-session, or back, and submit_response refuses with a message naming the start mode. Switch back and the same call works.
Every tool published an output schema, so each reply went out twice, as text and as structured content. That doubled what Copilot Studio counted. Replies now arrive once. Large dependency outputs in a delegated pause are listed by size instead of repeated in full.
The HTML renderer now handles nested lists, bold markers inside code, quotes and simple LaTeX. The build refuses to bundle a skills script that has drifted from the server's renderer. HTML stays opt-in, produced only when you ask for it.
list_sessions, poll_workflow and get_outputs return the first 200 characters of the original request, so an assistant can find "the SAD about the bowling alley ecommerce tool" weeks later without a session id.
Claude defaults are Sonnet 5.5 and Opus 5.5, and OpenAI defaults are gpt-6-luna, gpt-6.1-sol and gpt-6-astra. Docker and source installs pin mcp below 2.x, because an unpinned install had started pulling a version that removed the module the server imports.
There is also a closed Send feedback section on the setup page. It shows exactly what it sends and sends nothing until you press Send. The SPEAKMAN.AI agent circle is now the tray icon and the exe icon, and it shows on the setup page's browser tab too.
| Area | What to do |
|---|---|
| Workflows | Press Update workflows when the amber box appears. An older database keeps its old prompts until you do. |
| Skills | Press the skills update button on the setup page. |
| Tunnels | An existing tunnel gets a 403 until you turn on Remote access, and Copilot Studio then needs the token as an API key header. |
| Environment keys | Save the key on the setup page, or start the exe with SPEAKMANAI_USE_ENV=1. |
| Docker | Rebuild the image to pick up the mcp pin. |
| Sessions in progress | Finish them before changing the execution mode. |
The hosted SPEAKMAN.AI platform runs a full idea-to-production SDLC pipeline. This repository is the free, local, MIT licensed engine that executes the same MCP workflows, with full functionality for an individual user and no account required.
We tested this release with Claude Code, the Claude app and Copilot Studio. Cursor and Codex are labelled untested on the setup page, and the skills install only into Claude Code's folder for now.
| Mode | Command | Database |
|---|---|---|
| Windows exe | Run SpeakmanAI.exe | ~/.speakmanai/speakmanai.db |
| Docker + SQLite | docker-compose up --build | speakmanai_data volume |
| Docker + MongoDB | docker-compose --profile mongo up | MongoDB, port 27017 |
| Dev, no Docker | uvicorn server:app --port 8000 | ~/.speakmanai/speakmanai.db |
There's no account and no cloud dependency, and you pay nothing per call beyond your own provider key, if you add one. The Windows build is code-signed by Speakman Consulting Inc. A new release has little download history, so Windows SmartScreen may say the file isn't commonly downloaded. The publisher is named in that prompt, and More info then Run anyway continues. The exe uses SQLite only, and MongoDB is for Docker and source installs.
Download the signed exe, or clone and run with Docker. You get full functionality, with nothing sent anywhere else unless you add a model key or press Send on the feedback form.
The hosted SPEAKMAN.AI platform runs the same engine with the infrastructure teams need on top of it.
Written by David Speakman. Speakman Consulting designs and builds this kind of system for growing organizations: agent workflows with the governance that keeps humans in the loop.