Cursor + psh.now
Ask before the agent touches the repo.
Cursor reads skills from ~/.cursor/skills. The agent already has a terminal, which is all psh.now needs: one call, one blocking wait, one boolean back.
Install it
Two commands, either one. The first is the packaged skill; the second needs no npm and no git.
npx skills add passy-ai/psh-now-skill -g -y
curl -fsSL https://psh.now/install.sh | sh
It lands in ~/.cursor/skills/psh-now, so only Cursor picks it up from there. The shared directory is written too, which is why the same install works everywhere else.
Connect a channel
Open the dashboard, copy the prompt from a channel card, and give it to Cursor. The link carries the channel, so nothing new is minted and the key it gets is ask-only - it can request approvals, never approve.
I'd like you to use psh.now and join this channel: https://psh.now/c/<channel>
What it asks with
Once installed, the agent's side of the contract is one command:
psh ask "Deploy the new build?" "This pushes to production."
It blocks until you answer, then exits 0 on approval and non-zero otherwise. A timeout
or an error means do not act - silence is never consent.
Ask or gate
Cursor runs the skill, and a skill is an ask: the model can skip it. If your
setup exposes hooks, wire psh hook and the same call becomes a gate instead. Claude
Code is the reference: see its hook.
Check it works
psh status
Expect the host, auth ✓, the plan and the request count. psh doctor goes
further: the skill path, the keys, the workspace and any stale record.
Other agents
~/.claude/skills/psh-now
shared skills dir
shared skills dir
shared skills dir
~/.config/opencode/skills/psh-now
~/.trae/skills/psh-now
~/.hermes/skills/psh-now
shared skills dir
shared skills dir
Anything else that can run a shell command can ask too - the skill installer supports 79 agents, and the CLI is the same everywhere.