reassign-pm
Skill0 starsChanged 26 days agoMITView on GitHub
Take over a project's Paseo PM role, retain its assigned workers, and archive the previous PM after verification.
In this repository24 other files it gives its agents.
- codebase-designSkill
- improve-codebase-architectureSkill
- uv-pythonSkill
- bw-loginSkill
- project-iconSkill
- recover-mouse-inputSkill
- wizardSkill
- dispatching-parallel-agentsSkill
- handoffSkill
- hill-climbSkill
- opcSkill
- opnSkill
- personal-skillsSkill
- repo-lessonsSkill
- trialSkill
- unstuckSkill
- woSkill
- sampleSkill
- find-docsSkill
- liteparseSkill
- tco-searchSkill
- browse-xSkill
- frontend-designSkill
- playwrightSkill
The file
Files
Reassign PM
The current agent ($PASEO_AGENT_ID) becomes the project's PM. Use supported Paseo tools or CLI/API operations. Reassignment authorizes archiving the previous PM, not its workspace or unrelated agents.
Discover and select automatically. Inspect self and list agents across all workspaces, including dormant and archived PMs. With CLI, use
paseo ls --global --all --json, then inspect full candidate IDs withpaseo inspect <id> --json; use supported API snapshots for labels and workspace/project metadata omitted by CLI inspect. A cwd filter or recent-only result cannot prove absence. Confirm persisted archive state explicitly; anidlesnapshot without an archive flag does not prove the agent is unarchived. Exclude$PASEO_AGENT_IDfrom every old-PM candidate set, even when self inheritedrole=pm/projectlabels from a copied chat.Resolve evidence in this order:
- Source. Inspect an explicit owner old PM ID first; if that record cannot be verified, report the failed lookup and stop before mutation. When no explicit ID is supplied, identify the source of this fork/copy from available supported provenance or supplied old-chat context. Verify the full ID against a real PM record and its project; for a context header naming a title/directory, corroborate against the record and saved activity. Arbitrary IDs mentioned in historical transcripts, self's inherited labels, and a matching title alone are not source proof. Unverifiable provenance does not outrank eligible candidates.
- Project. Use the supplied project first, then the verified source PM's project, then workspace/project metadata and existing path equivalence; the current directory basename is the fallback. Expand home paths and compare realpaths where available. Missing paths, conflicting project evidence, or differing labels remain unresolved evidence. Report that evidence and stop before mutation when it prevents confirming a single project; never invent another project target.
- Previous PM. Eligible candidates are confirmed same-project, unarchived
role=pmrecords other than self. Select the verified explicit owner old PM ID if eligible, otherwise the verified source PM if eligible, otherwise the candidate with greatest persistedcreatedAt. Compare parsed creation timestamps, then order equal timestamps by full ID ascending with a stable ordinal comparison.updatedAt, activity, quota, status, list position, and relative display times do not determine recency. Missing or invalid creation timestamps that prevent ranking require an evidence report before mutation. An archived source supplies context but does not override an eligible unarchived PM. If complete discovery finds no eligible candidate, continue without an archive.
Announce the selected full ID, project, and evidence (explicit owner ID, verified source, or creation timestamp and tie ordering), or announce that complete discovery found none. Multiple confirmed same-project PM matches invoke this selection rule, not a question asking the owner to choose. Keep the other confirmed candidates for label cleanup in step 5.
- Read before waking. Resume from root
STATUS.htmlandLESSONS.mdwithrepo-lessons, and inspect the selected old PM's saved activity plus verified source context when different or archived. Request a live handoff only for information unavailable there and when the old PM has capacity. Exhausted quota never requires a live handoff and must not block an otherwise verified takeover. Preserve unrelated checkout changes. - Inventory retained agents. Identify workers and watchers from actual parent relationships, explicit workstream assignments, and saved activity. Sharing a cwd is insufficient. Record each retained agent's Paseo ID, workspace ID, provider/native session ID, exact model, mode/thinking/features, role labels, cwd, and lifecycle state. Include assigned agents in other workspaces; leave unrelated agents alone. Completed workers stay in place by default without a retention question; include them only when the owner explicitly requested it. Read each provider's model catalog and copy IDs verbatim, including Claude
[1m]suffixes and OpenCode provider prefixes. Do not replace a model with a similar one when its ID is unavailable. - Prepare placement. Rename self's workspace to the basename of its directory. Retained agents already there need no move. For others, use a supported relocation operation only after checking it preserves the recorded identities, native history, settings, roles, and usable cwd. A parent label changes ownership, not workspace membership. Do not create replacement sessions, filesystem aliases, or edit daemon storage. If the installed version cannot safely relocate an agent, report the concrete native dependency in references/native-relocation.md and stop before role transfer or final archive. Do not archive workers merely to try importing them elsewhere.
Transfer and verify. Move retained agents to self's workspace and transfer their ownership through the supported parent operation; preserve unrelated labels. A parent label does not move Paseo's finish notification: it stays bound to the agent that launched or last prompted the worker. For each retained worker that is running, send it a short prompt from self with
send_agent_promptandnotifyOnFinish: true, asking it to report to self when done; do not interrupt a mid-task worker with new instructions. For a retained worker that already finished after the old PM stopped reading, read its last output withpaseo agent logs <id> --tail <n>and act on it; its report went to the old PM. Set self's name to<Project> PM, itsrole=pmandprojectlabels, and its exact catalog model ID, preserving its other settings. Self takes onlyrole=pmandprojectfrom the old PM: never copy opt-out labels (for examplenoresume,noarchive, or any other plugin opt-out) onto self, and remove any self already inherited; retained agents keep their own labels. The default PM profile is Pifleet/claude-opus-5-5with thinkingmediumunless the owner named another; report the profile set. Carry the PM files: Loadout's Pi launcher (personal-skills/scripts/pi/launch.mjs) gives each agent its ownPI_CODING_AGENT_DIRat<pi root>/agents/<agent id>/, where<pi root>is the directory holding thelaunch.mjsnamed in the host's Paseopiprovider command, and creates a fresh dir for a new agent without copying the PM addendumAPPEND_SYSTEM.mdor the per-agent overlayssettings.overlay.json(for example a PM'sskillsExclude) andmodels.overlay.json. If the selected old PM ran on Pi on self's host, handle each of those three files its agent dir holds the same way: copy it unchanged into self's agent dir, building both paths with the host's native path API (Windows root included), and verify the SHA-256 hashes match; if self's dir already holds a different one, do not overwrite it and report the conflict. Never copy any other file from the old dir (sessions,mcp.json,settings.json,models.json, auth). If self is not on Pi, report each as not carried. A carried file takes effect when self's Pi process next starts or resumes. Inspect self and every retained agent: verify destination workspace, parent ownership, finish notification re-armed for running workers, unchanged Paseo/native IDs and history, catalog model, settings, roles, no opt-out labels on self, each ofAPPEND_SYSTEM.md,settings.overlay.jsonandmodels.overlay.jsoncarried with a matching hash or reported absent or not carried, usable cwd, and unarchived state. On a failed check, stop before label retirement or archiving and report any partial changes within the resolved project.After replacement and retained-agent verification, re-query globally and retire only stale
role=pmassignments on other confirmed same-project candidates beyond self and the selected old PM, using supported label updates. In 0.10.2,paseo agent update <id> --label 'role='clears PM membership with an empty string; the public update schema does not accept null deletion. Verify thatroleno longer equalspm. Preserve their other labels, sessions, history, settings, lifecycle state, and workspaces. Announce the affected IDs and verify each label change and preservation. Leave unconfirmed candidates untouched and report unresolved evidence; a failed cleanup blocks the final archive. Duplicate labels alone do not require an owner selection question or authorize archiving those other agents.- Archive last. Only after those checks, archive the selected old PM. Re-query globally: exactly one unarchived
role=pm/project=<name>match must be self, and retained agents must remain unarchived in self's workspace. Archive the old workspace only when the owner explicitly requested it: re-inventory every remaining agent and terminal, verify retained agents are absent, and confirm the cascade is within that request. Never archive the replacement workspace. Local checkout files and native history must survive; stop if removing a managed worktree would violate that requirement.
Update the owned root memory under its local commit/ignore policy. Report the new PM ID/model, PM addendum and overlay status, selected old PM ID and evidence, archived PM ID, stale PM label removals, retained-agent placement, any workspace archive, and unresolved dependencies. Then continue the assigned work.
Installed provenance limits
Observed in Paseo 0.10.2: protocol messages.js defines agent.fork_context.request with agentId, optional boundaryCursor/boundaryMessageId, and requestId. The response contains the requested agentId, attachment, item count, boundary, and error; client daemon-client.js method buildAgentForkContext retrieves that source history. This generates context for the requested agent, not a child-to-source lookup. Server agent/activity-curator.js generates an attachment whose Source agent: is a title and Source directory: is a cwd, not a full PM ID. Protocol AgentSnapshotPayloadSchema has no persisted fork-source field, and the CLI has no fork-context command. Use provenance actually available in the current fork or supplied context and corroborate it; otherwise use creation-time selection. Recheck the installed protocol/client and CLI surface when versions change rather than inventing metadata fields.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

