MindSync AI
adityarya24.github.io/mindsync-ai
Run a fleet of coding agents without them tripping over each other. MindSync is local-first MCP orchestration: the CLI already talking to you becomes the orchestrator, and everything else runs through it — no separate app, no account, no hosted control plane.
- Routes by capability and tells you which agent it picked, and why.
- Blocks file collisions by showing active file focus before work starts.
- Remembers across sessions — decisions, blockers, and facts replay into the next run.
- Hands off before limits land — a job cools an exhausted provider and moves to the next agent; the Codex seat warns before it runs out.
You → human-facing CLI (orchestrator) → MindSync → Codex / Claude / Gemini / AGY / Grok / Cursor / OpenCode / Aider
Workers get bounded tasks. They cannot recursively delegate through MindSync. Remote sync is optional and runs through your own SSH host — your agents, your machine, your data.
Quick start
pip install mindsync-ai
mindsync setup --mode auto
mindsync doctor
mindsync agents
Requires Python 3.10+. Restart the configured CLI sessions after setup.
setup registers known MCP hosts (Codex, Claude, Gemini, Grok, Cursor, OpenCode)
and recognised PATH agent CLIs. MCP is installed only when MindSync has a real
recipe — it will not guess mcp add flags. Unknown binaries are suggested, not
registered, and never executed. Use mindsync register for an unusual name.
mindsync setup --dry-run # preview
mindsync setup --cli grok # one known host, no PATH scan
mindsync setup --no-discover # hosts only
mindsync setup --no-hooks # skip Codex standalone hooks
Install from source: python -m pip install -e ".[dev]"
Supported clients
A CLI may be an MCP host, a worker, or both.
| CLI | MCP host | Worker | Notes |
|---|---|---|---|
| OpenAI Codex | Native | Yes | Also gets standalone memory hooks |
| Anthropic Claude | Native | Yes | Architecture, review, large context |
| Google Gemini CLI | Native | Yes | Gemini/Antigravity family |
Antigravity (agy) |
Via Gemini | Yes | Preferred worker in that family |
| Grok CLI | Native | Yes | Research, review, security |
| Cursor Agent | JSON | Yes | ~/.cursor/mcp.json |
| OpenCode | JSON | Yes | ~/.config/opencode/opencode.jsonc |
| Aider | — | Yes | Focused editing |
Gemini CLI and agy are one family. When either is the human-facing orchestrator,
both are excluded from automatic worker selection.
Orchestration
Policy lives in ~/.mindsync/orchestration.json. Modes: auto, suggest, off.
mindsync config orchestration.mode auto
mindsync-dispatch run auto "implement and test the fix" --capability coding
mindsync-dispatch status
Provider quota handoff is opt-in and requires an isolated worktree:
mindsync-dispatch run auto "implement and test the fix" --write --worktree --on-limit handoff
mindsync-dispatch limits # inspect provider/account cooldowns
mindsync-dispatch limits clear # clear cooldowns after operator verification
Pre-emptive usage readers are pluggable per provider. The Codex adapter can
read primary and weekly OAuth usage windows from the local ~/.codex/auth.json
source when a reader is configured. Pre-emptive polling and threshold handoff are
opt-in: they require both usage.enabled: true in agents.json and
--on-limit handoff on an isolated worktree job. Global usage settings default
to disabled:
{
"usage": {
"enabled": false,
"defaultThresholdPercent": 90,
"orchestratorReservePercent": 80,
"pollingIntervalSeconds": 60
}
}
defaultThresholdPercent is the dispatched-worker handoff threshold.
orchestratorReservePercent is a separate opt-in Codex standalone Stop
warning line; when omitted it follows defaultThresholdPercent so existing
configs keep working. Neither field is a live usage estimate.
When enabled, dispatch polls at pollingIntervalSeconds during a running
attempt, skips cooling or over-threshold provider accounts before spawn, and may
transfer only when a privacy-safe MindSync checkpoint already exists for that
attempt (plus the worktree diff and original task). There is no generic CLI
control channel: dispatch does not ask arbitrary agents to write HANDOFF.md.
Without a checkpoint, threshold hits are recorded as preemptiveBlocked and
the attempt keeps running so reactive quota handoff remains the floor. Job
status shows usage evaluation, skips, blocks, and handoffs; only percentages,
window labels, reset times, scope, and reasons are persisted — never raw usage,
auth, or source payloads.
Per-adapter overrides use usageReader and optional usageThresholdPercent.
The bundled Codex preset declares usageReader: "codex-oauth".
Near the Codex standalone usage threshold, Stop warns the operator, points at
the ranked dispatch successor, and does not launch another CLI. Other
adapters have no pre-emptive reader; mindsync doctor shows usage_mode and
whether reactive cooldown uses a parsed stderr timestamp or quotaCooldownSeconds.
Only configured provider-specific exhaustion messages rotate. Timeouts, auth errors, generic rate limits, failing tests, and ordinary agent failures stop the job. A successor receives the same worktree, the original task, and the latest structured MindSync checkpoint; because routing may select another provider, enable handoff only when that cross-provider context transfer is acceptable.
Completed jobs keep their branch by default. To push a successful isolated job and open a pull request for review, enable it for that repository:
mindsync config onComplete pr --project .
MindSync never merges the pull request. It also declines to publish when a
requested check failed or did not report, private prompt framing cannot be
separated safely, commit hooks refuse the work, or changed paths look like
secrets. Use MINDSYNC_ON_COMPLETE=pr for a one-run override.
Custom worker:
mindsync register --name my-worker --bin my-cli --capability coding
Heavy tags (security, large-context, multimodal) need --confirm.
Roster and jobs: ~/.mindsync/dispatch/ (AGENT_DISPATCH_HOME overrides).
Memory
Dispatch memory defaults to auto in git checkouts (opaque git identity, never
a path or repo name). Failures warn; they do not fail the job.
mindsync memory stats
mindsync memory list --project my-repo
mindsync memory recall --project my-repo --query "database decision"
Nothing is pruned without --yes. See MCP tools on the server (get_sync_context,
delegate_task, job(action='wait'), …) once a host is configured. Orchestrator
MCP exposes 16 tools; worker subprocesses started with MINDSYNC_WORKER=1 expose
12 and omit orchestration-only dispatch tools (delegate_task, route_task,
get_orchestration_policy, list). Job/event/session/consolidation helpers are
subject bundles with no old-name aliases.
Optional completionSinkCmd in the orchestration policy is an argv list
(no shell) that receives one JSON object on stdin after job.completed /
job.failed is persisted: event_id, job id/status, bounded summary, optional
privacy-screened task, optional PR URL. The allowlisted projection is written to
an outbox before send; failed delivery stays pending and is retried on the next
drain (later job events or process restart). Each drain stops after the first
sink failure and is bounded by a short wall-clock budget and attempt cap.
Duplicate event_ids are not resent.
Sink failure never changes job status. Leave it empty to keep current behavior.
Optional remote sync
export MINDSYNC_SSH_HOST=my-server
export MINDSYNC_REMOTE_ROOT=/opt/mindsync
Worker loop and VPS scripts: examples/remote/.
Environment variables: .env.example.
Safety
- The human-facing CLI owns authorization and the final answer.
- Setup never executes a binary it cannot name.
- Existing MCP registrations are preserved unless
--force. - Local state uses crash-safe locks and atomic writes. On Windows, tune queue
lock deadlines and OS-lock contention backoff via
MINDSYNC_QUEUE_LOCK_TIMEOUT,MINDSYNC_LOCK_CONTENTION_BACKOFF_BASE, andMINDSYNC_LOCK_CONTENTION_BACKOFF_MAX(see.env.example).
Runs with the current user's privileges. See SECURITY.md.
Development
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -e ".[dev]"
python -m ruff check .
python -m pytest -q
Use the venv. sqlite-vec is a package dependency; a bare system Python will
fail the Tier 2 tests.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mindsync_ai-1.8.0.tar.gz.
File metadata
- Download URL: mindsync_ai-1.8.0.tar.gz
- Upload date:
- Size: 262.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93f0e0246f8e619e36201a48e577777bc2cd69f90e2b5ac1adc850f65d8312dd
|
|
| MD5 |
f7e7861ac7e001273fb841c9fcc30f07
|
|
| BLAKE2b-256 |
052df17453f50af0157312789138b25fdfef8f50e599b51dde409aabb995652e
|
Provenance
The following attestation bundles were made for mindsync_ai-1.8.0.tar.gz:
Publisher:
release.yml on adityarya24/mindsync-ai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mindsync_ai-1.8.0.tar.gz -
Subject digest:
93f0e0246f8e619e36201a48e577777bc2cd69f90e2b5ac1adc850f65d8312dd - Sigstore transparency entry: 2641936886
- Sigstore integration time:
-
Permalink:
adityarya24/mindsync-ai@031ded025dc9520f728896733515707f8d6c1555 -
Branch / Tag:
refs/tags/v1.8.0 - Owner: https://github.com/adityarya24
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@031ded025dc9520f728896733515707f8d6c1555 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mindsync_ai-1.8.0-py3-none-any.whl.
File metadata
- Download URL: mindsync_ai-1.8.0-py3-none-any.whl
- Upload date:
- Size: 178.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c4c38e37b7bf3738f09a77bee1b31e22179be4ab307bac511b9a4ecea3d01e8
|
|
| MD5 |
c29c983b19c2a6596a6505bb68d226ee
|
|
| BLAKE2b-256 |
14ce42049b2b96c4b3e39cabc02e90f21eaae93b6e03ef287b72c322cf262106
|
Provenance
The following attestation bundles were made for mindsync_ai-1.8.0-py3-none-any.whl:
Publisher:
release.yml on adityarya24/mindsync-ai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mindsync_ai-1.8.0-py3-none-any.whl -
Subject digest:
7c4c38e37b7bf3738f09a77bee1b31e22179be4ab307bac511b9a4ecea3d01e8 - Sigstore transparency entry: 2641936938
- Sigstore integration time:
-
Permalink:
adityarya24/mindsync-ai@031ded025dc9520f728896733515707f8d6c1555 -
Branch / Tag:
refs/tags/v1.8.0 - Owner: https://github.com/adityarya24
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@031ded025dc9520f728896733515707f8d6c1555 -
Trigger Event:
push
-
Statement type: