OpenCode + psh.now
Open source agent, open source approval.
OpenCode reads skills from ~/.config/opencode/skills. Both halves of this pairing are MIT licensed, so the whole path from question to answer is code you can read.
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 ~/.config/opencode/skills/psh-now, so only OpenCode 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 OpenCode. 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
OpenCode 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
~/.cursor/skills/psh-now
shared skills dir
shared skills dir
~/.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.