Cursor
Cursor gets a skill and eight hook entries that both the editor and the Agent CLI load. The hooks keep one lineage file per conversation, so two chats on one project never relabel each other's searches.
Install
Setup finds Cursor when cursor or cursor-agent is on PATH, or when ~/.cursor exists, since the editor's cursor command is optional.
jevlin setup # sets up every agent it finds
jevlin setup -with cursor # found or not
jevlin agents install -client cursor # later, without the rest of setup
Restart Cursor if it was already open.
What is written
| path | what |
|---|---|
~/.cursor/skills/jevlin/ | The skill, rendered for your OS and shell. |
~/.cursor/hooks.json | Eight entries. preToolUse puts the conversation's identity in front of exactly the search the skill renders; the shell hook allows exactly that command; the rest track the session and flush at stop. |
Use it
Ask the agent anything that needs the web, or be explicit:
/jevlin what changed in Vite 7's rollup migration
/jevlin off, /jevlin on, /jevlin status and /jevlin tier <band> work as in every agent with the skill. See Search from your agent.
On Windows, commands run in the terminal that terminal.integrated.defaultProfile.windows names, which Jevlin cannot read, so the skill carries both forms: "If your terminal is PowerShell" and "If your terminal is Git Bash". Use the matching one. The PowerShell form run from Git Bash loses its encoding line, and a non-ASCII query goes out mangled.
What to know
One lineage file per conversation. A search carries the conversation's hashed session id, and preToolUse rewrites nothing but the search the skill renders.
The turn end. One of the hooks runs when you submit a prompt. It keeps nothing unless you turned turn_end on; then it holds what you asked, scrubbed, until the turn ends. With turn_end on, a turn that searched is reported with your prompt, its searches, the reply and the model. Cursor's hooks carry no text written between tool calls, and Jevlin installs no hook behind every tool, so its other tools are not listed. See The turn end.
Claude Code's hooks stand aside. Cursor also runs Claude Code's hooks from ~/.claude/settings.json, with its own payload. They recognize the caller and exit at once, so a Cursor turn ends with one flush, not two, and no Cursor command is rewritten as Claude Code's.
Known limits
- Windows, PowerShell terminal profile, non-ASCII queries. On Cursor 3.21.9 a non-ASCII query reached the router intact under both profiles. Once, on Cursor 3.20.21 under PowerShell, the router stored one double-encoded, answering a different question. Git Bash was never affected; use it, or ASCII queries, to rule this out.
- Windows, an apostrophe in a PowerShell-form search. Git Bash reads the PowerShell form's here-string as a single-quoted string, which an apostrophe closes. The hooks allow that form without asking only when its request holds no
'; one that holds it waits for your approval and reaches the router without Cursor's label. The skill says to write an apostrophe as', which the router receives as the same query. - Windows: the command-line agent started from Git Bash cannot run any hook, so no search. Cursor runs its PowerShell hook wrapper with bash
eval, which cannot parse it. Start the agent from PowerShell instead; the editor is unaffected. Reported to Cursor as forum thread 172789.
Remove
jevlin agents uninstall -client cursor
Removes the skill and Jevlin's hook entries. Everything else stays; see Removing and coming back.