cursor
Skill0 starsChanged 4 months agoMITView on GitHub
Set up or re-sync the current project to run in Cursor — including Cursor CLOUD agents, which load nothing but committed project config. Checks Cursor's LIVE docs first (mechanics drift — never build from remembered facts), runs Soloship's cursor target (always-on .mdc rules + native .cursor/hooks.json gates), closes the bespoke-rule drift gap the installer can't know about, mirrors MCP servers, and reports the manual settings steps plus every protection that still has no Cursor counterpart. Use when asked "/cursor", "set up cursor", "sync cursor", or "get this project working in Cursor".
- Reads credentials
- Deletes or force-pushes
6 other projects use a version of this.
Adopted by
Most recently taken up by
- oidsdev/honeypottheir own version, first seen Oct 15, 2026
- G1Joshi/Agent-Skillstheir own version, first seen Oct 13, 2026
- Dicklesworthstone/agent_flywheel_clawdbot_skills_and_integrationstheir own version, first seen Jun 19, 2026
- phuongduyphan/cc-tmux-agentstheir own version, first seen Jun 12, 2026
- darshitpp/x-agenttheir own version, first seen May 26, 2026
- compemperor/engramtheir own version, first seen Feb 6, 2026
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- Dicklesworthstone/agent_flywheel_clawdbot_skills_and_integrations★ 73same name
- G1Joshi/Agent-Skills★ 15same name
- phuongduyphan/cc-tmux-agents★ 8same name
- darshitpp/x-agent★ 2same name
- compemperor/engram★ 0same name
- oidsdev/honeypot★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository55 other files it gives its agents.
- AGENTS.mdAGENTS.md
- scripts/AGENTS.mdAGENTS.md
- src/AGENTS.mdAGENTS.md
- .cursor/rules/publish-version-bump.mdcCursor rule
- .cursor/rules/release-version-sync.mdcCursor rule
- antigravitySkill
- auditSkill
- autoplanSkill
- bootstrapSkill
- brainstormSkill
- browseSkill
- ceo-reviewSkill
- clarifySkill
- cleanupSkill
- code-reviewSkill
- codexSkill
- component-inventorySkill
- context-restoreSkill
- context-saveSkill
- critiqueSkill
- cronSkill
- csoSkill
- debugSkill
- deepen-planSkill
- design-reviewSkill
- devex-reviewSkill
- document-reviewSkill
- eng-reviewSkill
- executing-plansSkill
- fableSkill
- finishSkill
- frontend-designSkill
- grill-meSkill
- grokSkill
- implementSkill
- learnSkill
- office-hoursSkill
- onboardSkill
- plan-design-reviewSkill
- planSkill
- polishSkill
- qaSkill
- reviewSkill
- shipfastSkill
- shipthoroughSkill
- simplifySkill
- specSkill
- statusSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- ui-auditSkill
- ui-ux-pro-maxSkill
- using-git-worktreesSkill
- verification-before-completionSkill
- writing-plansSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 2 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 85
No manifest = first run: everything is new.
- Very specific: line 133
Cloud agents: run beforeShellExecution, preToolUse, postToolUse, beforeReadFile, afterFileEdit, stop, subagentStop, beforeSubmitPrompt, …
- Very specific: line 172
Run it, then npx soloship doctor and paste the Cursor section into the report.
- Distinctive: line 205
AGENTS.md: read natively — confirm it exists at root.
- Very specific: line 220
Every script reads stdin JSON, answers {"permission":...} (or {"followup_message":...} for stop), and fails open on an unparseable payload …
- Very specific: line 235
Legacy
.cursorrules: if present, fold anything unique into the generated set, then propose its deletion (ask, don't auto-delete). - Very specific: line 240
If .mcp.json exists: mirror every server into .cursor/mcp.json by default — don't stall the run on a multi-select.
- Very specific: line 247
If it is not, write the entry with a ${env:VAR} reference or a placeholder and put the real-value step in the manual-steps list.
- Very specific: line 256
Every generated .mdc has valid frontmatter (all three keys) and the GENERATED header.
- Very specific: line 264
Write the updated manifest to .ai/sync-state/cursor.json.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/cursor — Project Environment Sync for Cursor
Make this project's governance fully available to Cursor, from whatever state it's in now. Idempotent: first run sets everything up; later runs sync only what changed and report what's new.
The failure this skill exists to prevent: a Cursor cloud agent running
on this repo with zero guardrails. Cloud agents load committed
.cursor/hooks.json (plus team/enterprise hooks) and nothing else — not
~/.cursor/hooks.json, not Claude Code hooks, not any IDE toggle. Soloship
writes its Claude gates to .claude/settings.local.json, which is gitignored
in most projects. So until this skill has run and its output is committed,
a Cursor cloud agent is not on rails at all.
Gates (binding in every posture — violating any is a failed run)
- Docs before build. The live docs check (Phase 3) runs BEFORE any
generation. Target mechanics drift between runs — verified twice: Cursor
added native
.claude/skills/loading, then shipped a full native hooks system, both after earlier drafts of this skill were written. Building from remembered facts and checking docs afterward is the failure class this ordering prevents. Record the docs-check date you actually ran in the report — never copy a date forward from this file. - Sources are read-only.
AGENTS.mdis the primary source (project instructions plus the seven safety-gate rules, in its## Safety gatessection — since 2026-08-27 those no longer live as separate files in.claude/rules/).CLAUDE.mdis derived from it (@AGENTS.mdimport plus a short Claude-only appendix) — read the appendix for anything genuinely Claude-specific, but AGENTS.md is what actually needs mirroring..claude/rules/(any project-specific rules a human added by hand, not Soloship's generated ones),.claude/skills/,.claude/settings.json,.mcp.jsonare also inputs. Never edit, trim, or restructure any of them to fit the target. - Real copies, never symlinks — for rule directories only. A
symlinked rules dir routes other tools' installers into
.claude/rules/(verified failure, 2026-08-15). Per-skill symlinks are fine — Claude Code documents symlinked skill directories as supported and dedupes them; a.claude/skills/<name>symlink pointing at a canonical.agents/skills/copy is the intended cross-host layout (Phase 4 of the multi-host plan), not a violation of this gate. - Generated files carry a header so nobody edits the copy:
<!-- GENERATED from <source> by /soloship:cursor. Edit the source, then re-run. -->(.cursor/hooks.jsonis the one exception — JSON has no comment syntax. Its provenance lives in the scripts it points at and in the report.) - Generated config must be COMMITTED. Uncommitted
.cursor/config is invisible to cloud agents. A run that generates but does not commit has not delivered the protection — say so explicitly if the project's git state blocks the commit. - Syncing config does not certify the tool. Rules present ≠ rules
followed (proven repeatedly, 2026-08-15). The final report must say so and
point to the workspace's certification battery if one exists (default
location:
docs/testing/model-certification/SOP.md).
Phase 1 — Discover the source surface
Inventory, with paths: CLAUDE.md, AGENTS.md, every .claude/rules/*.md,
.claude/skills/ (names + descriptions only), .claude/settings.json and
.claude/settings.local.json hooks, .mcp.json, plus any existing .cursor/
config and legacy .cursorrules. Record Soloship presence
(.soloship/version) and run npx soloship doctor, keeping the Cursor
section lines — the required items are .cursor/hooks.json and
.cursor/rules.
Phase 2 — What's new since last run
State lives at .ai/sync-state/cursor.json:
{ "syncedAt": ISO-8601, "files": { "<source path>": "<sha256>" } }.
- Hash every discovered source (
shasum -a 256). Compare against the manifest: new, changed, removed, unchanged. - No manifest = first run: everything is new. Say so.
- Removed sources: delete their generated
.cursor/rules/counterparts — but verify the generated file's header actually names the removed source before deleting anything.
Phase 3 — Live docs check (BEFORE generating anything)
Fetch Cursor's current docs — https://cursor.com/docs/hooks,
https://cursor.com/docs/reference/third-party-hooks,
https://cursor.com/docs/context/rules, https://cursor.com/docs/context/skills,
https://cursor.com/docs/context/mcp — and scan https://cursor.com/changelog
for anything newer. If a URL 404s or redirects, search for the current
location; docs move. (https://cursor.com/docs/hooks.md serves the raw
markdown, which is faster to diff than the rendered page.)
Baseline as last verified 2026-08-18 — confirm each item, don't assume:
- Rules:
.cursor/rules/*.mdcwith YAML frontmatter (description,globs,alwaysApply). A plain.mdfile in that directory is silently ignored — it has no frontmatter, so the rules system skips it. Docs now also advise keeping an individual rule under ~500 lines. AGENTS.mdat root (and nested) is read natively.CLAUDE.mdis NOT read natively.- Skills: Cursor natively loads
.cursor/skills/,.agents/skills/, their~equivalents, and — for compatibility —.claude/skills/,.codex/skills/,~/.claude/skills/,~/.codex/skills/. Do not duplicate skills into.cursor/skills/unless this phase finds the compatibility path gone. - Hooks — Cursor has a native system. This is the item that was wrong in
every earlier version of this skill:
- Config file:
.cursor/hooks.json(project),~/.cursor/hooks.json(user), plus team/enterprise. Schema:{ "version": 1, "hooks": { "<event>": [ { "command", "type", "timeout", "matcher", "failClosed", "loop_limit" } ] } }. timeoutis in SECONDS, not milliseconds. Copying Claude's millisecond values across is the classic porting bug.- Payload arrives as JSON on stdin.
$HOOK_TOOL_INPUTis a Claude Code -ism and does not exist here.beforeShellExecutiongetscommand/cwd;preToolUsegetstool_name/tool_input;beforeReadFileandafterFileEditgetfile_path. - Blocking is
{"permission":"deny", "user_message", "agent_message"}on stdout, or exit code 2. Other non-zero exits fail OPEN unlessfailClosed: true. Thestophook instead returns{"followup_message": "..."}, which Cursor auto-submits as the next user message (loop_limit, default 5). - Project-hook script paths resolve from the project root —
.cursor/hooks/x.js, not./hooks/x.js(that form is for user hooks). - Env:
CURSOR_PROJECT_DIRandCLAUDE_PROJECT_DIRare both set. - Cloud agents: run
beforeShellExecution,preToolUse,postToolUse,beforeReadFile,afterFileEdit,stop,subagentStop,beforeSubmitPrompt,preCompact— and notsessionStart,sessionEnd, MCP hooks, Tab hooks, orworkspaceOpen. They load project- team + enterprise hooks only, never
~/.cursor/hooks.json, and run command-based hooks only (prompt hooks need auth the cloud VM lacks).
- team + enterprise hooks only, never
- Config file:
- Third-party (Claude Code) hooks: Cursor can read
.claude/settings.json,.claude/settings.local.json, and~/.claude/settings.json— in the IDE only, and only when Settings → Rules, Skills, Subagents → "Include third-party Plugins, Skills, and other configs" is on. Event mapping:PreToolUse→preToolUse,PostToolUse→postToolUse,Stop→stop,SessionStart→sessionStart,SessionEnd→sessionEnd,UserPromptSubmit→beforeSubmitPrompt,SubagentStop→subagentStop,PreCompact→preCompact. Tool mapping:Bash→Shell,Edit→Write,Write→Write,Read→Read,Grep→Grep,Task→Task;Glob,WebFetch,WebSearchare unsupported. This is a second path, never a substitute — it does nothing for cloud agents. - MCP:
.cursor/mcp.json, top-levelmcpServers, per-servercommand/args/env/type/url/headers, with${env:VAR}expansion.
This phase outputs the verified mapping (native vs needs-conversion, and in what format) that Phase 4 executes, plus a numbered manual-steps list written for a non-coder for anything that is a Cursor-app setting — exact menu path, exact value, one line on why.
Phase 4 — Sync (per Phase 3's verified mapping)
Installer first. Soloship HAS a cursor target as of the first release after 0.26.0:
npx soloship init --agent cursor/npx soloship upgrade --agent cursor(also covered by--agent all, and byautowhen.cursor/exists or thecursorCLI is on PATH — the same detection shape the antigravity target uses). It writes:.cursor/rules/*.mdc— the packaged always-on safety rules (alwaysApply: true,globs: ""), each with a GENERATED header..cursor/hooks.json+ executable.cursor/hooks/soloship-*.js— the mechanical gates (below). The installer merges into an existing hooks.json, keeping any entry whose command isn't asoloship-script, so a user's own hooks survive a re-run.
Run it, then
npx soloship doctorand paste the Cursor section into the report. If Phase 3 found the installer's output no longer matches what Cursor reads, stop and surface that as a Soloship bug rather than patching around it by hand.Project without Soloship installed: generate the same shapes by hand, following Phase 3's verified schema exactly.
- Close the drift gap the installer can't know about. The installer ships
the packaged rule set; this project may carry bespoke rules. Diff
.claude/rules/*.mdagainst.cursor/rules/*.mdcby stem. For each rule present in.claude/rules/but missing or stale in.cursor/rules/, generate<name>.mdc: body copied verbatim under the GENERATED header, frontmatteralwaysApply: true,globs: "",description:the rule's H1 title. Soloship projects inject the safety-floor rules unconditionally — partial delivery of a gate is worse than its token cost. Planning and convention guidance lives in skills and AGENTS.md, not as extra always-on files. List every file you moved; each is a candidate to fold intosrc/rules.ts(suggest it; that change belongs in the Soloship repo). CLAUDE.md →
.cursor/rules/000-project-map.mdc(alwaysApply: true), containing CLAUDE.md verbatim under the GENERATED header. If Phase 3 ever finds Cursor reads CLAUDE.md natively, skip generation and delete the previously generated copy.First check whether CLAUDE.md is gitignored (
git check-ignore -q CLAUDE.md). If it is, do NOT generate the project map: Gate 5 requires generated config to be committed, so generating it would publish a file the project deliberately keeps out of git. Report the conflict and ask — the user may want a redacted map, or may accept that Cursor goes without one. (Hit for real in Soloship's own repo, 2026-08-18.)- AGENTS.md: read natively — confirm it exists at root; if the project has none, report that gap, don't invent one.
- Skills: native via the compatibility paths (per Phase 3) — nothing to generate; list them in the report as native.
Hooks — verify what the installer produced, and what it does NOT cover. The generated gates are:
Cursor event Script Guards beforeShellExecutionsoloship-command-safety.jsrm -rftargeting home/root (including subpaths), direct.envwrites, force-push to main/master (flag in any position), hardcoded API keys, production deploys off the default branchpreToolUse(matcherWrite|Delete)soloship-file-protection.js.soloship/version, direct.envwrites via the file tool,docs/plans/frontmatter + status vocabulary, the plan done-checkliststopsoloship-plan-truth.jsa plan still claiming open status after its branch merged Every script reads stdin JSON, answers
{"permission":...}(or{"followup_message":...}forstop), and fails open on an unparseable payload — a gate that bricks the agent gets deleted, and then it guards nothing.preToolUsetool_inputkey names for Cursor's Write tool are undocumented, so the script reads every plausible key.Everything Soloship gates in Claude Code but does NOT gate here goes in the report as protection absent in Cursor — never silently dropped. As of the always-on diet, that list is: the billing/credit confirmation gate, the recurrence gate, deploy-freshness, the worktree/dirty-tree/deploy-lock half of deploy discipline, the plan-truth commit and plan-merge gates, and everything on
SessionStart/SessionEnd(session registration, checkpoint commit, browser-claim and deploy-lock release) — the last group is structurally unavailable to cloud agents, which never fire those events.- Legacy
.cursorrules: if present, fold anything unique into the generated set, then propose its deletion (ask, don't auto-delete).
Phase 5 — MCP servers
If .mcp.json exists: mirror every server into .cursor/mcp.json by
default — don't stall the run on a multi-select. Report what was mirrored;
the user can prune afterward. Only ask when a specific entry needs a judgment
call the report can't make (a paid/rate-limited service, or a server the
project marks as local-only).
Secrets: check whether .cursor/mcp.json is gitignored before writing.
If it is not, write the entry with a ${env:VAR} reference or a placeholder
and put the real-value step in the manual-steps list. Never commit a live key.
Note in the report that Cursor's docs do not confirm cloud agents read
project-level .cursor/mcp.json (team MCP servers are the documented cloud
path) — so treat MCP availability in cloud runs as unverified, not promised.
Phase 6 — Verify, record, commit
- Every generated
.mdchas valid frontmatter (all three keys) and the GENERATED header. Count generated files vs. sources — numbers must match the delta. .cursor/hooks.jsonparses, everycommandpath exists, and every script is executable (ls -l .cursor/hooks/). Smoke-test at least the shell gate:printf '%s' '{"command":"rm -rf ~"}' | .cursor/hooks/soloship-command-safety.jsmust print"permission":"deny". A script that crashes fails OPEN — Cursor will report nothing and the gate will protect nothing.- Write the updated manifest to
.ai/sync-state/cursor.json. - Commit the generated
.cursor/files per the project's git conventions (worktree rules apply). This is Gate 5, not a formality — uncommitted config does not exist as far as a cloud agent is concerned..ai/state stays uncommitted if the project gitignores it.
Phase 7 — Report (always, in this order)
- Docs-check date + anything that changed in Cursor's mechanics since the last run. Use the date you actually fetched the docs.
- Delta: what was new / changed / removed since the last run (or "first run — full setup").
- Synced: what Cursor now gets, split native (AGENTS.md, skills via
the compatibility paths) vs generated (rules
.mdc, project-map,.cursor/hooks.json+ scripts) — with the doctor Cursor lines as evidence. - Cloud-agent status — state this plainly. Which gates now run for a
Cursor cloud agent, and the fact that they run only because
.cursor/hooks.jsonand its scripts are committed. If they are not committed yet, the honest answer is "cloud agents are still unprotected." Name thesessionStart/sessionEndprotections that can never run there. - Protections absent in Cursor: the Phase 4.6 list — every gate with no counterpart, named, with what it guarded. This is the honest cost of using Cursor here.
- Manual steps: the numbered non-coder list from Phase 3, always
including the third-party toggle:
- Open Cursor → Settings (
Cmd+Shift+Jon Mac) → Rules, Skills, Subagents. - Turn ON "Include third-party Plugins, Skills, and other configs."
Why: this makes Cursor also read the Claude Code hooks in
.claude/settings.local.jsonwhile you're working in the Cursor app — a second layer on top of.cursor/hooks.json. It does nothing for cloud agents, so it is an addition, never a replacement. - Restart Cursor so the new rules and hooks load.
- Open Cursor → Settings (
- MCP: which servers mirrored, which skipped, any secret placeholders, plus the cloud-agent caveat.
- Certification reminder: config synced ≠ tool trusted. If the workspace has a certification battery, say: run its SOP before granting Cursor write access; until then it's proposal-only.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

