aayudha in Cursor
Cursor reads aayudha's skills, AGENTS.md, and MCP server, and runs its hooks.
Install
aayu install --host cursor --apply
| File | What it holds |
|---|---|
.agents/skills/<verb>/ |
One skill per verb |
AGENTS.md |
The aayudha sections, which Cursor reads as project rules |
.cursor/mcp.json |
The aayudha MCP server |
.cursor/hooks.json |
sessionStart, beforeShellExecution, beforeMCPExecution, afterShellExecution, and afterMCPExecution |
.cursor/commands/aayudha-<name>.md |
/aayudha-home, /aayudha-next, and the hand-offs /aayudha-claude, /aayudha-codex, /aayudha-amp |
.cursor/cli.json |
Shell(aayu) and Mcp(aayudha:*) in permissions.allow, so the Cursor CLI may run aayu and the aayudha tools |
Every entry calls aayu by its full, version-checked path, so each teammate runs install once on their machine.
Approve the MCP server once
The Cursor CLI loads a project's MCP server only after you approve it. Run this once in the repository:
cursor-agent mcp enable aayudha
cursor-agent mcp list # aayudha: ready
The Cursor IDE asks on its own. Cursor ties the approval to the exact .cursor/mcp.json entry, so approve it again
after an install that changes it.
Run Cursor headless
Cursor's print mode (cursor-agent -p) runs a shell command or an MCP tool without asking only when the CLI's
permissions allow it. install adds Shell(aayu) and Mcp(aayudha:*) to .cursor/cli.json and leaves your other
entries alone. The hooks still refuse a human-only verb, and the MCP server never offers one. Without these entries,
print mode rejects the calls ("User rejected MCP: aayudha-grill") unless you pass --force.
The GitHub token in the MCP server
Cursor starts the aayudha MCP server with only HOME, LOGNAME, PATH, SHELL, TERM, USER, and PWD from your
environment. A token that reaches aayu through AAYU_GITHUB_TOKEN, GH_TOKEN, GH_CONFIG_DIR, or XDG_CONFIG_HOME
works in Cursor's terminal but not in the MCP server, which then says "no GitHub token". Keep the token where the server
finds it without them: gh auth login with gh's default config folder, or aayu auth set-secret github-token.
aayu doctor's mcp row checks this when Cursor is installed. Writing ${env:GH_TOKEN} into .cursor/mcp.json does
not help: Cursor passes an unset variable on as the literal text, and a changed value voids the approval above.
Cursor also reads .claude/skills/ when "Include Third-Party Plugins, Skills, and Other Configs" is on (Settings →
Agents; on by default). So when you install for Claude Code as well, Cursor uses Claude Code's copies in
.claude/skills/ and install writes no second set to .agents/skills/. Only Claude Code and Codex together need
copies in both folders; then Cursor lists each skill twice, and aayu doctor warns: turn the import off on that
machine, or install for one of the two. If you turn the import off with Claude Code and Cursor installed and Codex not,
Cursor sees no aayudha skills; run aayu install --host codex --apply to add .agents/skills/.
With Third-Party Imports on, Cursor also runs Claude Code's hooks from .claude/settings.json and from the Claude Code
plugin. Each aayudha hook answers once per event: a Claude Code hook that Cursor runs stands aside when Cursor has its
own aayudha hooks here (from install or the local plugin), and otherwise answers in Cursor's format. Cursor reads only
top-level files in .claude/commands/ and .cursor/commands/, so it does not list the Claude Code commands in
.claude/commands/aayudha/; it gets its own as .cursor/commands/aayudha-<name>.md.
Use the aayudha Cursor plugin or install in a repository, not both. Cursor has no setting a repository can commit to
turn a plugin off, so with both, Cursor lists each skill and the MCP server twice; disable the plugin for that
workspace in Cursor. aayu sees the plugin only in Cursor's local plugin folder (~/.cursor/plugins/local/aayudha). It
cannot see a plugin you installed from a marketplace, which Cursor keeps with your account, so aayu doctor cannot
report that double. Check it with:
aayu doctor
Human-only steps
Shipping, releasing, accepting a Decision, and responding to an incident are for a person. The MCP server never offers
them, and the beforeShellExecution hook denies a shell command that runs one, with the exact command for you to run
in your own terminal.
Models
Cursor does not run OpenAI models, so a lane set to GPT falls back to Grok 4.7, and aayu logs the swap.
aayu models show --host cursor lists every lane.