Skip to content

Skills & packages

Two chapters back you built the guardrails stash needed on top of what Pi ships by default - a damage-control extension standing between the agent and stash’s database and .env, a task gate, a PLAN.md habit, and an extended footer layered on top of Pi’s default one. All of it TypeScript, all of it code you wrote and can read. That was the right tool for those jobs: rules that must hold on every single tool call want to be enforced in code, not hoped for in a prompt.

But not every recurring stash chore is that kind of job. New content sources keep showing up - a teammate wants to save from a podcast-transcript site, another from an internal wiki that needs an auth cookie - and onboarding each one is the same handful of steps every time: sniff the source’s markup shape, write an extractor that survives its particular nav-and-ads mess, wire it into the fetch worker, run it against a sample URL, confirm the full-text index picks it up cleanly. That’s not a tool call that needs blocking or a hook that needs to fire on every edit. It’s a procedure - read this, then do this, then check this - and the honest home for a procedure is markdown, not a registerTool call.

This module is about noticing that distinction and building for it:

  • Skills - write the content-source-onboarding procedure once as a SKILL.md, in the same Agent Skills format other tools read, and watch Pi pull it in only when the situation calls for it.
  • Templates & themes - the two lighter no-code layers: a prompt template for the one-liner you type often, and a theme for the TUI you’re staring at for eight hours a day.
  • Packages - bundle the skill, the extensions from the last two modules, and a couple of prompt templates into one package, and hand your teammate the whole stash harness in one install command instead of a README they’ll skim once and forget.

By the end, onboarding a new source into stash is something Pi does on its own, and the harness that makes it possible is something you can git push to a teammate instead of re-explaining over Slack.

Start with skills.