| name | port-daddy-agent-skill |
| description | Instruction manual for agents driving Port Daddy multi-agent coordination. Use when an agent will edit a repo, recover work, coordinate with other sessions, inspect FleetBar/Fleet Control Center truth, package skill/docs surfaces, or leave a durable handoff. NOT for generic coding that does not need Port Daddy state. |
| license | FSL-1.1-MIT |
| allowed-tools | Read,Bash,Grep,Glob,Edit,Write |
| metadata | {"category":"Coordination","tags":["port-daddy","multi-agent","coordination","fleetbar","claims","salvage","handoff","schemas"],"pairs-with":["port-daddy","skill-architect","next-move"],"provenance":{"kind":"first-party","owners":["port-daddy"]},"authorship":{"maintainers":["port-daddy"]},"mirrors":{"repo":"skills/port-daddy-agent-skill","codex":".codex/skills/port-daddy-agent-skill","claude":".claude/skills/port-daddy-agent-skill","agents":".agents/skills/port-daddy-agent-skill","gemini-extension":".gemini/extensions/port-daddy/skills/port-daddy-agent-skill"},"installs":{"workgroup":"/Users/erichowens/coding/workgroup-ai/skills/port-daddy","user":"/Users/erichowens/.agents/skills/port-daddy-agent-skill"}} |
Port Daddy Agent Skill
You are not just coding. You are operating in a shared local coordination
system. Port Daddy is the substrate. This skill is the field manual.
Use it when you need agents to move through a repo without losing truth:
current daemon state, active work, claimed files, locks, notes, actor inboxes,
FleetBar/Fleet Control Center evidence, validation, and recoverable handoffs.
NOT For
- One-line read-only answers where Port Daddy state does not matter.
- Generic "be careful with git" advice.
- Replacing repo-authored docs, live daemon truth, tests, or operator evidence.
- Launching extra agents when one bounded local change is enough.
Default Agent Happy Path
Use this path before you reach for advanced coordination. It is the normal
agent loop for repo work on this machine.
pd status
pd briefing
pd salvage --project <project> --limit 20
pd begin "<bounded task>" --identity <project>:<agent>
pd whoami
pd advise <likely-path> --task "<plain-language task>"
pd note "Scope: <files>. Assumptions: <truth>. Validation: <commands>."
pd session files add <path>
pd note "Result: <change>. Validation: <evidence>. Remaining: <risk>."
pd done "<short outcome>"
Telos vs Purpose
Every Port Daddy agent carries a telos alongside its purpose.
They look similar in pd whoami output, but they are not the same field
and should not drift together.
| Field | Meaning | Lifetime |
|---|
purpose | The current task this session is doing. | Per-session. Resets when you pd done and pd begin again. |
telos | Why this agent exists in the fleet — the durable role headline. | Long-lived. Survives across sessions, salvages, and respawns. |
pd begin "<purpose>" sets the purpose. By default the telos defaults to
the same string for compatibility, but creator-provided telos is preferred:
fleet YAML, spawn calls, and registration paths can declare a richer telos
object explicitly, and pd whoami will show that string instead.
When to update each:
- Per task — change
purpose via a fresh pd begin (or pd done then
pd begin). Don't reuse a session whose purpose has materially shifted.
- When the agent's role changes — update
telos through registration
or heartbeat. Don't let operator surfaces (FleetBar, Fleet Control Center,
briefings) show a stale role headline. A runtime-derived fallback telos
is allowed only as compatibility — bake a real telos in as soon as you
know the role.
Practical rules:
- If you spawn fleet agents in
pd-fleet.yml, declare telos: on each
agent explicitly. Keep starter templates, schema docs, CLI help, API
docs, and this skill aligned when the telos shape changes.
- If you can choose only one to make accurate, make telos accurate.
Operator surfaces use it for the human-readable "what does this agent
do" answer.
- When handing off, mention both telos and purpose in your
pd note if
they differ — the next agent inherits identity but may need to set a
new purpose for its own slice.
Reconciling Before Publishing
Fetch and reconcile before publishing:
git fetch origin
git rebase origin/main
pd sessions --all-worktrees
pd notes --limit 20
pd guard check --staged
Small Decision Table
| Situation | Move |
|---|
| You will edit files | Start a session, leave a scope note, and claim the smallest real files or regions. |
| The live daemon looks stale | Verify daemon provenance before trusting docs, source, or memory. |
| Another session may overlap | Read notes, claims, activity, and ownership before changing the surface. |
| Work was interrupted | Use salvage and preserve the abandoned intent. |
| You are about to commit, push, or deploy | Fetch, reconcile, re-read live coordination state, stage narrowly, and run the guard. |
Advanced Surfaces
Use these only when the task actually needs them:
- Tuples and channels for machine-readable shared facts.
- Actor inboxes for durable role ownership.
- Pheromones and file heat for contention signals.
- Fleet YAML, sorties, and spawned agents for real parallel work.
- Locks for scarce resources such as promotion, generated artifacts,
migrations, and release packaging.
- FleetBar and Fleet Control Center for operator-visible truth.
CLI Documentation Contract
The CLI reference lives in this skill and the website docs; nothing should
require a separate port-daddy-cli skill. The source-backed website page
/docs/cli must give every command row a detail route with syntax, options,
examples, aliases, source provenance, and API contract metadata.
High-frequency commands:
pd status
pd briefing
pd begin "<purpose>" --identity <project>:<agent>
pd note "Scope: <files>"
pd session files add <path>
pd add --dry-run -A
pd guard check --staged
pd tube <channel> --send "message"
pd actor lookout --message "release surface drift fixed"
pd done "<summary>"
Load references/cli-reference.md when you need the broader command families,
aliases, generated docs expectations, or claim-aware git staging rules.
Ambient Peer Coordination
The point is not to make agents talk constantly. The point is to publish
shared facts where other agents and operator surfaces can find them.
- Use
pd note for scope, assumptions, touched files, validation, blockers,
and handoffs.
- Use symbol/region claims when a change is naturally smaller than a file.
- Use tuples, channels, and actor inboxes for machine-readable coordination.
- When possible, fix bounded Port Daddy dogfood bugs when you discover them; if the fix is not
bounded, leave exact evidence and a targeted actor message.
- Publish
coordination:inconsistency for not just collision avoidance, but
implied-goal contradictions, UI or docs shape conflicts, live runtime/source
drift, security, auth, privacy, data-retention, trust-boundary divergence,
raw text or unauthenticated endpoints beside authenticated, secure API
claims, and sessions marked active while their agent registry bodies are dead or missing.
- Operator-worthy callouts go to durable channels. Routine progress stays in notes.
Roadmap, Skill, And Actor Truth
Roadmap and skill-drift work must route through live actor and recovery
surfaces, not only local prose.
pd actors --project <project>
pd actor cartographer --project <project>
pd actor navigator --inbox-stats
pd actor navigator --inbox --unread
pd actor navigator --message "roadmap state changed; see docs/recovery/CURRENT-WORK.md"
pd actor lookout --message "release-surface drift fixed in docs, website, README, and skill"
Mailbox delivery is durable but not an immediate answer. After messaging an
actor, keep working from the actual source of truth: docs/recovery/CURRENT-WORK.md,
.cartographer/README.md, .cartographer/status.md, live notes, sessions,
and the checked-in release surfaces.
MCP Equivalents
When a client is using MCP instead of the CLI, use the matching Port Daddy MCP
tools for claims, sessions, notes, locks, messaging, salvage, harbors, spawning,
and service orchestration. Prefer MCP for model clients that already have it
installed; prefer the CLI when you need shell-local git, build, or deployment
evidence.
Operating Loop
Run the loop in order. Skip only when the task is truly trivial.
pd status
pd briefing
pd salvage --project <project> --limit 20
pd begin "<bounded task>"
pd advise <likely-path> --task "<plain-language task>"
pd note "Scope: <files>. Assumptions: <truth>. Validation: <commands>."
pd session files add <path>
pd guard status
pd guard install --mode enforce
git fetch origin
git rebase origin/main
pd sessions --all-worktrees
pd notes --limit 20
pd guard check --staged
pd note "Result: <change>. Validation: <evidence>. Remaining: <risk>."
pd done "<short outcome>"
The loop is not ceremony. It solves the actual failures that ruin multi-agent
work: stale runtime assumptions, invisible ownership, repeated archaeology,
ambiguous handoffs, and local green checks that do not match the installed app.
Decision Points
| Situation | Move |
|---|
| You will edit files | Start a session, leave a scope note, claim the smallest real surface. |
| Another session may overlap | Read notes/activity/claims, then route around or publish a coordination inconsistency. |
| The daemon or FleetBar looks wrong | Verify live process, socket, TCP URL, install root, and Fleet Control Center evidence. |
| Work was interrupted | Use salvage before restarting. Preserve the original intent when claiming. |
| A fact should be machine-queryable | Emit a tuple or schema-shaped handoff, not prose only. |
| A scarce resource is involved | Use a lock for promotion, migrations, generated assets, or release packaging. |
| A release surface changed | Update docs, README, website, skill, and package/export metadata in the same coherent slice. |
| You are about to commit, push, or deploy | Fetch the canonical remote branch, rebase/merge current work onto it, re-read live sessions/notes/activity, stage through pd add --dry-run -A then pd add -A, and run pd guard check --staged. Do not publish stale-base work. |
Procedural Cues
- If
pd status is green but the browser or FleetBar is stale, suspect install
root or daemon freshness before rewriting source.
- If a file looks unclaimed but a recent note says someone owns that surface,
trust the coordination story enough to inspect before editing.
- If your fix needs a phrase like "probably unrelated," separate it from the
slice until evidence says otherwise.
- If a note cannot tell the next agent what changed, what was validated, and
what remains, it is not a handoff yet.
- If a process-level command succeeded but the UI still looks broken, the work
is not visually verified.
- If two agents disagree about product shape, publish the conflict to
coordination:inconsistency instead of smoothing it away.
- If the user has to remind you to coordinate, the process has already failed:
pull against the canonical branch, read the live fleet, leave a Port Daddy
note, and make the durable instruction stronger before continuing.
- If Coordination Guard is absent or only advisory in a repo that expects
enforced claims, run
pd guard install --mode enforce or leave an explicit
blocker note with the exact failure.
FleetBar And Console Proof
FleetBar is the native Mac entry point. Fleet Control Center is the full
console. Use them when the task touches agents, readiness, launches, Shipwright,
resources, sorties, or operator-visible coordination.
Load deeper guidance only when needed:
references/fleetbar-and-console.md for product surfaces and screenshot
pointers.
references/coordination-theory.md for notes, channels, inboxes, tuples,
claims, locks, and actor bodies.
references/recovery-and-salvage.md for interrupted work.
references/distribution-and-installation.md for packaging and mirrors.
references/cli-reference.md for command families, aliases, generated docs
expectations, and claim-aware staging.
examples/build-now.md for things a user can build immediately with the
shipped examples.
Output Contracts
When leaving durable evidence, prefer the bundled schemas:
schemas/coordination-note.schema.json
schemas/agent-handoff.schema.json
schemas/validation-report.schema.json
Use the templates under templates/ when a note or handoff needs to be copied
into another channel, actor inbox, or PR description.
CLI Quick Reference
The agent surface uses semantic identities of shape project:stack:context
(e.g. port-daddy:cli:fix-flake, myapp:api:auth). Same identity always
hashes to the same port - port assignment is deterministic.
pd whoami
pd status
pd briefing
pd salvage --project <project>
pd begin "<task>" --identity <project>:<stack>:<context>
pd note "Scope: ..."
pd session files add <path>
pd done "<outcome>"
pd claim <project>:<stack>:<context>
pd release <id>
pd with-lock <name> -- <command>
pd dns <name>
pd integration ready <signal>
pd integration needs <signal>
pd sessions --all-worktrees
See references/api-reference.md for the full HTTP surface and
references/sdk-reference.md for the JS/TS SDK. MCP tools mirror the CLI:
begin_session, end_session_full, whoami, claim_port, release_port,
acquire_lock, add_note, pd_discover are the equivalents agents use
through the MCP protocol.
Self-Check
python3 skills/port-daddy-agent-skill/scripts/validate_port_daddy_agent_skill.py skills/port-daddy-agent-skill
bash skills/port-daddy-agent-skill/scripts/diagnose_port_daddy_agent_context.sh
The first command checks the bundle. The second samples the local Port Daddy
context so the agent can reason from live state instead of memory.
Git Discipline (NON-NEGOTIABLE)
Multi-agent repos collide on the staging area. Follow these rules without
exception. They come from a real incident — see references/git-discipline.md
for the post-mortem and the full ADR.
- Worktree for long-running background work. If your work takes more than ~10s between "start" and "commit", do it in a git worktree (
git worktree add ../$repo-$agent-$task). Disjoint trees make collisions structurally impossible.
- Never
git add -A / git add . / git add -u in agent code paths. Stage by explicit path. You can only commit what you authored.
- Pre-commit dirty-tree check. Before any
git commit, run git status --porcelain and abort with a named-paths error if anything dirty in the tree was authored elsewhere.
- Push only what you tagged. Tags are content-addressed; branches are shared mutable state across agents.
- Lock the staging area when sharing a tree by exception.
pd lock <repo>:git:write (or pd with-lock <repo>:git:write -- <command>) serializes the rare case where Rule 1 cannot apply. MCP-aware clients can call the acquire_lock tool with the same name.
A pre-commit hook that enforces Rule 3 belongs in any repo with multiple
agents writing to it. pd guard install --mode enforce is the reference.
Coordination Reflex
Whenever you work on a Port Daddy-protected project, ask yourself before
starting:
- How can I do this even better and in tandem with other agents?
- What background helpers would make this delightful instead of a slog? (See Useful Background Agents below.)
- What pheromone trail / tuple / actor message would future-me wish I had left?
- What ambient signal (file heat, recent notes, claim density) tells me where the danger is?
Coordination is cheap when it is durable and machine-readable. It is
expensive when it is conversational ("hey did you finish X?"). Default to:
pd note for scope, assumptions, touched files, validation, blockers, handoffs.
- Claims at the smallest real granularity — file region or symbol where possible.
- Tuples (
pd tuple out <space> <key>=<value>) for facts another agent might query.
- Pheromones (
pd pheromone deposit <surface>) for contention/heat signals.
- Actor inboxes for durable role-routed escalations (see Actor Roster below).
If the user has to remind you to coordinate, the process has already
failed: pull against the canonical branch, read the live fleet, leave a
durable note, and make the standing instruction stronger before continuing.
Actor Roster (universal Port Daddy concepts)
Port Daddy exposes a small set of durable actor inboxes. They are roles,
not processes — messages persist; the actor processes them on demand.
Use them when a concern crosses your slice's boundary.
| Actor | Owns | Message when... |
|---|
| Coxswain | claims, locks, surface integrity | A file conflict needs adjudication; a stale lock blocks promotion. |
| Navigator | roadmap state, work-slice routing, recovery ledger | A roadmap item finishes; the recovery ledger contradicts the live fleet. |
| Cartographer | priorities + ideas synthesis | A new idea should join the queue; priorities feel wrong. |
| Lookout | release-surface drift | Source shipped without the matching docs / CLI help / website / version stamp. |
| Quartermaster | spawn discipline, model readiness, fleet spend | A persona uses an over-powered model; spawn count rises without proportional value. |
Routing one-liner: file → Coxswain. Roadmap → Navigator. Priority → Cartographer. Drift → Lookout. Spawn → Quartermaster.
Useful Background Agents (suggestion menu)
Port Daddy makes it cheap to keep several focused background agents running.
When you start meaningful work on a project, scan this list and propose
spawning the ones that fit the project's gaps. The user picks; you draft
the YAML in pd-fleet.yml so they can review before launch.
| Suggested agent | When to propose |
|---|
| Test gardener | Project has tests but new features ship without them |
| Documentation steward | API/CLI surface changes faster than docs |
| Roadmap cartographer | Many half-built things; ideas escape into Slack/issues |
| Architecture archivist | Codebase has accreted faster than the architecture doc |
| Marketing voice | Public-facing project with infrequent releases |
| Prototype scout | "What if?" ideas pile up unbuilt |
| Feature stitcher | Independent features could compose into something new |
| Fleet observer | Background agents drift, stop firing |
| Post-mortem proposer | Multi-agent friction or "wow we fought dumb git shit" moments |
| Adversarial QA | Code lands without thinking about how it breaks |
| Skill auditor | Project ships skills (windags-skills, .claude/skills, etc.) |
These are not a fixed menu. Always think creatively about what this
specific project needs, and propose new agent shapes as the project shape
shifts. The proposal protocol is small: write the agent shape into a draft
block in pd-fleet.yml, leave a pd note summarizing what it would do,
and message Cartographer with a one-line recommendation. The user approves
before anything starts firing.
Catalog-First Reflex (use the WinDAGs MCP)
There are 600+ specialist skills in the WinDAGs catalog. Most coding tasks
have a skill written for them already. Search the catalog before you
start, not after you're stuck.
windags_skill_search "<one-line description of what you're about to do>"
windags_skill_graft <skill-id-1> <skill-id-2>
Default reflexes:
- Before every meaningful task — one
windags_skill_search call. If a top result is >0.4 score, graft it.
- When you find yourself reasoning about a domain you don't own — the catalog has a skill for that. Search.
- When a skill would help on this project long-term — install it into the project's
.claude/skills/ and leave a pd note recording the install.
- When you used a skill and it was wrong / stale — that's a Maintain-These-Skills moment (next section).
If you go a whole session without a single windags_skill_search, that's
probably a missed leverage opportunity.
Maintain These Skills (living documents)
The skills you read are not finished products. They are living instructions
that improve when their users update them. When you discover wisdom that
would have helped past-you, write it back into the skill that should have
carried it.
When to update:
- Anti-pattern discovery — you hit a failure mode that should have been a warning. Add it to the Anti-Patterns section.
- Tooling change — Port Daddy ships a new command, deprecates an old one, or changes a flag. Update the relevant section +
references/cli-reference.md.
- Decision-table gap — a Situation→Move row would have saved you 10 minutes. Add it to the Decision Table.
- Feedback pattern — if
pd feedback reveals recurring friction, propose the systemic fix in the relevant skill section.
When the update is internal-only (port-daddy contributors), update
port-daddy-internal-dev instead. Don't mix internal wisdom into the
public skill. If unsure: would an agent on a non-port-daddy project
benefit? Yes → public. No → internal.
After landing, pd actor cartographer --message "Skill update: <one-line>." so the wisdom propagates.
Feedback Loop (you owe the user this)
Port Daddy is a tool for the user. Tools improve when their users tell the
maintainer where the friction is. Drop feedback after every Port Daddy session,
even briefly.
Primary surface — CLI bare form (auto-derives slug, droppedBy, surface):
pd feedback "salvage worked first try; --project arg syntax was guessable but undocumented"
pd feedback "got confused: pd briefing showed two coxswain actors; expected one" --high
pd feedback "worktree creation cost 30s on first run; would skip it for sub-minute tasks" --surface CLI
pd feedback recent
pd feedback mine
pd feedback ack <id>
The bare form derives a kebab-case slug from the message, picks
droppedBy from the active session/agent context (falls back to
cli:$USER), and infers surface from the CWD path segment. Severity
shortcuts --critical / --high / --medium / --low work in lieu of
--severity X.
Equivalent MCP surface — the tool is named drop_feedback and
requires slug + summary (plus an agent identifier as droppedBy):
drop_feedback({
slug: "briefing-shows-duplicate-coxswain",
summary: "got confused: pd briefing showed two coxswain actors; expected one",
droppedBy: "<your agent id>",
severity: "high",
surface: "CLI"
})
The user reads these. They are not noise.
If you skipped a step in the loop (no pd note, no claim, no salvage
check), own up to it in the feedback with the reason:
pd feedback "SKIPPED: pd salvage. Reason: I judged the task too small. In hindsight: should not have skipped." --hook "skipped-coordination-step"
Anti-Patterns
Treating Coordination As Optional
Detection: Edits land without pd note, claims, or session begin.
Fix: The Operating Loop is the floor, not the ceiling. Skipping it is a bug to own up to in pd feedback, not a shortcut.
Sweeping Up Peers' Work With git add -A
Detection: Background agent's commit contains files it did not author.
Fix: Per Git Discipline above — worktree, explicit-path staging, dirty-tree pre-check.
Triggering incident: windags-skills bb34efa. Force-push was disallowed; the audit trail had to be corrected via tagging instead.
Spawning A New Agent Where A Note Would Do
Detection: The fleet shows N+1 agents but the actual work is one bounded change.
Fix: Default to a session and a note. Spawn only when the work decomposes into independently-running pieces.
Silent Friction
Detection: A session ends with pd done, no pd feedback.
Fix: End every session with feedback, even if it's "no friction this time."
Quality Gates (you, the agent following this skill)