Claude Code + psh.now
Hooks and skills, so every Bash command can wait for you.
Claude Code reads skills from ~/.claude/skills, and it is the one harness here that also exposes a PreToolUse hook - which turns psh.now from an ask into a gate that cannot be skipped.
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 ~/.claude/skills/psh-now, so only Claude Code 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 Claude Code. 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.
Make it a gate, not a request
A skill is an ask: the model can skip it. Claude Code also runs hooks, and a
hook is a gate: it cannot be skipped. Register it once in
.claude/settings.json and every Bash command waits for you.
{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "psh hook" }] }
]
}
}
psh hook reads the hook payload on stdin and answers
permissionDecision: "allow" | "deny". Read-only commands can be waved through with
PSH_SKIP_PATTERN, e.g. '^(ls|cat|git status|rg)\b'.
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
shared skills dir
~/.cursor/skills/psh-now
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.