Skip to main content
Glama
README.md
<p align="center">
  <img src="./assets/hero.svg" alt="commit-discipline-mcp — plan, test, and commit agent work safely" width="100%" />
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/commit-discipline-mcp"><img alt="npm version" src="https://img.shields.io/npm/v/commit-discipline-mcp?style=flat-square&color=cb3837" /></a>
  <a href="https://www.npmjs.com/package/commit-discipline-mcp"><img alt="npm downloads" src="https://img.shields.io/npm/dm/commit-discipline-mcp?style=flat-square&color=3178c6" /></a>
  <a href="https://github.com/ayush-singh-0601/commit-discipline-mcp/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/ayush-singh-0601/commit-discipline-mcp?style=flat-square&color=f5b83d" /></a>
  <a href="https://github.com/ayush-singh-0601/commit-discipline-mcp/actions/workflows/ci.yml"><img alt="cross-platform CI" src="https://img.shields.io/github/actions/workflow/status/ayush-singh-0601/commit-discipline-mcp/ci.yml?branch=main&style=flat-square&label=Windows%20%7C%20Linux%20%7C%20macOS" /></a>
  <a href="./LICENSE"><img alt="MIT license" src="https://img.shields.io/npm/l/commit-discipline-mcp?style=flat-square&color=2ea44f" /></a>
  <a href="https://nodejs.org"><img alt="Node 18 or newer" src="https://img.shields.io/node/v/commit-discipline-mcp?style=flat-square" /></a>
</p>

<p align="center"><strong>Small commits. Passing tests. Predictable agent workflows.</strong></p>

<p align="center">
  A cross-platform MCP server and CLI that turns one coding task into 2–4 ordered,<br />
  test-gated Git commits—without pushing, rewriting history, or sending telemetry.
</p>

<p align="center">
  <a href="#quick-start"><strong>Quick start</strong></a> ·
  <a href="#how-it-works"><strong>How it works</strong></a> ·
  <a href="./docs/quickstart.md"><strong>Guided demo</strong></a> ·
  <a href="#configuration"><strong>Configuration</strong></a>
</p>

---

## Why commit discipline?

Coding agents can solve large tasks quickly, but their Git history often arrives as one oversized commit—or a trail of commits made before tests ran. `commit-discipline-mcp` puts a small, deterministic control loop around that work.

| Common failure mode | Built-in guardrail |
| --- | --- |
| One giant, hard-to-review commit | Every task is planned into 2–4 ordered stages |
| Tests are run after the commit | The detected test suite must pass before staging |
| Unrelated files sneak into a commit | Files outside the active stage block the operation |
| An agent skips ahead | Only the next pending stage can be committed |
| Manual commits invalidate the plan | Unexpected `HEAD` movement is detected |
| A tool silently pushes code | This package never pushes or rewrites Git history |

It works with **Codex**, **Claude Code**, **Cursor**, and any MCP client that supports stdio tools. The same workflow is also available as a regular CLI.

## Quick start

Requirements: Node.js 18+, Git, and a clean Git repository.

```sh
npx -y commit-discipline-mcp@latest init --client all --yes
```

That command adds project-scoped MCP configuration and a reusable `commit-discipline` skill. Commit the generated files, reload your coding client, and ask:

> Use commit-discipline to split this task into small test-gated stages. Commit each completed stage and finish the task when the worktree is clean.

Choose clients explicitly when needed:

```sh
npx -y commit-discipline-mcp@latest init --client codex --yes
npx -y commit-discipline-mcp@latest init --client claude --yes
npx -y commit-discipline-mcp@latest init --client cursor --yes
```

| Client | MCP configuration | Installed skill |
| --- | --- | --- |
| Codex | `.codex/config.toml` | `.codex/skills/commit-discipline/SKILL.md` |
| Claude Code | `.mcp.json` | `.claude/skills/commit-discipline/SKILL.md` |
| Cursor | `.cursor/mcp.json` | `.cursor/skills/commit-discipline/SKILL.md` |

Use `--dry-run` to preview changes. Existing configuration is merged and backed up; `--force` is required to replace a conflicting entry.

## How it works

```mermaid
flowchart LR
    A[Clean repository] --> B[Plan 2–4 stages]
    B --> C[Work on current stage]
    C --> D{Tests pass?}
    D -- No --> C
    D -- Yes --> E[Validate scope and limits]
    E --> F[Create focused commit]
    F --> G{Stages left?}
    G -- Yes --> C
    G -- No --> H[Finish with clean worktree]
```

The MCP server exposes four focused tools:

| Tool | Purpose |
| --- | --- |
| `plan_task` | Record 2–4 stages with exact repository-relative files |
| `commit_stage` | Test, validate, stage, and commit only the active stage |
| `task_status` | Report progress and the next permitted stage |
| `finish_task` | Verify all stages are complete and the worktree is clean |

Plan state is stored locally in `.commit-discipline/plan.json` and ignored by default.

## CLI workflow

Prefer a terminal? Install the binary globally:

```sh
npm install --global commit-discipline-mcp
```

Create a stage file:

```json
[
  {
    "id": "core",
    "title": "Build the core",
    "description": "Implement the service layer",
    "files": ["src/core.ts"]
  },
  {
    "id": "tests",
    "title": "Add coverage",
    "description": "Cover the service behavior",
    "files": ["tests/core.test.ts"]
  }
]
```

Then run the lifecycle:

```sh
commit-discipline plan-task --description "Build the feature" --stages-file stages.json
commit-discipline task-status
commit-discipline commit-stage core --message "feat: add core service"
commit-discipline commit-stage tests --message "test: cover core service"
commit-discipline finish-task
```

See the [guided throwaway-repository demo](./docs/quickstart.md) for copy-pasteable PowerShell and Bash examples.

## Configuration

Add `commit-discipline.config.json` to the repository root when the defaults need adjustment:

```json
{
  "schemaVersion": 1,
  "enforcement": "strict",
  "maxFiles": 15,
  "maxLines": 400,
  "testTimeoutMs": 900000,
  "planVisibility": "local",
  "testCommand": {
    "command": "npm",
    "args": ["test"]
  }
}
```

| Option | Default | Behavior |
| --- | --- | --- |
| `enforcement` | `warn` | Use `strict` to block stages over configured limits |
| `maxFiles` | `15` | Maximum changed files per stage |
| `maxLines` | `400` | Maximum added and deleted lines per stage |
| `testTimeoutMs` | `900000` | Test-process timeout in milliseconds |
| `planVisibility` | `local` | Store plan state locally or as tracked project state |
| `testCommand` | auto-detected | Override the test command and arguments |

Without an override, the tool detects one JavaScript, Python, Go, Rust, or Make test ecosystem. If several ecosystems are present, set `testCommand` explicitly. Failed tests always block a commit.

<details>
<summary><strong>Useful CLI options</strong></summary>

- `--file <path>` commits a subset of the active stage's declared files.
- `--max-files N` and `--max-lines N` apply one-off limits.
- `--dry-run` validates a stage without tests, staging, commits, or state changes.
- `--json` returns machine-readable output for scripts and agents.

</details>

## Safety by design

- Plans start only from a clean worktree.
- Absolute paths and path traversal are rejected.
- Pre-existing staged files and out-of-scope changes are blocked.
- Tests run before staging; scope is checked again afterward.
- Dry runs do not mutate Git or plan state.
- No runtime network calls and no telemetry.
- No `git push`, force operations, resets, or history rewriting.

## Platform support

Every release is exercised across Windows, Ubuntu, and macOS on Node.js 18, 20, and 22. Packed-package smoke tests cover the full CLI lifecycle and the MCP stdio handshake.

| Platform | Native launch path | Status |
| --- | --- | --- |
| Windows | `cmd.exe` + npm shim | Tested in PowerShell and Command Prompt |
| Linux | `npx` | Tested in Bash |
| macOS | `npx` | Tested in Zsh |

For implementation details and trust boundaries, read the [architecture overview](./docs/architecture.md). Reusable starting points are available in [`examples/`](./examples/).

## Development

```sh
git clone https://github.com/ayush-singh-0601/commit-discipline-mcp.git
cd commit-discipline-mcp
npm ci
npm run verify
npm run smoke:package
npm run benchmark:git
```

The release gate includes type checking, 46+ unit and integration tests, package installation, a complete CLI/MCP lifecycle, and a Git-overhead benchmark against the PRD's 300 ms target.

## Community

- Read [CONTRIBUTING.md](./CONTRIBUTING.md) before opening a pull request.
- Report vulnerabilities privately using [SECURITY.md](./SECURITY.md).
- Get usage help through [SUPPORT.md](./SUPPORT.md).
- See [CHANGELOG.md](./CHANGELOG.md) for release history.
- Track upcoming directions in [ROADMAP.md](./ROADMAP.md).

If this project makes your agent-generated Git history easier to review, consider starring it—it helps other developers discover the tool.

## License

[MIT](./LICENSE) © Ayush Singh

TDQS

A4.1/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a unique, non-overlapping role: plan creation, stage execution, status inspection, and task completion. No ambiguity in purpose.

Naming Consistency5/5

All tool names follow the consistent verb_noun pattern (plan_task, commit_stage, task_status, finish_task), making the API predictable.

Tool Count5/5

4 tools provide a focused, well-scoped workflow for commit discipline without unnecessary bloat or missing essentials.

Completeness5/5

The toolset covers the full lifecycle: create plan, execute stages, check status, and finish. No obvious gaps in the workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues