How It Works
Ink uses convention-based discovery. When you runpolpo ink add, Polpo clones the target repo and scans for packages by file path:
| Package Type | Convention Path | Content |
|---|---|---|
| Playbook | playbooks/<name>/playbook.json | PlaybookDefinition |
| Agent | agents/<name>.json | AgentConfig |
| Company | companies/<name>/polpo.json | Full PolpoFileConfig |
Package Types
Playbooks
Reusable mission templates with parameters. Installed to.polpo/playbooks/<name>/.
polpo playbook run <name>. See Playbooks for the full spec.
Agents
Pre-configured agent definitions with roles, skills, and tool access. Installed to.polpo/ink-agents/<name>.json.
Companies
Complete company configurations — multiple agents, team structure, settings, and review criteria. Installed to.polpo/ink-companies/<name>/.
Installing Packages
.polpo/ink-cache/, discovers packages by convention, validates each one, and copies them into the appropriate .polpo/ subdirectories.
Lock File
Every install creates or updates.polpo/ink.lock — a JSON file that records:
- Source — the registry identifier (e.g.
acme-corp/polpo-registry) - Commit hash — the exact git commit at install time
- Installed packages — name, type, and content hash for each package
- Timestamp — when the registry was installed
polpo ink update compares content hashes to show exactly what changed (added, modified, removed) before applying.
Updating & Removing
--yes to apply without confirmation.
Security
Ink validates every package before installation:Structural Validation
- File size limit: 1 MB per package JSON file
- Package limit: 100 packages per registry
- JSON schema validation per type (playbooks must have
name,description,mission; agents must havename; companies must haveorgand teams)
Security Warnings
Ink flags potentially dangerous patterns during installation:- Custom systemPrompt on agents — may contain prompt injection
- Dangerous tools (
bash,exec) in an agent’sallowedTools - Nested agent systemPrompts within company configs
polpo ink add and require explicit --yes to proceed.
Content Hashing
Every package file is SHA-256 hashed at install time. The hash is stored inink.lock and used during updates to detect changes.
Creating a Registry
To publish your own packages, create a git repo following the conventions:Optional Metadata
All package types support optional metadata fields for discoverability:| Field | Type | Description |
|---|---|---|
version | string | Semantic version (e.g. "1.0.0") |
author | string | Author name or org |
tags | string[] | Tags for filtering and search |
description | string | Short description |
polpo ink add and on polpo.sh/ink.
Install Telemetry
When you install packages, Polpo sends a fire-and-forget POST to the Ink Hub API (polpo.sh/api/installs) with the package names, types, and source. This powers the install count leaderboard on polpo.sh/ink. The request is non-blocking and fails silently — it never interrupts your workflow.