JSON-as-truth: why every Yome skill is one signature file
Every Yome skill, official or community, declares its surface in a single signature.json file at the package root. That file is the truth. The agent loader, the macOS bridge, the sandbox replayer, and the CLI all parse the same shape — so a skill can never drift between "what the docs say" and "what the runtime accepts".
The shape
| 1 | { |
| 2 | "domain": "ppt", |
| 3 | "version": "0.1.3", |
| 4 | "commands": { |
| 5 | "new": { "args": { "title": "string" } }, |
| 6 | "slide.add": { "args": { "after": "number", "layout": "string" } }, |
| 7 | "text.set": { "args": { "slide": "number", "text": "string" } } |
| 8 | }, |
| 9 | "backends": ["macos", "node", "sandbox"] |
| 10 | } |
Why JSON, not TypeScript
Because the Swift macOS host, the Node CLI, and the Edge runtime all need to parse it without a compiler in the loop. JSON is the only format that survives a five-language round trip without us writing four separate adapters.
The compress router
Once the loader has the signature, every agent call funnels through a single compress router: domain.action(args) → resolveBackend → enqueue. The router does not know anything about the specific skill; it only knows the shape. New skills cost zero router code.
Because every call is just (domain, action, args), the sandbox replay path is identical to the live path — minus the side effects. Test cases recorded on a real macOS run replay byte-for-byte in the browser viewer.