Synaptory Getting Started
Install a host, configure SPQ, and start your first governed Cycle.
Getting Started
This guide takes a new user from installation to the first governed SPQ Cycle on Claude Code, Codex, or Cursor.
What you will set up
Synaptory has two required components:
- A host plugin for Claude Code, Codex, or Cursor.
- The
synaptoryCLI, shared across hosts and projects on the same laptop.
Runtime federation is optional and comes later. First establish a working SPQ project on one host.
1. Choose a host
| Host | Minimum and scope | Invocation | Important boundary |
|---|---|---|---|
| Claude Code | Claude Code 2.1.196 or newer | /synaptory | Full host-native hook surface. Reload after installation or update. |
| Codex | Codex CLI 0.147.0 or newer; standard, non-regulated SPQ | $synaptory | Project bootstrap is dry-run first, installs nine managed profiles, and requires a new task after apply. |
| Cursor IDE | Staff Team marketplace or licensed local install | /synaptory | SPQ is certified. Reload the window after install. |
| Cursor CLI/headless | cursor-agent with project MCP preflight | /synaptory in the agent prompt | The IDE's local-plugin directory is not loaded by the CLI; preflight is mandatory. |
Use a single host as the writer for an active governed stage. Sharing the same repository does not create a supported cross-host handoff workflow.
2. Install the CLI and sign in
Install once per laptop:
# macOS / Linux
curl -fsSL https://synaptory.h3t.co/cli/install.sh | bash
# Windows PowerShell
iwr -useb https://synaptory.h3t.co/cli/install.ps1 | iex
Then sign in with your organization identity:
synaptory login
synaptory whoami
synaptory projects list
For a machine without a browser, use synaptory login --device. See Install the CLI for PATH, update, checksum, and keychain details.
3. Install the host plugin
Claude Code
Run these commands inside Claude Code:
/plugin marketplace add https://github.com/h3tech-ai/marketplace
/plugin install synaptory@h3tech-ai
Restart Claude Code or reload the window. For automatic updates, open /plugin, select the h3tech-ai marketplace, and turn Auto-update on.
Verify with:
/synaptory doctor
Codex
Run these commands in a terminal:
codex plugin marketplace add https://github.com/h3tech-ai/marketplace
codex plugin add synaptory@synaptory-dev
Start a new Codex task and invoke $synaptory. On the first project run, Synaptory checks readiness and presents a bootstrap dry-run if the managed profiles or project configuration are missing. Review the planned files, confirm apply, and then start another new task so Codex discovers the nine profiles.
Codex refuses regulated baa_enforced projects on this standard path. Do not interpret a successful install as regulated certification.
Cursor IDE
An organization administrator imports GitHub repository h3tech-ai/marketplace into the Cursor Team marketplace and makes the synaptory plugin available. Install it from the team catalog, then run:
synaptory skills sync --host cursor
Reload Cursor and verify with /synaptory doctor.
Synaptory is not distributed through the public cursor.com marketplace because that marketplace requires open-source packages.
Cursor CLI or CI
The IDE convention ~/.cursor/plugins/local is not loaded by cursor-agent. For a licensed checkout, wire and verify the project MCP before every headless run:
python3 plugin-cursor/scripts/preflight.py --project <project> --write
cd <project>
cursor-agent mcp enable synaptory
python3 plugin-cursor/scripts/preflight.py --project <project>
The final command must print ready: and exit 0. For an explicit plugin path, use agent --plugin-dir ./plugin-cursor.
4. Bind the repository to a project
At the repository root, identify the Control Plane project and select SPQ explicitly:
# .synaptory.yaml
project_id: "my-project"
build_mode: "spq"
engagement_mode: "structured"
tracker:
backend: "local"
You can ask the host to generate the file:
Initialize this project for governed SPQ delivery.
Review the proposed file before approving it. In particular, confirm project_id, build_mode: spq, repository paths, and tracker configuration.
Why explicit? SPQ is the recommended lifecycle, but the current compatibility default for an omitted
build_modeis still Scrum. Explicit configuration prevents a new project from entering the legacy lifecycle.
5. Declare the source region and the trunk
A Cycle declares the repository paths it may address and the one shared branch it integrates into. There are no lanes to define and no parallelism to switch on -- concurrency is a consequence of the path scope each Work Unit declares.
spq:
source_region:
- "api/"
- "web/"
trunk_ref: "refs/heads/dev"
Overlapping source regions are refused at declaration. That refusal is what lets two Cycles run concurrently without either one inspecting what the other admits.
6. Start the first Cycle
Give Synaptory an outcome, not an instruction to mutate lifecycle files:
Use SPQ to deliver account sign-in with audit logging. Start Discovery and
show me the baseline before Commit.
The normal path is:
- Discovery frames the outcome, the constraints, the source region and the evidence expectations.
- Baseline approval is a human gate. It needs a measured calibration sample, not just a sha -- review and explicitly approve or request changes.
- Commit admits a non-empty set of ready Work Units, each declaring its path scope, and seals the declaration. Nothing joins the Cycle afterwards.
- The Cycle dispatches the exact next role for each Work Unit and validates its receipt. Disjoint units run concurrently with nothing to enable; intersecting ones run in the order they declared.
- A cut, if the Cycle cannot finish its admitted set. Explicit reason, backlog return, and a key a later Commit can name. It never moves the baseline.
- The barrier evaluates the admitted set minus the recorded cuts -- all of it or none -- and integrates the result to the shared trunk.
- Checkpoint records the demonstration, the verdict, the integrated trunk revision and the cut list, and asks whether to open another Cycle or proceed to Acceptance.
- Acceptance runs the release roles and stops for the human release decision. Only the final one closes the engagement.
There is no Sync to wait for. Sync records that one Cycle waited on another's published result and how it cleared; it has zero or more occurrences and blocks nothing. What blocks a Work Unit is an unsatisfied dependency, and /synaptory status says which one.
At any boundary, ask:
/synaptory status
On Codex, use $synaptory and ask for status in the same request. Do not run the lifecycle Python modules directly and never edit .synaptory/.orchestrator/pipeline-state.json.
7. Add runtime federation only when needed
The host-native path is enough for the first Cycle. To inspect the runtimes the machine can serve:
synaptory runtimes list
synaptory runtimes doctor
Runtime selection remains inert until an enabled runtimes: policy is present in an SPQ project. The selected delivery role maps to one of four capability profiles, and policy cannot select anything outside allowed_profiles. Capability profiles do not grant authority; the dispatch envelope does.
Read Hosts and Runtimes before enabling it.
8. One shape, and when to open a second Cycle
There is one delivery shape: a Cycle. Open a second concurrent Cycle when the work has its own cadence and a source region that does not overlap the first -- that is the whole condition, and no layer above them composes anything.
- Work that belongs to one increment: one Cycle. Continue with
- Work with its own cadence and a disjoint region: a second Cycle, with its own
Lead, Crew and Checkpoint. Neither waits for the other.
- Work that cannot be ordered -- a mutually dependent pair -- goes in one
Cycle. It cannot be split across two, and the declaration refuses the split and names the route.
- Existing Scrum, Kanban, or Multi-Spec project: follow
Next reading
Install the synaptory CLI
The synaptory CLI handles sign-in, session state, governed skill/policy delivery, diagnostics, telemetry, and optional Runtime Bridge operations. Install it once per laptop — the same install works across Claude Code, Codex, Cursor, and every Synaptory project you can access.
The CLI is shipped separately from all host plugins. The download script detects your OS/architecture, verifies SHA-256, and places the binary on your $PATH.
macOS / Linux
curl -fsSL https://synaptory.h3t.co/cli/install.sh | bash
That's it. The script:
- Detects
darwin-arm64,darwin-amd64,linux-amd64, orlinux-arm64. - Resolves
latest.json, then downloads the versioned binary andsha256sums.txtfromsynaptory.h3t.co/cli/. - Verifies the SHA-256 before installing.
- Installs to
~/.local/bin/synaptory. - Tells you the line to add to
~/.zshrc/~/.bashrcif~/.local/binisn't on your$PATH.
After install:
synaptory version # confirm the CLI is on PATH
synaptory login # sign in via Entra (browser opens)
The login step prints the projects you can see right after sign-in, so you'll know immediately whether the operator has provisioned you correctly.
Custom install location
Set SYNAPTORY_CLI_PREFIX if ~/.local isn't where you want it:
SYNAPTORY_CLI_PREFIX=$HOME/Tools curl -fsSL .../cli/install.sh | bash
# installs to $HOME/Tools/bin/synaptory
Updating the CLI
Re-run the same one-liner. The script is idempotent and overwrites with the latest version.
Uninstall
rm ~/.local/bin/synaptory
synaptory logout # if you want the keychain cleared first
Windows
iwr -useb https://synaptory.h3t.co/cli/install.ps1 | iex
The script:
- Detects amd64 (the only Windows build we publish).
- Resolves
latest.json, then downloadssynaptory-windows-amd64.exeandsha256sums.txtfromsynaptory.h3t.co/cli/. - Verifies the SHA-256.
- Installs to
%USERPROFILE%\bin\synaptory.exe. - Adds
%USERPROFILE%\binto your userPATHif it isn't already (no admin needed; survives reboot).
If the script added a directory to PATH, open a new PowerShell window so the updated PATH is loaded. Then:
synaptory version
synaptory login
Updating
Re-run the same one-liner.
Uninstall
Remove-Item "$env:USERPROFILE\bin\synaptory.exe"
synaptory logout # not strictly required; the keychain entry is harmless
Commands every user should know
These are the commands you'll run directly. Hooks call the rest for you.
| Command | What it does |
|---|---|
synaptory login | Open a browser, sign in via Entra. Session is cached in the OS keychain. No --project flag — one sign-in covers every project you're a member of. |
synaptory whoami | Print the cached UPN and session expiry. First check when something feels wrong. |
synaptory projects list | List the projects you can see, with your role in each. |
synaptory status | Full diagnostic — control-plane URL, session state, skill cache, outbox depth. |
synaptory logout | Clear the cached session. The next governed host session will prompt you to sign in again. |
synaptory version | Print the CLI version. Useful when reporting issues. |
Less common, but good to know
| Command | When to use it |
|---|---|
synaptory skills list | See which skills are in your local cache. |
synaptory outbox flush | Manually flush queued telemetry if the control plane was unreachable. Normally automatic on session start. |
synaptory projects current | Print the project slug resolved from .synaptory.yaml / SYNAPTORY_PROJECT_ID. |
Switching projects
You don't. The same session works across every project you're a member of. The CLI auto-detects which project you're in by walking up from your current directory looking for .synaptory.yaml:
# .synaptory.yaml
project_id: taskflow-pilot
Telemetry and skill fetches stamp that slug onto requests. The server checks your membership against project_members per request — if you've been removed from a project, the next call returns 403 and the CLI quarantines the event for the operator to review.
What happens behind the scenes
You won't normally run these operations. Claude Code uses native session hooks; Codex and Cursor obtain the same governance outcomes through their project bootstrap, supported hooks, and MCP integration:
- The host integration checks CLI/session readiness. If the cached session cannot be refreshed, it stops governed mutation and asks you to sign in.
- It refreshes the project's governed skill and policy cache.
- It loads host-native instructions/rules and reads canonical lifecycle state.
- It flushes durable telemetry when connectivity is available.
If any of those fail, you'll see a clear error message pointing at the fix.
Troubleshooting
| Symptom | Fix |
|---|---|
command not found: synaptory | The install dir isn't on $PATH. Rerun the install one-liner; it prints the line to add to your shell rc. |
synaptory: control plane URL not configured | The CLI binary you installed was built without SYNAPTORY_CP_URL stamped in. Ask your H3Tech operator for a rebuilt binary. |
synaptory: Entra OAuth is not configured | Same operator-side issue — the Entra tenant/client IDs weren't stamped at build time. |
login: you are not a member of any project yet | Your sign-in worked but the operator hasn't added your UPN to any project. Email ops@h3t.co with your UPN. |
403 user is not an active member of project '<slug>' mid-session | Either you've been removed from the project, or the slug in .synaptory.yaml is wrong. Run synaptory projects list to see what you can access. |
| Session expired mid-work | Run synaptory login again. No --project flag is needed; start a fresh host turn if the integration asks you to reload state. |
| macOS Gatekeeper blocks the binary | Run xattr -d com.apple.quarantine ~/.local/bin/synaptory. The binary is unsigned for the pilot; production builds will be notarized. |
For anything else, run synaptory status and include the output when you report the issue to ops.