pi-creel

request_secret for the pi coding agent: capture an API key into a local .env via a tmux popup (the creel tool) so it never enters the chat/context.

Packages

Package details

extension

Install pi-creel from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-creel
Package
pi-creel
Version
0.2.0
Published
Sep 12, 2026
Downloads
156/mo · 24/wk
Author
schuettc
License
MIT
Types
extension
Size
26.8 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./src/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-creel

request_secret for the pi coding agent — capture an API key into a local .env without it ever entering the chat/context.

When the model needs a secret, it calls request_secret instead of asking the user to paste one into the transcript. The tool opens a masked tmux display-popup running the creel binary; the user pastes once, and the value goes straight from the popup into the target .env. The pi process — and therefore the model — receives only a status token (added / updated / cancelled / error), never the value.

Tool

request_secret(name, dest?)

  • name — the environment-variable name, e.g. OPENAI_API_KEY.
  • dest — path to the .env (relative to cwd), default .env.

Requirements

  • A tmux session ($TMUX). Without one the tool fails fast and asks the user to paste manually.
  • The creel binary on PATH (installed via the tackle family download / kempt). Without it the tool returns an actionable error.

How the value stays out of context

creel does the masked read, the .env upsert (atomic, chmod 600), and the gitignore check inside the popup. It writes only a one-word status token to a temp file that this extension polls. The seam between the two — creel <NAME> --dest <PATH> --status-file <FILE> — carries a name, a destination, and a token, and nothing else. The same seam lets other harnesses (Claude Code / Cursor, via a future creel mcp) reuse the identical capture core.

Design

Pure pieces (schema, popup command, token→reply mapping) live in capture.ts; index.ts is thin, injectable pi/tmux/fs wiring — the same split as pi-wakeup.