Skip to main content
Glama

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 the alert tool.

Related MCP server: Nexus-MCP

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 with name and an optional note.

    • goal (string): The high-level objective of the workflow.

    • columns (string[], optional): Custom columns for the task table. Status, ID, and Name are always included.

  • Effect: Creates a nested .subconductor/checklists/<goal-slug>/checklist.md file 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.md to mark the targeted checklist as Active and all others as Idle.

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 to Archived in 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). Returns DONE if 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 with name and optional note).

  • 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 Done and records the note in the Notes column. 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 containing name (ID or task name) and an optional note.

  • Effect: Marks all specified tasks as Done and 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.

Available Tools

14 tools
activate_checklistA

Activate a previously initialized checklist by its goal name or a substring of it. The activated checklist will receive all subsequent task operations.

Inputs: checklistName (required).

add_taskB

Add a new task to the active checklist. The task is appended to the end of the list and automatically assigned a new ID.

Inputs: name (required), note.

add_tasksA

Add multiple new tasks to the active checklist. Tasks are appended to the end of the list and automatically assigned new IDs.

Inputs: tasks (required).

alertA

Trigger a desktop notification with a custom title, message, and severity level (info, warn, error). This is useful for providing immediate feedback on background task completion or issues.

Inputs: title (required), message (required), status.

archive_checklistA

Archive a checklist by its goal name, a substring of it, or its numeric ID. The checklist will be moved to the archive directory and marked as Archived in the global index.

Inputs: checklistIdentifier (required).

get_pending_taskA

Retrieve the next single pending task from the active checklist. Returns "DONE" if all tasks are finished. Tasks are returned with an ID (e.g., "(#1) Task Name") which can be used to reference them efficiently.

Inputs: no named parameters.

get_pending_tasksA

Retrieve a batch of multiple pending tasks from the active checklist. Tasks are returned with an ID (e.g., "(#1) Task Name") which can be used to reference them efficiently. This is useful for getting an overview of upcoming work or for efficiently processing multiple simple tasks in a single turn.

Inputs: count.

init_checklistA

Initialize a new task checklist for the current subconductor run. This tool creates a task table with Status, ID, Name, and optional custom columns. It also natively sets up goal tracking to monitor completion progress.

Inputs: tasks (required), goal (required), columns.

mark_task_doneA

Mark a specific task as completed in the active checklist. You can reference the task by its ID (e.g., "1" or "#1") for efficiency, or by its full name. You can optionally provide a note detailing the progress or result.

Inputs: task (required), note.

mark_tasks_doneA

Mark multiple tasks as completed in a single batch operation. You can reference tasks by their ID (e.g., "1" or "#1") or by their full name. This is efficient when several tasks are finished simultaneously. Like mark_task_done, you can optionally provide a note for each task to document progress or results.

Inputs: tasks (required).

remove_taskA

Remove a task from the active checklist. Warning: Removing a task will automatically re-index the IDs of all subsequent tasks in the checklist.

Inputs: task (required).

remove_tasksA

Remove multiple tasks from the active checklist. Safe for batch deletion, as remaining tasks are dynamically re-indexed only after all specified removals are processed.

Inputs: tasks (required).

unmark_taskA

Revert a completed task back to pending status in the active checklist. You can reference the task by its ID (e.g., "1" or "#1") or by its full name. Any completion notes will be removed.

Inputs: task (required).

unmark_tasksA

Revert multiple completed tasks back to pending status in a single batch operation. You can reference tasks by their ID (e.g., "1" or "#1") or by their full name.

Inputs: tasks (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 14 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: operations on checklists (init, activate, archive) and tasks (add, get, mark, remove, unmark) are well-separated, including singular/plural variants for batch operations. The alert tool is unrelated but not overlapping.

    Naming Consistency4/5

    Most tools follow a consistent verb_noun pattern (e.g., add_task, mark_task_done). The only deviation is 'alert', which lacks a noun, and 'init' instead of 'initialize', but these are minor and do not cause confusion.

    Tool Count5/5

    With 14 tools, the server covers all essential operations for checklist management without unnecessary bloat. The count fits well within the typical 3-15 range for a focused domain.

    Completeness4/5

    The toolkit covers the full lifecycle of checklists and tasks (create, read, update, delete). Minor gaps exist, such as no tool to list all checklists or update task content, but core workflows are supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A Model Context Protocol service that sends desktop notifications and alert sounds when AI agent tasks are completed, integrating with various LLM clients like Claude Desktop and Cursor.
      1
      54
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      A comprehensive Model Context Protocol toolkit that transforms AI assistants into autonomous agents capable of executing real-world tasks across filesystems, web requests, Git workflows, databases, system commands, and AI integrations.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Provides AI agents with a lightweight task-management and self-verification layer to define goals, track checkpoints, detect scope drift, and verify completion against explicit done criteria.
      12
      MIT