Confirmed by experiment: how a picker can assign skills per agent, and where the boundary is
This commit is contained in:
@@ -515,3 +515,88 @@ Committed as `77014d0` — documentation only, nothing in the running layout cha
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-pi-2026-11-10-21-03-21|Rich discovery: .pi 2026-11-10 21:03:21]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|.pi]]
|
||||
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|.pi deployment operations]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-10 21:14:03)
|
||||
|
||||
## Deployment/runbook details discovered (2026-11-10 21:14:03)
|
||||
|
||||
You are right, and my explanation was wrong in a way that matters. Correcting it.
|
||||
|
||||
## Per-agent skills already exist — that is the design
|
||||
|
||||
`GET /api/agents/{id}/skills` returns a **separate** `desiredSkills` list for every agent. Setting it is one call:
|
||||
|
||||
```
|
||||
POST /api/agents/{id}/skills/sync
|
||||
{ "mode": "replace",
|
||||
"desiredSkills": ["company/<id>/nixos-workflow", "paperclipai/paperclip/paperclip"] }
|
||||
```
|
||||
|
||||
`replace` means "this agent gets exactly these". At run time the adapter builds a directory from **that agent's** list and passes it as `--skill`. Builder had its own list; Documenter has another. Different agents, different skills, no picker needed.
|
||||
|
||||
What I got wrong: I let a narrow caveat ("links persist in the shared directory, so a skill can linger") stand in for the whole model, which read as "one set for everybody". It is not. The list is per agent and it is stored in Paperclip.
|
||||
|
||||
Skills are drawn from `GET /api/skills/available`, the company list, and the catalog — any of which can be assigned to any agent with the call above.
|
||||
|
||||
## Per-agent extensions: yes, through the command
|
||||
|
||||
The adapter's own configuration document says the command defaults to `pi` and is settable per agent, and so is `env`:
|
||||
|
||||
```
|
||||
adapterConfig.command defaults to "pi"
|
||||
adapterConfig.env KEY=VALUE pairs
|
||||
```
|
||||
|
||||
So an agent gets its own wrapper:
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec pi --extension npm:pi-memctx \
|
||||
--extension git:https://gitea…/pi-config/extensions/tavily-search/index.ts \
|
||||
"$@"
|
||||
```
|
||||
|
||||
and `PATCH /api/agents/{id}` sets `adapterConfig.command` to that file. The adapter appends its own arguments (`--mode json`, `--session`, `--skill`, `--tools`, `--model`) to whatever the command is, so the wrapper is additive and cannot break the run. `env` is the same lever for environment.
|
||||
|
||||
That gives you, today and without touching Paperclip's source:
|
||||
|
||||
- one wrapper per role — `builder`, `documenter`, `reviewer` — each with its own extension list;
|
||||
- a place to pass `--no-skills` if you ever want strict isolation;
|
||||
- a place to keep the tool list deliberately small.
|
||||
|
||||
So the honest summary is: **skills are per agent in Paperclip already; extensions are per agent through the agent's command.** My "one global set" sentence was simply false.
|
||||
|
||||
## History — three options, best first
|
||||
|
||||
1. **Open the real Pi session in a pane.** Every run is written to `~/.pi/paperclips/<timestamp>-<agentId>.jsonl` and Pi is started with `--session <file>`. A pane running `pi --session <that file>` shows the actual conversation with Pi's own interface, and can be continued. No new code — a tool-pane entry that takes a file path. The only risk is two writers on one session file, so use it on finished runs or as a deliberate hand-over.
|
||||
2. **A read-only transcript tab** in `Agents>agents`, drawn from the same JSONL. Integrated and safe, less faithful.
|
||||
3. **`pi --resume`** in a tool pane and pick the session from Pi's own list. Simplest, but you find it by eye.
|
||||
|
||||
`GET /api/agents/{id}/task-sessions` maps task → session file and working directory, so options 1 and 2 have a reliable index.
|
||||
|
||||
Written into `docs/PLAN-INTERFACE.md` as a correction; committed as `47aacfd`. Nothing in the running layout changed.
|
||||
|
||||
If you want, the next build can be small and specific: an `Agents>skills` tab that lists an agent's skills and adds or removes them with those two calls, and a `t` tool-pane entry that opens a chosen Pi session. Say which.
|
||||
|
||||
## Source paths observed
|
||||
|
||||
- `nix/store/rg248h9sz8dylm8p6a9w9fj4zrv4sgm5-pi-coding-agent-0.82.1/lib/node_modules/pi-monorepo/docs/usage.md`
|
||||
- `paperclipai/paperclip/paperclip`
|
||||
- `api/skills/available`
|
||||
- `pi-config/extensions/tavily-search/index.ts`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 83%
|
||||
- Reason: Extracted repeatable deploy/configuration procedure from rich discovery
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-10 21:14:03 -->
|
||||
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-pi-adapter-per-agent-skills-and-per-agent-extensio|Paperclip + Pi adapter: per-agent skills and per-agent extensions]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-paperclipai-2026-11-10-21-14-03|Rich discovery: paperclipai 2026-11-10 21:14:03]]
|
||||
- context: [[packs/paperclip-harness/20-context/paperclipai|paperclipai]]
|
||||
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|paperclipai deployment operations]]
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|paperclipai repository structure and configuration patterns]]
|
||||
|
||||
Reference in New Issue
Block a user