Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add skyf0xx/Pebble --skill pebble-protocolgit clone --depth 1 https://github.com/skyf0xx/PebbleWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/skyf0xx/pebble/pebble-protocol)<a href="https://agentmods.dev/skills/skyf0xx/pebble/pebble-protocol"><img src="https://agentmods.dev/badge/skills/skyf0xx/pebble/pebble-protocol.svg" alt="Measured on agentmods" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.01356 |
| Opus 5 | $0.00000 | $0.00678 |
| Sonnet 5 | $0.00000 | $0.00271 |
| Haiku 4.5 | $0.00000 | $0.00136 |
Grade A, and why
pebble-protocol scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 154 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Pebble Communication Protocol
You are connected to a user via Pebble — a warm, minimal PWA chat interface.
All communication with the user MUST go through pebble_send. Never write
a plain text reply directly.
The one tool: pebble_send
Every outbound message is a pebble_send call. The type field controls
what Pebble renders.
type: "message" — plain text reply
Use for any conversational response, summary, or result that doesn't need interactive elements.
{
"type": "message",
"content": "Done. Here's what I found: ..."
}
Always set label on your first pebble_send of a session to name it
in the session list. Pebble shows a provisional title taken from the user's
first message until you do — a short (2–4 word) label that captures the task
("Fix deploy script", "Weekly report") replaces it and reads far better. Set it
on the first reply; don't wait.
{
"type": "message",
"content": "On it.",
"label": "Fix deploy script"
}
type: "ui" — interactive UI block
Use instead of asking the user to type a response. If you need a decision, confirmation, or input — render it. The user taps instead of types.
The spec is OpenUI Lang source (a string), not a JSON object. Each line is
name = Expression; you must define root = Stack([...]); arguments are
positional. A Button with no explicit action auto-sends its label back to you.
{
"type": "ui",
"spec": "root = Stack([prompt, actions])\nprompt = TextContent(\"Proceed with deploy?\", \"large-heavy\")\nactions = Buttons([yes, no])\nyes = Button(\"Yes, proceed\", null, \"primary\")\nno = Button(\"Cancel\", null, \"secondary\")"
}
When the user taps, the next turn arrives as a ui_action envelope:
{ "ui_action": "Yes, proceed", "payload": { "type": "continue_conversation", "params": {} }, "session_id": "<session_id>" }
ui_action is the tapped button's label (or a form's submit message); for a
Form, the submitted field values arrive under payload.values keyed by
field name. Act on it directly — do not re-ask.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 154 lines · 0 tokens per session scan A 770de73446ee
pebble-protocol is a skill published in the GitHub repository skyf0xx/Pebble (22 stars, last pushed 29d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,356 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
agile-web-product-agent
A Web product-planning helper that turns a tool request into a page list, key user flows, state rules, permission rules and a handover package. A state rule describes how something changes, such as from draft to published.
agile-web-builder-agent
A Web front-end planning helper that turns product handover materials into a project structure, suggested page files, components, screen states and a first coding task list.
agile-web-api-agent
A Web API design helper that turns page and data needs into a field dictionary, API rules, request and response formats, and a mock connection plan. An API is the agreed way that a front end exchanges data with a back end.
action-plan-assistant
A skill that turns a goal, meeting decision, or discussion into an action plan that can be used and shared.
daily-report-assistant
A skill that turns the day’s progress into a project status report that can be sent and followed up on.
meeting-minutes-assistant
A skill that turns a meeting into meeting minutes that can be sent and acted on.