← All Skills

snappy-hands

v1.0.0
8 files, 52.2 KB ~1,116 words · 5 min read Updated 2026-09-09

snappy-hands skill

43 of 47 checks pass
What it can do
censusread
What does not pass yet
$ npx snappy-skills install snappy-hands
zip ↓
Documents
AGENTS.md

snappy-hands -- Agent Loader#

  1. node ~/.claude/skills/snappy-hands/api.ts census — the ready skills on this Mac. Trust it over any list in prose.

It reads the daemon's GET /hands (the one census, X13 2026-09-06); if it says the census is unavailable, the

daemon is down — report that, and never guess a list from the folder yourself.

  1. For a ready skill: read ~/.claude/skills/<name>/AGENTS.md, then node ~/.claude/skills/<name>/api.ts <verb> ….
  2. Never send/post/pay/delete from a skill to anyone but the owner; stage it through Snappy and report the control id. THE OWNER HIMSELF IS NOT "anyone": a message to his own channel that he asked for (snappy-telegram send "…" reaches his own chat directly; iMessage to his own number once the Mini's Automation grant exists) sends, and you report what was sent and where.
  3. needs-credential:<KEY> → name the key once in your report and stop; retired-road → do not use, say so.

What a hand does on its own (2026-09-06)#

  • A READ reports its rows to Snappy by itself (snappy-settings/hand-read.ts): the room

draws them as the channel — Slack as Slack, Gmail as Gmail, FreshBooks as FreshBooks.

You write the caption; never re-describe the rows.

  • A SEND stages by itself (snappy-settings/stage.ts): api.ts send … answers

staged for approval: control <id>. That is success — the person decides once and the

decision posts it on this Mac. Never pass --now; never call the channel API around it.

  • A hand with no press binary (LinkedIn via Typefully, FreshBooks) stages ITS OWN VERB

(snappy-settings/stage.ts stageHandOperation): the decision runs api.ts <verb> … --now on

this Mac. Same rule: staged for approval is the success; --now is the person's word.

<!-- SKILL-INDEX-START -->

[snappy-hands Index]|root: ~/.claude/skills/snappy-hands|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md}

<!-- SKILL-INDEX-END -->

Used by#

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->

Contract verbs#

Generated from api.ts HAND_CONTRACT. Do not hand-edit this block.

Verb Contract arguments Effect First call
census read npx tsx ~/.claude/skills/snappy-hands/api.ts census

Show the result#

When an answer carries face_hint, show it with one snappy_present(<answer>) call.

See /snappy-faces for face selection. Human-facing images must crop to the

element, render at 2x on Retina, and fill the destination channel instead of

placing a small card in a full-page screenshot.

<!-- SNAPPY-CONTRACT-VERBS-END -->

---
name: snappy-hands
role: The map of an agent's hands on this Mac -- run `node ~/.claude/skills/snappy-hands/api.ts census` first, then use the ready skills' api.ts with plain node; stage every send to anyone but the owner through Snappy.
loaded-by: a room's AGENTS.md ("Read ~/.claude/skills/snappy-hands/AGENTS.md first")
---

# snappy-hands -- Agent Loader

1. `node ~/.claude/skills/snappy-hands/api.ts census` — the ready skills on this Mac. Trust it over any list in prose.
   It reads the daemon's `GET /hands` (the one census, X13 2026-09-06); if it says the census is unavailable, the
   daemon is down — report that, and never guess a list from the folder yourself.
2. For a ready skill: read `~/.claude/skills/<name>/AGENTS.md`, then `node ~/.claude/skills/<name>/api.ts <verb> …`.
3. Never send/post/pay/delete from a skill to anyone but the owner; stage it through Snappy and report the control id. THE OWNER HIMSELF IS NOT "anyone": a message to his own channel that he asked for (`snappy-telegram send "…"` reaches his own chat directly; iMessage to his own number once the Mini's Automation grant exists) sends, and you report what was sent and where.
4. `needs-credential:<KEY>` → name the key once in your report and stop; `retired-road` → do not use, say so.

## What a hand does on its own (2026-09-06)

- A READ reports its rows to Snappy by itself (`snappy-settings/hand-read.ts`): the room
  draws them as the channel — Slack as Slack, Gmail as Gmail, FreshBooks as FreshBooks.
  You write the caption; never re-describe the rows.
- A SEND stages by itself (`snappy-settings/stage.ts`): `api.ts send …` answers
  `staged for approval: control <id>`. That is success — the person decides once and the
  decision posts it on this Mac. Never pass `--now`; never call the channel API around it.
- A hand with no press binary (LinkedIn via Typefully, FreshBooks) stages ITS OWN VERB
  (`snappy-settings/stage.ts stageHandOperation`): the decision runs `api.ts <verb> … --now` on
  this Mac. Same rule: `staged for approval` is the success; `--now` is the person's word.

<!-- SKILL-INDEX-START -->
[snappy-hands Index]|root: ~/.claude/skills/snappy-hands|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md}
<!-- SKILL-INDEX-END -->

## Used by

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->
## Contract verbs

Generated from `api.ts` `HAND_CONTRACT`. Do not hand-edit this block.

| Verb | Contract arguments | Effect | First call |
|---|---|---|---|
| `census` | — | `read` | `npx tsx ~/.claude/skills/snappy-hands/api.ts census` |

## Show the result

When an answer carries `face_hint`, show it with one `snappy_present(<answer>)` call.
See `/snappy-faces` for face selection. Human-facing images must crop to the
element, render at 2x on Retina, and fill the destination channel instead of
placing a small card in a full-page screenshot.
<!-- SNAPPY-CONTRACT-VERBS-END -->

Keyboard Shortcuts

Search in document⌘K
Focus search/
Previous file tab
Next file tab
Close overlayEsc
Show shortcuts?