Subconductor
A persistent state machine and notification system for AI agents to manage complex, multi-step workflows via the Model Context Protocol, preventing context drift by maintaining structured checklists and sending desktop alerts.
README
Subconductor
A persistent state machine and notification system for AI agents to manage complex, multi-step workflows via the Model Context Protocol (MCP).
Subconductor prevents "context drift" by maintaining a single source of truth for project progress across multiple independent checklists. It stores these in a structured .subconductor/checklists/ directory along with a global .subconductor/checklists.md index file. It keeps the user informed through a robust notification system that triggers during long-running tasks or checklist completion. This allows agents to "remember" their exact state, completed milestones, and remaining blockers across multiple sessions and parallel workflows.
Quick Start
Add Subconductor to your MCP-compatible host (e.g., Claude Desktop or Gemini) using npx:
"subconductor": {
"command": "npx",
"args": ["-y", "@psno/subconductor"]
}
Configuration Flags
You can customize the server behavior using the following flags:
--disable-batch(or-b): Disable batch operation tools (get_pending_tasks,mark_tasks_done,unmark_tasks,add_tasks,remove_tasks).--disable-alerts(or-a): Disable all desktop notifications and thealerttool.
Tools Included
init_checklist
Initialize a new task checklist. This automatically creates a dedicated folder and registers the checklist in the central index.
- Arguments:
tasks(array): List of tasks to perform. Can be strings or objects withnameand an optionalnote.goal(string): The high-level objective of the workflow.columns(string[], optional): Custom columns for the task table.Status,ID, andNameare always included.
- Effect: Creates a nested
.subconductor/checklists/<goal-slug>/checklist.mdfile and updates the active pointer in.subconductor/checklists.md.
activate_checklist
Switch the active context to a different, previously initialized checklist.
- Arguments:
checklistName(string): The numeric ID from the index, or a partial string match of the checklist's goal name.
- Effect: Updates
.subconductor/checklists.mdto mark the targeted checklist asActiveand all others asIdle.
archive_checklist
Moves a checklist to the archive directory to keep the active index clean.
- Arguments:
checklistIdentifier(string): The numeric ID from the index, or a partial string match of the checklist's goal name.
- Effect: Moves the checklist folder to
.subconductor/archive/checklists/and updates its status toArchivedin the index table.
get_pending_task
Retrieves the next uncompleted task from the active checklist.
- Effect: Returns the first task with an ID prefix (e.g.,
(#1) Task Name). ReturnsDONEif all tasks are completed.
get_pending_tasks
Retrieves a batch of uncompleted tasks from the active checklist (requires batch tools enabled).
- Arguments:
count(number): The number of pending tasks to retrieve (default: 5).
- Effect: Returns a list of tasks with ID prefixes or
DONE.
add_task
Appends a new task to the active checklist dynamically.
- Arguments:
name(string): The name of the task.note(string, optional): An optional note.
- Effect: Appends the task, automatically assigns a monotonic immutable ID, and updates the completion header.
add_tasks
Appends multiple new tasks to the active checklist dynamically.
- Arguments:
tasks(array): List of tasks to add (objects withnameand optionalnote).
- Effect: Appends all tasks sequentially, automatically assigning immutable IDs.
remove_task
Deletes a task from the active checklist.
- Arguments:
task(string): The task ID (e.g., "1") or the full task name.
- Effect: Removes the task row and updates the completion header. Note: Existing task IDs remain immutable and are not shifted.
remove_tasks
Deletes multiple tasks from the active checklist in a single batch operation.
- Arguments:
tasks(array): List of task IDs or names to remove.
- Effect: Removes all specified task rows safely.
mark_task_done
Updates a specific task's status to completed in the active checklist.
- Arguments:
task(string): The task ID (e.g., "1") or the full task name.note(string, optional): An additional note or status message.
- Effect: Updates the status to
Doneand records the note in theNotescolumn. Automatically triggers a notification upon completion of the final task in the active checklist.
mark_tasks_done
Updates multiple tasks' statuses to completed in the active checklist.
- Arguments:
tasks(array): List of objects containingname(ID or task name) and an optionalnote.
- Effect: Marks all specified tasks as
Doneand evaluates overall checklist completion.
unmark_task
Reverts a completed task back to pending status.
- Arguments:
task(string): The task ID (e.g., "1") or the full task name.
- Effect: Reverts status to
Pending(Idle), clears associated notes, and rolls back the completion goal header.
unmark_tasks
Reverts multiple completed tasks back to pending status in a single batch operation.
- Arguments:
tasks(array): List of task IDs or names to unmark.
- Effect: Reverts all specified tasks to
Pending(Idle).
alert
Sends a system-level notification with sound and icon support.
- Arguments:
title(string): The title of the notification.message(string): The message body.status('info' | 'warn' | 'error'): The severity level (default: 'info').
- Effect: Triggers a desktop notification with status-specific icons and sounds.
Resources
Changelog - Check out the latest changes.
License & Attribution
This project is licensed under the Apache License 2.0.
Important Attribution Requirement: In accordance with Section 4(d) of the Apache License, if you modify this software or build new features based on this codebase, you must retain the attribution to Paul Benchea as the original author. Please refer to the NOTICE file for specific details.
Built with the Model Context Protocol.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。