Multi-harness
9 built-in harnesses. Pick one per task and switch in the same chat.
Agent harnesses »Teach AI your team's playbook once. Then people and agents run it together.
SoduWork has three parts: a desktop client, a Hub and runners. You host the Hub yourself. You package a team's method as a plugin and choose the harness (runtime) and model for each step.
$ git clone https://github.com/mdiri-ai/SoduWork$ cd SoduWork$ python start.py --desktopSoduWork is ready: http://127.0.0.1:18989Administrator: admin
9 built-in harnesses. Pick one per task and switch in the same chat.
Agent harnesses »Each step of a workflow can run on an agent on a different harness, with people at the checkpoints.
Hand-offs and routing »Criteria, build, review, test, merge and release in one flow.
Workflow nodes »Describe the tool you need. SoduWork builds and opens it, and you improve it as you go.
Apps »Turn finished work into a plugin everyone can use after review.
Publish to your organization »The desktop workspace for chats, issues, plugins and apps. It starts harnesses on the user's computer.
The service every client connects to. It owns users, tasks and the plugin catalog.
The process that does the work, on the user's computer or on a shared server.
Start the Hub, admin console and desktop client on one computer with one launcher, or run the Hub with Docker and PostgreSQL for a team.
Describe the work to the built-in Plugin Developer, or use Create an app for a plugin with its own window. SoduWork writes, checks and installs it. You can also write the files yourself.
Add any program that supports the Agent Client Protocol (ACP) with one declaration in the harness catalog.
Connect business systems through OAuth connectors, OpenAPI-based REST APIs and MCP.
Clients talk to one Hub. The Hub dispatches work to a local or cloud runner, and the runner starts the harness.
Read the architecture overview »A plugin states the inputs, the steps, which harness and model runs each step, and what counts as done. Use it with / in a chat, or start it from an issue or a schedule. In this one, Pi drafts the weekly brief, Qwen Code checks each claim against its sources, and the run stops if the check fails.
You don't have to write this by hand: describe the work to Plugin Developer and it produces the same file.
Create a plugin in chat »{
"schemaVersion": 1,
"key": "weekly-brief",
"version": "1.0.0",
"name": "Weekly brief",
"description": "A weekly brief checked against its sources.",
"instructions": "Summarize this week's work into results, risks and next steps. Do not invent facts.",
"entrypoints": { "conversation": true, "task": true, "automation": true },
"workflow": {
"nodes": [
{
"key": "draft", "type": "ai", "name": "Draft the brief",
"config": { "prompt": "Write deliverables/brief.md from this week's tasks.", "agentKind": "local:pi" },
"outputs": [{ "key": "brief", "kind": "file", "path": "deliverables/brief.md", "required": true }]
},
{
"key": "check", "type": "ai_review", "name": "Check against sources", "dependsOn": ["draft"],
"inputs": [{ "key": "brief", "fromNode": "draft", "outputKey": "brief", "required": true }],
"config": { "prompt": "Check each claim against the sources. Write review.json; block if any claim has no source.", "agentKind": "local:qwen" },
"outputs": [{ "key": "verdict", "kind": "decision", "path": "review.json", "required": true }]
},
{ "key": "done", "type": "publish", "name": "Finish", "dependsOn": ["check"] }
]
}
}SoduWork's own source is copyright MDiRi and released under the MIT license. Dependencies and bundled tools keep their own licenses. Issues, pull requests, translations and plugins are welcome.
Source on GitHub · How to contribute · Report a security issue
You need Python 3.12, Node.js 22.19 and a network connection for the first start.
Get started »