Quickstart
Install skillhook, pair a machine and see its first webhook in the dashboard.
1. Install skillhook and run a skill
skillhook is the open-source server that turns a Mac or a Linux box into a webhook endpoint: a request comes in, a skill (a SKILL.md file) runs with Claude Code, Codex or a shell command, and the run is recorded as a job. Skillhook Cloud watches and operates those machines; it never runs skills itself. You need Node 22 or newer, Claude Code logged in (claude login) or Codex logged in (codex login) or an ANTHROPIC_API_KEY / OPENAI_API_KEY, and Tailscale signed in for the default public URL.
Then write a skill of your own with skillhook skills new <name>, or copy an example with skillhook skills add sentry-triage. A skill is a directory ~/.skillhook/skills/<name>/SKILL.md: Agent Skills frontmatter plus a skillhook: block that sets the runner, model, authentication, filters and working directory. Edits apply to the next delivery without a restart. The field reference, filters and placeholders are in skillhook's README.
2. Pair the machine
- Sign in to Skillhook Cloud. Every account starts with a personal organisation; a team gets a shared one from the organisation switcher.
- Open Pair a machine (admins and owners) and choose a mode. Control: the cloud may run skills, answer agents, replay deliveries and change settings on the machine. Observe: read-only; webhooks, jobs, health and stats flow to the cloud and nothing flows back.
- Run the printed command on the machine. The code works once, for ten minutes.
Leave out --control for observe mode; a code made for observe never yields control. Pairing needs skillhook 0.5 or newer; the terminal and agent features on this site need 0.7.0. The machine sends its skills, health and history at once and keeps one outbound connection to the cloud, which never connects to a machine. In control mode the machine still has the last word: cloud.allow_commands and cloud.deny_commands in its skillhook.json narrow what it accepts, and the cloud can never widen them. More in Machines and pairing.
--control runs what the cloud queues: skills with tools, configuration changes, skill files, restarts, updates. Anyone who can act as a member or admin of the organisation can therefore run code on that machine. Pair in observe mode where that is not acceptable.3. Send a webhook
Two ways in. Both end in the same place: a delivery record, a job, and whatever the agent reports.
Straight to the machine
Give the sender the skill's URL (skillhook url <skill> prints it) and its secret. For a quick check, skillhook send hello --wait 60 posts a correctly signed test webhook and prints the job's result. The machine reports every delivery to the cloud, including the ones it rejected, skipped or deduplicated, with the reason.
Through a hosted URL
For a machine that may be asleep or has no public URL: in Skills & URLs, turn on a hosted URL for the skill (admins) and paste it into the sender in place of the machine's URL. The cloud accepts the webhook, keeps it sealed for up to 72 hours, and hands it to the machine on its next sync, where the signature is checked with the skill's own secret; the cloud never holds webhook secrets. More in Hosted webhook URLs.
4. What appears
- Machines: status (online, degraded, offline), mode, the link's state, health checks with a fix for each failing one, whether
claudeandcodexare installed and signed in, skills and schedules. - Deliveries: every webhook a machine received, with its outcome and reason, whether it came to the machine's own URL or through a hosted URL, and the job it started.
- Jobs: status (how the process ended), outcome (whether the task was done), failure kind, cost and tokens, the progress timeline, live output while it runs, and the job's files. See Jobs and answers.
- Inbox: what your agents need from you, what they are doing and what they did. Agents that asked a question or finished needing a person come first, with their choices as buttons; answer there and the machine delivers the answer to the waiting run or resumes the agent's session with it. Running jobs show their progress; finished ones their result in one line, the summary and their links.
- Alerts and Stats: what needs attention now, and the last 7 to 90 days by day and by skill.
Every action from the dashboard becomes a command the machine runs on its next sync: seconds while it is online. An offline machine runs nothing; commands wait for it up to 10 minutes, then expire, and the dashboard shows each command's status rather than assuming it ran.
5. Next steps
- Invite the team under Team: by email, roles from viewer to owner, invitations valid seven days. See Teams and roles.
- Set an alert channel under Settings → Notifications: Slack, a signed webhook or email, for agents waiting on a person, machines going offline, failed jobs and failing health checks. See Alerts.
- Create an API key under Settings → API keys (admins): shown once, with the scope it acts as. See API keys and scopes.
- Connect an agent or the terminal with that key: everything the dashboard shows and does, as tools.
- Copy a playbook from Customers: our own self-heal loop on Sentry, and six worked setups (Granola, GitHub, Intercom, Stripe, leads, webhook replay), each with the prompt for your agent and the SKILL.md it runs.
skillhook 0.7.0 or newer. Login asks for the key without echoing it and keeps it in ~/.skillhook/.env; it is never printed again.
Every tool runs as skillhook cloud <tool> [args] [--param value]. See CLI.