@sfroment/pi-koyeb
Pi extension wrapping the Koyeb koyeb CLI as a single typed tool (direct CLI, not MCP).
Package details
Install @sfroment/pi-koyeb from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@sfroment/pi-koyeb- Package
@sfroment/pi-koyeb- Version
1.0.3- Published
- Sep 3, 2026
- Downloads
- 164/mo · 7/wk
- Author
- sfroment
- License
- GPL-3.0
- Types
- extension
- Size
- 72.5 KB
- Dependencies
- 0 dependencies · 3 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-koyeb
A pi coding agent extension that wraps the koyeb CLI as a single typed tool — directly, not via an MCP server.
What it provides
- a
koyebcustom tool with typed parameters (subcommand+argsmap +output+organization+timeoutSeconds+forceDangerous) - a bundled
SKILL.mddocumenting the tool and commonkoyebcommands - per-turn prompt guidance when a prompt mentions Koyeb, apps, services, deployments, instances, secrets, domains, or databases
- graceful detection of the "not authenticated" failure with actionable guidance
- a safety guard that refuses all delete/cancel/kill ops unless
forceDangerous: trueis set
Why not MCP?
The koyeb CLI already exposes the full Koyeb API (apps, services, deployments, instances, secrets, domains, databases, volumes, one-shot deploy) and uses the user's existing koyeb login credentials. Wrapping it in a typed pi tool gives structured, discoverable parameters and output truncation without an extra server process.
Requirements
koyebCLI on PATH — koyeb.com/docs/cli- Authenticated via
koyeb login
Installation
Drop the extension into ~/.pi/agent/extensions/ (global) or .pi/extensions/ (project-local), then reload:
/reload
Or install from git:
pi install git:github.com/sfroment/pi-koyeb
Tool parameters
| Parameter | Type | Description |
|---|---|---|
subcommand |
string |
The full koyeb subcommand path (e.g. "apps list", "services logs <id>", "deploy ./dir app/svc"). Top-level — never nest inside args. |
args |
object |
A key/value object of flags ONLY — never an array, and do not nest subcommand/output/organization here. Booleans → bare --flag ({debug: true} → --debug). Strings/numbers → --flag value. Arrays → repeated --flag value pairs. false/null/undefined are skipped. |
output |
string |
Output format: yaml, json, or table (translates to -o <format>). Use json for parseable structured output. |
organization |
string |
Organization ID override (translates to --organization <id>). |
timeoutSeconds |
integer |
Command timeout (default 30, max 120). |
forceDangerous |
boolean |
Opt-in for destructive ops (apps delete, services delete, deployments cancel, secrets delete, domains delete, databases delete, volumes delete, snapshots delete, sandbox kill, compose delete). Requires explicit user confirmation. |
Examples
List apps as JSON:
{
"subcommand": "apps list",
"output": "json"
}
Deploy a directory:
{
"subcommand": "deploy ./myapp my-app/web",
"args": { "git": "main", "ports": "8080:http" }
}
Get service logs:
{
"subcommand": "services logs <service-id>",
"args": { "type": "deploy" }
}
Development
bun test # pretest links pi runtime deps automatically
bunx tsc --noEmit # type-check
License
GPL-3.0
Links
- Author: Sacha Froment
- Source: https://github.com/sfroment/pi-koyeb
- Issues: https://github.com/sfroment/pi-koyeb/issues