A capability-scoped recipe store on Cloudflare Workers + D1. It stores and hands back scripts; it never runs them.
Single tool 'pantry' has a detailed description (>1000 chars) but violates naming conventions (generic verb 'pantry' instead of action-specific like 'run_recipe' or 'manage_recipe'). Input schema is present with proper types and enums, but parameter descriptions are minimal or missing for several fields ('input', 'recipe', 'guard'). Output schema is not documented. The tool combines four distinct actions (list/get/run/push) into one, violating single-responsibility principle. Security warnings are extensive but buried in description rather than surfaced as tool annotations or separate tools.
Reuse pantry recipes: list/get/run/push. Backed by PantryClient; pantry stores and hands back scripts, it never runs them. RUNNING A FETCHED RECIPE IS NOT SANDBOXED. `pantry run` executes recipe code over an explicit, restricted `ctx` using the demo runner's bounded posture (shadowed ambient names + a best-effort parse-time tripwire). That is a CONVENIENCE for code you already trust, NOT containment: `import()`, the Function-constructor climb, and string-built names all escape it. Deciding to run a recipe is the CALLER'S decision and the caller's risk. Untrusted recipes need a real isolate (a Worker Loader, a separate Worker, a child process, or a vetted JS sandbox) — this tool does not provide one. Config: PANTRY_URL default https://pantry.coey.dev, PANTRY_TOKEN env or ~/.terrarium/pantry-token.secret, PANTRY_RESOLVE host:ip for stale DNS.
Tool name 'pantry' is not action-specific. Should be verb_noun like 'run_recipe', 'list_recipes', 'push_recipe' to help LLMs infer intent from the name alone.
Single tool combines four distinct actions (list/get/run/push). Should be split into separate tools (list_recipes, get_recipe, run_recipe, push_recipe) so each has one clear responsibility and agents can compose them independently.
Output schema is not documented. LLMs cannot plan downstream calls or extract required fields without knowing what the tool returns. Document return type for each action variant.
Parameter 'input' lacks description (should explain what object structure is expected). Parameter 'recipe' lacks description. Parameter 'guard' description is vague ('apply best-effort tripwire, default true. Not a sandbox.').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Security warnings about sandbox escape vectors (import(), Function-constructor, string-built names) are critical but buried in the tool description. Should be surfaced via destructiveHint annotation and separate confirmation/dry-run pattern for 'run' action.