# CLI Reference Paperclip CLI now supports both: - instance setup/diagnostics (`onboard`, `doctor`, `configure`, `env`, `allowed-hostname`, `env-lab`) - control-plane client operations (issues, approvals, agents, activity, dashboard) ## Base Usage Use repo script in development: ```sh pnpm paperclipai --help ``` First-time local bootstrap + run: ```sh pnpm paperclipai run ``` Choose local instance: ```sh pnpm paperclipai run --instance dev ``` ## Deployment Modes Mode taxonomy and design intent are documented in `doc/DEPLOYMENT-MODES.md`. Current CLI behavior: - `paperclipai onboard` and `paperclipai configure --section server` set deployment mode in config - server onboarding/configure ask for reachability intent and write `server.bind` - `paperclipai run --bind ` passes a quickstart bind preset into first-run onboarding when config is missing - runtime can override mode with `PAPERCLIP_DEPLOYMENT_MODE` - `paperclipai run` and `paperclipai doctor` still do not expose a direct low-level `--mode` flag Canonical behavior is documented in `doc/DEPLOYMENT-MODES.md`. Allow an authenticated/private hostname (for example custom Tailscale DNS): ```sh pnpm paperclipai allowed-hostname dotta-macbook-pro ``` Bring up the default local SSH fixture for environment testing: ```sh pnpm paperclipai env-lab up pnpm paperclipai env-lab doctor pnpm paperclipai env-lab status --json pnpm paperclipai env-lab down ``` All client commands support: - `--data-dir ` - `--api-base ` - `--api-key ` - `--context ` - `--profile ` - `--json` Company-scoped commands also support `--company-id `. API base resolution order: 1. `--api-base ` 2. `PAPERCLIP_API_URL` 3. selected context profile `apiBase` 4. local Paperclip config server port 5. `http://localhost:3100` Connection failures include the attempted URL and a `GET /api/health` check hint. ## Connect Wizard ```sh pnpm paperclipai connect ``` `connect` confirms the resolved API base, verifies `GET /api/health`, authenticates board access when needed, and saves a persona-aware profile: - `persona=board` for board operator profiles - `persona=agent` with `agentId` and `agentName` for agent profiles Profiles store token env-var names, not plaintext tokens. The wizard prints shell exports for the newly created token. Use `--data-dir` on any CLI command to isolate all default local state (config/context/db/logs/storage/secrets) away from `~/.paperclip`: ```sh pnpm paperclipai run --data-dir ./tmp/paperclip-dev pnpm paperclipai issue list --data-dir ./tmp/paperclip-dev ``` ## Context Profiles Store local defaults in `~/.paperclip/context.json`: ```sh pnpm paperclipai context set --api-base http://localhost:3100 --company-id pnpm paperclipai context set --persona agent --agent-id --api-key-env-var-name PAPERCLIP_API_KEY pnpm paperclipai context show pnpm paperclipai context list pnpm paperclipai context use default ``` To avoid storing secrets in context, set `apiKeyEnvVarName` and keep the key in env: ```sh pnpm paperclipai context set --api-key-env-var-name PAPERCLIP_API_KEY export PAPERCLIP_API_KEY=... ``` ## Company Commands ```sh pnpm paperclipai company list pnpm paperclipai company get pnpm paperclipai company stats pnpm paperclipai company create --payload-json '{...}' pnpm paperclipai company update --payload-json '{...}' pnpm paperclipai company branding:update --payload-json '{...}' pnpm paperclipai company archive pnpm paperclipai company export --out ./company --include company,agents,projects,issues,skills pnpm paperclipai company export:preview --payload-json '{...}' pnpm paperclipai company export:api --payload-json '{...}' pnpm paperclipai company import ./company --target new --new-company-name "Imported Company" pnpm paperclipai company import:preview --payload-json '{...}' pnpm paperclipai company import:apply --payload-json '{...}' pnpm paperclipai company delete --yes --confirm ``` Examples: ```sh pnpm paperclipai company delete PAP --yes --confirm PAP pnpm paperclipai company delete 5cbe79ee-acb3-4597-896e-7662742593cd --yes --confirm 5cbe79ee-acb3-4597-896e-7662742593cd ``` Notes: - Deletion is server-gated by `PAPERCLIP_ENABLE_COMPANY_DELETION`. - With agent authentication, company deletion is company-scoped. Use the current company ID/prefix (for example via `--company-id` or `PAPERCLIP_COMPANY_ID`), not another company. ## Issue Commands ```sh pnpm paperclipai issue list --company-id [--status todo,in_progress] [--assignee-agent-id ] [--match text] pnpm paperclipai issue get pnpm paperclipai issue create --company-id --title "..." [--description "..."] [--status todo] [--priority high] pnpm paperclipai issue update [--status in_progress] [--comment "..."] pnpm paperclipai issue delete --yes pnpm paperclipai issue comment --body "..." [--reopen] pnpm paperclipai issue comments [--limit 50] pnpm paperclipai issue comment:get pnpm paperclipai issue comment:delete pnpm paperclipai issue runs pnpm paperclipai issue live-runs pnpm paperclipai issue active-run pnpm paperclipai issue heartbeat-context pnpm paperclipai issue checkout --agent-id [--expected-statuses todo,backlog,blocked] pnpm paperclipai issue release pnpm paperclipai issue force-release ``` Issue subresources are exposed as Paperclip API wrappers. Commands that map to broad server schemas accept JSON payloads and validate them with shared schemas before sending. ```sh pnpm paperclipai issue child:create --payload-json '{"title":"Child task"}' pnpm paperclipai issue approvals pnpm paperclipai issue approval:link pnpm paperclipai issue approval:unlink pnpm paperclipai issue read pnpm paperclipai issue unread pnpm paperclipai issue archive pnpm paperclipai issue unarchive pnpm paperclipai issue recovery-actions pnpm paperclipai issue recovery:resolve --outcome restored --source-issue-status todo ``` ```sh pnpm paperclipai issue documents [--include-system] pnpm paperclipai issue document:get pnpm paperclipai issue document:put --body-file ./plan.md [--title Plan] pnpm paperclipai issue document:lock pnpm paperclipai issue document:unlock pnpm paperclipai issue document:revisions pnpm paperclipai issue document:restore pnpm paperclipai issue document:delete ``` ```sh pnpm paperclipai issue work-products pnpm paperclipai issue work-product:create --payload-json '{"type":"pull_request","provider":"github","title":"PR"}' pnpm paperclipai issue work-product:update --payload-json '{"status":"archived"}' pnpm paperclipai issue work-product:delete pnpm paperclipai issue interactions pnpm paperclipai issue interaction:create --payload-json '{"kind":"request_confirmation","payload":{"version":1,"prompt":"Continue?"}}' pnpm paperclipai issue interaction:accept [--selected-client-keys key1,key2] pnpm paperclipai issue interaction:reject [--reason "..."] pnpm paperclipai issue interaction:respond --answers-json '[{"questionId":"q1","optionIds":["yes"]}]' pnpm paperclipai issue interaction:cancel [--reason "..."] ``` ```sh pnpm paperclipai issue tree-state pnpm paperclipai issue tree-preview --payload-json '{"mode":"pause"}' pnpm paperclipai issue tree-holds [--status active] [--include-members] pnpm paperclipai issue tree-hold:create --payload-json '{"mode":"pause","reason":"review"}' pnpm paperclipai issue tree-hold:get pnpm paperclipai issue tree-hold:release [--payload-json '{"reason":"done"}'] pnpm paperclipai issue attachments pnpm paperclipai issue attachment:upload --company-id --file ./artifact.txt pnpm paperclipai issue attachment:download [--out ./artifact.txt] pnpm paperclipai issue attachment:delete pnpm paperclipai issue label:list --company-id pnpm paperclipai issue label:create --company-id --name bug --color '#ff0000' pnpm paperclipai issue label:delete pnpm paperclipai issue feedback:votes pnpm paperclipai issue feedback:vote --payload-json '{"targetType":"issue_comment","targetId":"...","vote":"up"}' ``` ## Project Commands ```sh pnpm paperclipai project list --company-id pnpm paperclipai project get [--company-id ] pnpm paperclipai project create --company-id --name "Launch Site" [--goal-ids ] [--lead-agent-id ] pnpm paperclipai project update [--status in_progress] [--company-id ] pnpm paperclipai project delete --yes [--company-id ] ``` Advanced project fields accept JSON: ```sh pnpm paperclipai project create --company-id --name "Ops" --env-json '{"OPENAI_API_KEY":{"kind":"secret","secretName":"openai-api-key"}}' pnpm paperclipai project update --execution-workspace-policy-json '{"enabled":true,"defaultMode":"shared_workspace"}' ``` ## Goal Commands ```sh pnpm paperclipai goal list --company-id pnpm paperclipai goal get pnpm paperclipai goal create --company-id --title "Grow revenue" [--level company] [--status active] pnpm paperclipai goal update [--title "..."] [--status achieved] pnpm paperclipai goal delete --yes ``` ## Agent Commands ```sh pnpm paperclipai agent list --company-id pnpm paperclipai agent get pnpm paperclipai agent create --company-id --payload-json '{"name":"Builder","adapterType":"codex_local"}' pnpm paperclipai agent hire --company-id --payload-json '{...}' pnpm paperclipai agent update --payload-json '{"title":"Senior Builder"}' pnpm paperclipai agent delete --yes pnpm paperclipai agent me pnpm paperclipai agent inbox pnpm paperclipai agent inbox-mine --user-id pnpm paperclipai agent wake [--company-id ] [--reason "..."] [--payload '{"issueId":"..."}'] pnpm paperclipai agent pause pnpm paperclipai agent resume pnpm paperclipai agent approve pnpm paperclipai agent terminate pnpm paperclipai agent heartbeat:invoke pnpm paperclipai agent claude-login pnpm paperclipai agent local-cli --company-id ``` Agent configuration and runtime endpoints: ```sh pnpm paperclipai agent permissions:update --payload-json '{"canCreateAgents":true,"canAssignTasks":true}' pnpm paperclipai agent configuration pnpm paperclipai agent config-revisions pnpm paperclipai agent config-revision:get pnpm paperclipai agent config-revision:rollback pnpm paperclipai agent runtime-state pnpm paperclipai agent runtime-state:reset-session [--task-key ] pnpm paperclipai agent task-sessions pnpm paperclipai agent skills pnpm paperclipai agent skills:sync --desired-skills paperclip,github pnpm paperclipai agent instructions-path:update --payload-json '{"path":"/path/to/AGENTS.md"}' pnpm paperclipai agent instructions-bundle pnpm paperclipai agent instructions-bundle:update --payload-json '{"mode":"managed"}' pnpm paperclipai agent instructions-file:get --path AGENTS.md pnpm paperclipai agent instructions-file:put --path AGENTS.md --content-file ./AGENTS.md pnpm paperclipai agent instructions-file:delete --path AGENTS.md ``` `agent local-cli` is the quickest way to run local Claude/Codex manually as a Paperclip agent: - creates a new long-lived agent API key - installs missing Paperclip skills into `~/.codex/skills` and `~/.claude/skills` - prints `export ...` lines for `PAPERCLIP_API_URL`, `PAPERCLIP_COMPANY_ID`, `PAPERCLIP_AGENT_ID`, and `PAPERCLIP_API_KEY` Example for shortname-based local setup: ```sh pnpm paperclipai agent local-cli codexcoder --company-id pnpm paperclipai agent local-cli claudecoder --company-id ``` ## Token Commands Agent API keys are scoped to one company and one agent. Plaintext tokens are printed once at creation. ```sh pnpm paperclipai token agent create --company-id --agent --name external-worker pnpm paperclipai token agent list --company-id --agent pnpm paperclipai token agent revoke --company-id --agent ``` Named board API keys use the board authorization model, support revocation and expiration metadata, and are audited server-side. ```sh pnpm paperclipai token board create --company-id --name external-admin pnpm paperclipai token board create --name short-lived --ttl-days 7 pnpm paperclipai token board list pnpm paperclipai token board revoke ``` ## Run Commands `paperclipai run` without a subcommand still bootstraps and starts a local Paperclip instance. The subcommands below inspect and control API heartbeat runs. ```sh pnpm paperclipai run list --company-id [--agent-id ] [--limit 50] pnpm paperclipai run live --company-id [--limit 50] [--min-count 0] pnpm paperclipai run get pnpm paperclipai run events [--after-seq 0] [--limit 200] pnpm paperclipai run log [--offset 0] [--limit-bytes 16384] [--text] pnpm paperclipai run cancel pnpm paperclipai run issues pnpm paperclipai run workspace-operations pnpm paperclipai run workspace-log [--offset 0] [--limit-bytes 16384] [--text] pnpm paperclipai run watchdog-decision --decision continue [--reason "..."] ``` ## Routine Commands `paperclipai routines disable-all` remains the local maintenance command. The singular `routine` group maps to the REST API. ```sh pnpm paperclipai routine list --company-id [--project-id ] pnpm paperclipai routine create --company-id --payload-json '{...}' pnpm paperclipai routine get pnpm paperclipai routine update --payload-json '{...}' pnpm paperclipai routine revisions pnpm paperclipai routine revision:restore pnpm paperclipai routine runs [--limit 50] pnpm paperclipai routine run [--payload-json '{...}'] pnpm paperclipai routine trigger:create --payload-json '{...}' pnpm paperclipai routine trigger:update --payload-json '{...}' pnpm paperclipai routine trigger:delete pnpm paperclipai routine trigger:rotate-secret pnpm paperclipai routine trigger:fire [--payload-json '{...}'] ``` ## Prompt Handoff Prompt handoff creates Paperclip work. It does not create a chat session. ```sh pnpm paperclipai agent-prompt "Prompt here" pnpm paperclipai agent prompt --agent --api-key-env PAPERCLIP_API_KEY "Prompt here" pnpm paperclipai agent prompt --profile my-agent "Prompt here" pnpm paperclipai board prompt --company-id --agent "Prompt here" ``` By default the command creates a `todo` issue assigned to the target agent and wakes the agent. Use `--issue ` to add a comment to existing work, and `--no-wake` to skip the wakeup. ## Skills Commands `paperclipai skills` covers three distinct operations: 1. **Company install** — adds or updates a row in `company_skills` for the whole company. This is what `skills install`, `skills import`, `skills create`, and `skills scan-projects` do. 2. **Agent attach** — replaces an agent's *desired* company skill set (`skills agent sync`/`clear`). This is a desired-state operation on the agent's adapter config; it does not change the company library. 3. **Adapter runtime sync** — the adapter reconciles the desired skill set with files on disk and reports an `AgentSkillSnapshot` (`skills agent list`). `skills agent sync` triggers this automatically after updating desired state. Required Paperclip runtime skills (heartbeat, etc.) remain server-enforced and are added on top of whatever the desired set names. ### Catalog (app-shipped skills) The Paperclip app ships a curated catalog under `@paperclipai/skills-catalog`. Browse and inspect commands never mutate company state; `install` adds a catalog skill to the company library. ```sh pnpm paperclipai skills browse [--kind bundled|optional] [--category ] [--query ] pnpm paperclipai skills search "" [--kind bundled|optional] [--category ] pnpm paperclipai skills inspect pnpm paperclipai skills install [--as ] [--force] --company-id ``` Catalog semantics: - **Bundled** skills live in `packages/skills-catalog/catalog/bundled//` and are recommended defaults for most companies. They use canonical key `paperclipai/bundled//`. - **Optional** skills live in `packages/skills-catalog/catalog/optional//` and are role-specific or domain-specific (browser, AWS ops, etc.). Same key shape with `optional` in place of `bundled`. - `skills install` materializes the catalog files into a company-managed skill directory and records provenance (`catalogId`, `catalogKey`, `packageVersion`, `originHash`, …) so future updates and audit decisions stay consistent. - `--as ` overrides the company skill slug. `--force` may replace a same-key catalog-managed skill but never bypasses hard validation or hard-stop audit findings. Examples: ```sh pnpm paperclipai skills browse --kind bundled --company-id pnpm paperclipai skills search "pull request" --kind bundled pnpm paperclipai skills inspect github-pr-workflow pnpm paperclipai skills install github-pr-workflow --company-id pnpm paperclipai skills install paperclipai:optional:browser:agent-browser --company-id ``` External GitHub, skills.sh, local-path, and URL sources still go through `skills import`; catalog commands are for the app-shipped catalog only. ### Company library ```sh pnpm paperclipai skills list --company-id pnpm paperclipai skills show --company-id pnpm paperclipai skills file [--path SKILL.md] --company-id pnpm paperclipai skills import --company-id pnpm paperclipai skills create --name "Review PRs" [--slug review-prs] [--description "..."] [--body-file SKILL.md] --company-id pnpm paperclipai skills scan-projects [--project-id ...] [--workspace-id ...] --company-id pnpm paperclipai skills check [skill-id-or-key-or-slug] --company-id pnpm paperclipai skills update [--force] --company-id pnpm paperclipai skills update --all [--force] --company-id pnpm paperclipai skills audit [skill-id-or-key-or-slug] --company-id pnpm paperclipai skills reset [--yes] [--force] --company-id pnpm paperclipai skills remove --yes --company-id ``` `skills import ` accepts a skills.sh URL, the equivalent `//` shorthand, a GitHub URL, a local path, or an `npx skills add …` command. See `references/company-skills.md` in the agent skill bundle for the source-type table. `skills check`, `skills update`, `skills audit`, and `skills reset` are the maintenance loop for catalog-installed skills: - `check` reports whether each skill's installed bytes match its pinned origin (`hasUpdate`, `installedHash`, `originHash`, `updateHoldReason`, `auditVerdict`). - `update` installs the pinned update through the existing install-update API. `--all` checks every company skill and updates only those with `hasUpdate=true`. `--force` discards local-modification or soft-audit holds; hard-stop audit findings still block the update. - `audit` re-scans installed bytes and reports findings without executing anything. - `reset` reinstalls a catalog-managed skill from its pinned origin, discarding local edits. Prompts in a TTY; requires `--yes` for non-interactive use. ### Agent attach ```sh pnpm paperclipai skills agent list --company-id pnpm paperclipai skills agent sync --skill [--skill ...] --company-id pnpm paperclipai skills agent clear --yes --company-id ``` `skills agent sync` replaces the agent's non-required desired skill set (it is not additive) and returns the resulting adapter `AgentSkillSnapshot`. `skills agent clear` sends an empty desired list. Required Paperclip skills are still enforced by the server in both cases. ### Notes - Skill references accept company skill `id`, canonical `key`, or unique `slug`; catalog references accept catalog `id`, `key`, or unique `slug`. - `skills file` prints raw file content in human mode so it can be piped. - `skills create --body-file -` reads the skill markdown body from stdin. - `skills remove`, `skills reset`, and `skills agent clear` prompt in a TTY and require `--yes` in non-interactive use. - `--json` prints the raw API result for each command. ## Secrets Commands ```sh pnpm paperclipai secrets list --company-id pnpm paperclipai secrets declarations --company-id [--include agents,projects] [--kind secret] pnpm paperclipai secrets create --company-id --name anthropic-api-key --value-env ANTHROPIC_API_KEY pnpm paperclipai secrets link --company-id --name prod-stripe-key --provider aws_secrets_manager --external-ref pnpm paperclipai secrets doctor --company-id pnpm paperclipai secrets provider-configs --company-id pnpm paperclipai secrets provider-config:create --company-id --payload-json '{...}' pnpm paperclipai secrets provider-config:discovery-preview --company-id --payload-json '{...}' pnpm paperclipai secrets provider-config:get pnpm paperclipai secrets provider-config:update --payload-json '{...}' pnpm paperclipai secrets provider-config:default pnpm paperclipai secrets provider-config:health pnpm paperclipai secrets provider-config:delete pnpm paperclipai secrets remote-import:preview --company-id --payload-json '{...}' pnpm paperclipai secrets remote-import --company-id --payload-json '{...}' pnpm paperclipai secrets migrate-inline-env --company-id [--apply] ``` Secret listing and declarations never print secret values. `create` accepts `--value-env` so shell history does not capture the value. `link` records provider-owned references without copying the secret value into Paperclip. For AWS-backed secrets, `secrets doctor` reports missing non-secret provider env and the expected AWS SDK runtime credential source; do not store AWS bootstrap credentials in Paperclip secrets. Per-company provider vaults (multiple vault instances per provider, default vault selection, coming-soon GCP/Vault) can be configured from the board UI under `Company Settings → Secrets → Provider vaults` or through the provider-config CLI commands above. See the [secrets deploy guide](../docs/deploy/secrets.md#provider-vaults) and [API reference](../docs/api/secrets.md#provider-vaults) for the contract. ## Approval Commands ```sh pnpm paperclipai approval list --company-id [--status pending] pnpm paperclipai approval get pnpm paperclipai approval create --company-id --type hire_agent --payload '{"name":"..."}' [--issue-ids ] pnpm paperclipai approval approve [--decision-note "..."] pnpm paperclipai approval reject [--decision-note "..."] pnpm paperclipai approval request-revision [--decision-note "..."] pnpm paperclipai approval resubmit [--payload '{"...":"..."}'] pnpm paperclipai approval comment --body "..." ``` ## Activity Commands ```sh pnpm paperclipai activity list --company-id [--agent-id ] [--entity-type issue] [--entity-id ] pnpm paperclipai activity create --company-id --payload-json '{...}' pnpm paperclipai activity issue ``` ## Dashboard Commands ```sh pnpm paperclipai dashboard get --company-id ``` ## Org And Agent Config Commands ```sh pnpm paperclipai whoami pnpm paperclipai openapi pnpm paperclipai org get --company-id pnpm paperclipai org svg --company-id [--out org.svg] pnpm paperclipai org png --company-id [--out org.png] pnpm paperclipai agent-config list --company-id ``` ## Access, Profile, And Instance Commands ```sh pnpm paperclipai profile session pnpm paperclipai profile get pnpm paperclipai profile update --payload-json '{...}' pnpm paperclipai profile company-user --company-id pnpm paperclipai invite list --company-id pnpm paperclipai invite create --company-id --payload-json '{...}' pnpm paperclipai invite revoke pnpm paperclipai invite show pnpm paperclipai invite accept [--payload-json '{...}'] pnpm paperclipai invite onboarding:text pnpm paperclipai join list --company-id [--status pending_approval] pnpm paperclipai join approve --company-id pnpm paperclipai join reject --company-id pnpm paperclipai join claim-key --claim-secret pnpm paperclipai member list --company-id pnpm paperclipai member update --company-id --payload-json '{...}' pnpm paperclipai member role-and-grants --company-id --payload-json '{...}' pnpm paperclipai member permissions --company-id --payload-json '{...}' pnpm paperclipai member archive --company-id [--payload-json '{...}'] pnpm paperclipai admin user list [--query ] pnpm paperclipai admin user promote pnpm paperclipai admin user demote pnpm paperclipai admin user company-access pnpm paperclipai admin user company-access:update --payload-json '{...}' ``` CLI auth challenge endpoints are also exposed for tooling that needs the raw challenge lifecycle: ```sh pnpm paperclipai auth challenge create --payload-json '{...}' PAPERCLIP_CHALLENGE_SECRET= pnpm paperclipai auth challenge get --token-env PAPERCLIP_CHALLENGE_SECRET PAPERCLIP_CHALLENGE_SECRET= pnpm paperclipai auth challenge approve --token-env PAPERCLIP_CHALLENGE_SECRET PAPERCLIP_CHALLENGE_SECRET= pnpm paperclipai auth challenge cancel --token-env PAPERCLIP_CHALLENGE_SECRET pnpm paperclipai auth revoke-current ``` `--token ` is still supported for compatibility, but `--token-env` avoids putting challenge secrets in shell history or process arguments. ```sh pnpm paperclipai instance scheduler-heartbeats pnpm paperclipai instance settings:general pnpm paperclipai instance settings:general:update --payload-json '{...}' pnpm paperclipai instance settings:experimental pnpm paperclipai instance settings:experimental:update --payload-json '{...}' pnpm paperclipai instance database-backup pnpm paperclipai sidebar preferences pnpm paperclipai sidebar preferences:update --payload-json '{...}' pnpm paperclipai sidebar project-preferences --company-id pnpm paperclipai sidebar project-preferences:update --company-id --payload-json '{...}' pnpm paperclipai sidebar badges --company-id pnpm paperclipai inbox dismissals --company-id pnpm paperclipai inbox dismiss --company-id --payload-json '{"itemKey":"run:"}' pnpm paperclipai board-claim show pnpm paperclipai board-claim claim [--payload-json '{...}'] pnpm paperclipai openclaw invite-prompt --company-id --payload-json '{...}' pnpm paperclipai available-skill list pnpm paperclipai available-skill index pnpm paperclipai available-skill get pnpm paperclipai llm agent-configuration pnpm paperclipai llm agent-configuration:adapter pnpm paperclipai llm agent-icons ``` ## Adapter, Asset, And Skill Commands ```sh pnpm paperclipai adapter list pnpm paperclipai adapter install --payload-json '{"packageName":"@scope/adapter","version":"1.2.3"}' pnpm paperclipai adapter get pnpm paperclipai adapter update --payload-json '{"disabled":true}' pnpm paperclipai adapter override --payload-json '{"paused":true}' pnpm paperclipai adapter reload pnpm paperclipai adapter reinstall pnpm paperclipai adapter delete pnpm paperclipai adapter config-schema pnpm paperclipai adapter ui-parser pnpm paperclipai adapter models --company-id [--refresh] [--environment-id ] pnpm paperclipai adapter model-profiles --company-id pnpm paperclipai adapter detect-model --company-id pnpm paperclipai adapter test-environment --company-id --payload-json '{...}' ``` ```sh pnpm paperclipai asset image:upload --company-id --file ./image.png [--namespace docs] [--alt "..."] pnpm paperclipai asset logo:upload --company-id --file ./logo.svg pnpm paperclipai asset content --out ./asset.bin ``` ```sh pnpm paperclipai skill list --company-id pnpm paperclipai skill get --company-id pnpm paperclipai skill file --company-id [--path SKILL.md] pnpm paperclipai skill create --company-id --payload-json '{...}' pnpm paperclipai skill file:update --company-id --payload-json '{...}' pnpm paperclipai skill import --company-id --payload-json '{"source":"github:owner/repo/path"}' pnpm paperclipai skill scan-projects --company-id --payload-json '{...}' pnpm paperclipai skill update-status --company-id pnpm paperclipai skill install-update --company-id pnpm paperclipai skill delete --company-id ``` ## Cost, Finance, And Budget Commands ```sh pnpm paperclipai cost summary --company-id pnpm paperclipai cost by-agent --company-id pnpm paperclipai cost by-agent-model --company-id pnpm paperclipai cost by-provider --company-id pnpm paperclipai cost by-biller --company-id pnpm paperclipai cost by-project --company-id pnpm paperclipai cost window-spend --company-id pnpm paperclipai cost quota-windows --company-id pnpm paperclipai cost issue pnpm paperclipai cost event:create --company-id --payload-json '{...}' ``` ```sh pnpm paperclipai finance event:create --company-id --payload-json '{...}' pnpm paperclipai finance events --company-id pnpm paperclipai finance summary --company-id pnpm paperclipai finance by-biller --company-id pnpm paperclipai finance by-kind --company-id pnpm paperclipai budget overview --company-id pnpm paperclipai budget policy:upsert --company-id --payload-json '{...}' pnpm paperclipai budget company:update --company-id --payload-json '{...}' pnpm paperclipai budget agent:update --payload-json '{...}' pnpm paperclipai budget incident:resolve --company-id [--payload-json '{...}'] ``` ## Workspace And Environment Commands ```sh pnpm paperclipai workspace list --company-id pnpm paperclipai workspace get pnpm paperclipai workspace close-readiness pnpm paperclipai workspace operations pnpm paperclipai workspace update --payload-json '{...}' pnpm paperclipai workspace runtime-service start --payload-json '{...}' pnpm paperclipai workspace runtime-command run --payload-json '{...}' ``` ```sh pnpm paperclipai environment list --company-id pnpm paperclipai environment capabilities --company-id pnpm paperclipai environment create --company-id --payload-json '{...}' pnpm paperclipai environment get pnpm paperclipai environment leases pnpm paperclipai environment lease pnpm paperclipai environment update --payload-json '{...}' pnpm paperclipai environment delete pnpm paperclipai environment probe pnpm paperclipai environment probe-config --company-id --payload-json '{...}' ``` ```sh pnpm paperclipai project-workspace list pnpm paperclipai project-workspace create --payload-json '{...}' pnpm paperclipai project-workspace update --payload-json '{...}' pnpm paperclipai project-workspace delete pnpm paperclipai project-workspace runtime-service restart --payload-json '{...}' pnpm paperclipai project-workspace runtime-command run --payload-json '{...}' ``` ## Plugin Commands Existing plugin lifecycle commands remain available: `plugin init`, `list`, `install`, `uninstall`, `enable`, `disable`, `inspect`, and `examples`. ```sh pnpm paperclipai plugin ui-contributions pnpm paperclipai plugin tools pnpm paperclipai plugin tool:execute --payload-json '{...}' pnpm paperclipai plugin health pnpm paperclipai plugin logs pnpm paperclipai plugin upgrade pnpm paperclipai plugin config pnpm paperclipai plugin config:set --payload-json '{"configJson":{...}}' pnpm paperclipai plugin config:test --payload-json '{"configJson":{...}}' pnpm paperclipai plugin jobs pnpm paperclipai plugin job:runs pnpm paperclipai plugin job:trigger [--payload-json '{...}'] pnpm paperclipai plugin webhook [--payload-json '{...}'] pnpm paperclipai plugin dashboard pnpm paperclipai plugin bridge:data --payload-json '{...}' pnpm paperclipai plugin bridge:action --payload-json '{...}' pnpm paperclipai plugin bridge:stream [--duration-ms 10000] pnpm paperclipai plugin data --payload-json '{...}' pnpm paperclipai plugin action --payload-json '{...}' pnpm paperclipai plugin local-folders --company-id pnpm paperclipai plugin local-folder:status --company-id pnpm paperclipai plugin local-folder:validate --company-id [--payload-json '{...}'] pnpm paperclipai plugin local-folder:set --company-id --payload-json '{...}' ``` Feedback traces can be fetched directly by ID when automating export workflows: ```sh pnpm paperclipai feedback trace pnpm paperclipai feedback bundle ``` ## Heartbeat Command `heartbeat run` now also supports context/api-key options and uses the shared client stack: ```sh pnpm paperclipai heartbeat run --agent-id [--api-base http://localhost:3100] [--api-key ] ``` ## Local Storage Defaults Local Paperclip data lives under the selected instance root. `PAPERCLIP_HOME` chooses the home directory and `PAPERCLIP_INSTANCE_ID` chooses the instance. ```text ~/.paperclip/ # PAPERCLIP_HOME └── instances/ └── default/ # instance root (PAPERCLIP_INSTANCE_ID) ├── config.json # runtime config ├── .env # instance env file ├── db/ # embedded PostgreSQL data ├── data/ │ ├── storage/ # local_disk uploads │ └── backups/ # automatic DB backups ├── logs/ ├── secrets/ │ └── master.key # local_encrypted master key ├── workspaces/ # default agent workspaces ├── projects/ # project execution workspaces ├── companies/ # per-company adapter homes (e.g. codex-home) └── codex-home/ # per-instance codex home (when not company-scoped) ``` Default paths for the canonical install: - config: `~/.paperclip/instances/default/config.json` - embedded db: `~/.paperclip/instances/default/db` - logs: `~/.paperclip/instances/default/logs` - storage: `~/.paperclip/instances/default/data/storage` - secrets key: `~/.paperclip/instances/default/secrets/master.key` Override base home or instance with env vars: ```sh PAPERCLIP_HOME=/custom/home PAPERCLIP_INSTANCE_ID=dev pnpm paperclipai run ``` ## Storage Configuration Configure storage provider and settings: ```sh pnpm paperclipai configure --section storage ``` Supported providers: - `local_disk` (default; local single-user installs) - `s3` (S3-compatible object storage)