subroutine
v0.8.19Agent-native task management for complex projects, where the decisions live beside the work. Wires this session to a Subroutine instance and carries the working practice for using it well. Nothing to install first: it starts Subroutine through 'uvx', which fetches and caches it on first use — so you need uv on your machine (astral.sh/uv) and nothing else. If you have already run 'uv tool install subroutine', that copy is used instead. It starts a program on your own machine, so it works in Claude Code and the desktop apps and not on the web.
By Simon Holliday5 GitHub starsUpdated last week
Directory evidence
- Runtimes
- Claude Code
- Parsed components
- 2 skill or MCP entries
- Source updated
- Sep 16, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install subroutine for Claude Code
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install subroutine@agent-plugin-marketplacePaste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/simonholliday/subroutineClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is plugins/subroutine/.
Plugin files
├── .claude-plugin/plugin.json├── skills/subroutine/SKILL.md└── .mcp.json
Included Skills1
Track work in Subroutine — file tasks, find what can actually be started, record what happened, and write down conclusions the next session will need. **Read this before the first subroutine_* call of a session, including a read-only one.** It carries conventions the tool descriptions do not — how to open so you are not answering from a stale snapshot, how to ask for work that can actually be started, what a title has to say, and which end of a blocks link is the blocker. Also when the user asks what to work on, reports a problem, asks you to log or file something, finishes a piece of work, wonders where something was left, asks whether Subroutine is connected or what is in it, or says this project uses Subroutine — and for adopting Subroutine in a project that does not use it yet.
MCP servers1
- command
- uvx
- args
- subroutine~=0.8.0 mcp --connection ${user_config.connection} --workspace ${user_config.workspace}
- env.SUBROUTINE_TOKEN
- ${user_config.token}
Plugin manifests1
{
"name": "subroutine",
"version": "0.8.19",
"description": "Agent-native task management for complex projects, where the decisions live beside the work. Wires this session to a Subroutine instance and carries the working practice for using it well. Nothing to install first: it starts Subroutine through 'uvx', which fetches and caches it on first use — so you need uv on your machine (astral.sh/uv) and nothing else. If you have already run 'uv tool install subroutine', that copy is used instead. It starts a program on your own machine, so it works in Claude Code and the desktop apps and not on the web.",
"author": {
"name": "Simon Holliday",
"email": "[email protected]"
},
"homepage": "https://github.com/simonholliday/subroutine",
"keywords": [
"tasks",
"project-management",
"todo",
"self-hosted",
"planning"
],
"userConfig": {
"connection": {
"type": "string",
"title": "Which instance (optional)",
"description": "The name of a connection you have already configured, such as 'work'. Leave this empty for your default connection — the database on this machine, unless you have set 'default_connection' to something else. Run 'subroutine connections' to see the names and which one that is. Note that one session reaches one instance, so if you keep work and personal instances separately, name the one this project belongs to. Connections are set up with 'subroutine' itself, not here.",
"default": ""
},
"workspace": {
"type": "string",
"title": "Which workspace (optional)",
"description": "The workspace this session's work belongs in, by its short name — 'subroutine list' prints them beside each item when there is more than one. Leave empty if this instance has only one, which is the usual case: it is then resolved for you and naming it here would be a word you never needed. With two or more, an agent that has not been told a name has every read refused as ambiguous, and no way to learn one. This is a default rather than a limit — a call may still name another, and a token pinned to a workspace is what narrows access for real.",
"default": ""
},
"token": {
"type": "string",
"title": "Agent token (optional)",
"description": "A token issued for this agent, if you want it to have less access than you do — 'subroutine token create --service-account claude --project web'. IMPORTANT: this reaches the tools only. An agent that can also run shell commands uses whatever credential the command line resolves there, which is normally yours — so filling this in gives you an agent that is itself half the time and you the other half, silently. To cover both, leave this empty and set SUBROUTINE_TOKEN_<CONNECTION> in the environment you start your editor from, upper-cased: SUBROUTINE_TOKEN_WORK for a connection called 'work'. The tools and the shell both read that. Leave empty with nothing set to act as you. Your editor stores this, not Subroutine, and where it puts it depends on the editor and the machine — on Windows it is a file under your home directory. Treat it as you would any password there.",
"sensitive": true,
"default": ""
}
}
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[subroutine on Agent Plugins Marketplace](https://pluginsmp.com/plugins/subroutine)