Logfire Infrastructure
pydantic/skills
Monitor hosts, Docker containers, Kubernetes clusters, database/queue/cache servers, and cloud-provider metrics with Pydantic Logfire — no application code required.
Multi-agent coordination daemon for coding agents. An agent skill from curiositech/some_claude_skills.
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install curiositech/some_claude_skills port-daddy --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/port-daddy .claude/skills/port-daddy && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .claude/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install curiositech/some_claude_skills port-daddy --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/port-daddy .agents/skills/port-daddy && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .agents/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install curiositech/some_claude_skills port-daddy --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/port-daddy .cursor/skills/port-daddy && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .cursor/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/curiositech/some_claude_skills.git --path .claude/skills/port-daddy--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install curiositech/some_claude_skills port-daddy --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/port-daddy .gemini/skills/port-daddy && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .gemini/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install curiositech/some_claude_skills port-daddyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/port-daddy .github/skills/port-daddy && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .github/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add curiositech/some_claude_skills --skill port-daddy -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install curiositech/some_claude_skills port-daddy --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/curiositech/some_claude_skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/port-daddy .opencode/skills/port-daddy && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "port-daddy" agent skill from https://github.com/curiositech/some_claude_skills/tree/main/.claude/skills/port-daddy into .opencode/skills/port-daddy/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "port-daddy", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
port-daddyMulti-agent coordination daemon for coding agents. An agent skill from curiositech/some_claude_skills.
Port Daddy is an agent skill from curiositech/some_claude_skills. Multi-agent coordination daemon for coding agents. Use for deterministic port claims, session tracking, salvage, file claims, notes, pub/sub, tuple-space coordination, background fleets, and debugging multi-agent failures across Claude Code, Codex, Gemini CLI, Cursor, or Windsurf. NOT for production deploy orchestration, Docker or Kubernetes networking, or cloud service discovery.
Its SKILL.md is about 6.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 32 other files, including scripts and assets (for example `.claude-plugin/plugin.json`, `assets/pd-fleet.starter.yml` and `assets/session-note.template.md`).
It sits in DevOps & Cloud, covering Multi-agent orchestration, Event-driven systems and Container orchestration. It works with Docker and Kubernetes. The repository describes itself as: Claude skills that make my life easier. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6713fc7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Port Daddy loads about 6.2k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 2,348 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from curiositech/some_claude_skills at commit 6713fc7, republished under its MIT licence (© curiositech). 2,348 words, ~6,151 tokens.
.claude/skills/port-daddy/SKILL.md (or your agent's skills folder). This skill also uses 28 other files; get the full folder from GitHub.You're an AI agent. You're about to start a dev server. Which port? 3000? Taken. 3001? Another agent grabbed it. You pick a random port. Now nothing can find your server.
Meanwhile, another agent is editing the same file you are. Neither of you knows. You'll both commit. One of you loses work.
A third agent crashed 20 minutes ago — halfway through a migration. Its work is orphaned. Nobody knows.
Port Daddy solves all of this in one daemon.
Read top-to-bottom. The first matching leaf is your answer. If you skip the daemon-up check, every subsequent decision is meaningless.
flowchart TD
A[I want to do something coordination-shaped] --> Up{pd status<br/>== running?}
Up -- no --> Down[examples/06-debug-daemon-down.md]
Up -- yes --> Scope{Scope?}
Scope -- single agent, no shared state --> Out[Out of scope: just code.<br/>NOT for this skill.]
Scope -- this agent, this session --> Life[Lifecycle path]
Scope -- two+ agents, same repo --> Coord[Coordination path]
Scope -- background cadence / fleet --> Fleet[Fleet path]
Scope -- many agents, same harbor --> Swarm[Swarm path]
Life --> L1{What do I need?}
L1 -- "session boundary" --> L1a[pd begin / pd done<br/>schemas/note-shape.md]
L1 -- "deterministic port" --> L1b[pd claim {project}:{stack}:{ctx}<br/>schemas/semantic-identity.md<br/>examples/07-port-collision.md]
L1 -- "audit trail" --> L1c[pd note --type ...<br/>assets/session-note.template.md]
L1 -- "what happened?" --> L1d[pd sitrep / catch_me_up MCP]
Coord --> C1{Failure mode I'm preventing?}
C1 -- "two agents edit same file" --> C1a[pd session files claim<br/>examples/02-two-agents-same-file.md]
C1 -- "must be exclusive" --> C1b[pd with-lock<br/>or pd lock + pd unlock]
C1 -- "agent-to-agent signal" --> C1c[pd pub + pd watch]
C1 -- "DM a specific agent" --> C1d[pd inbox send<br/>or talk_to_agent MCP]
C1 -- "agent died, finish their work" --> C1e[pd salvage claim<br/>schemas/salvage-entry.md<br/>examples/03-salvage]
Fleet --> F1{Fleet exists?}
F1 -- "no" --> F1a[pd fleet init + edit pd-fleet.yml<br/>assets/pd-fleet.starter.yml<br/>examples/04-fleet-from-zero.md]
F1 -- "yes, broken" --> F1b[scripts/fleet-validate.sh<br/>schemas/pd-fleet.schema.md]
F1 -- "yes, want it daemon-managed" --> F1c[POST /fleet/register<br/>survives terminal close]
F1 -- "yes, want to chain agents" --> F1d[on_success: publish channel<br/>+ declare in channels:]
Swarm --> S1{Shape of the data?}
S1 -- "typed records, multi-reader" --> S1a[pd tuple out + pd tuple rd<br/>schemas/tuple-shape.md]
S1 -- "exactly-once work" --> S1b[pd tuple in<br/>work-stealing<br/>examples/05-tuple-swarm-handoff.md]
S1 -- "ambient gradient / heat" --> S1c[pd pheromone spray<br/>schemas/pheromone-signal.md]
S1 -- "broadcast, ephemeral" --> S1d[pd pub on a harbor channel]The five questions, in order:
pd status. If not, you have no coordination at all. Fix this first.tuple rd and pub are fan-out; tuple in and lock are exactly-one-winner. Get this wrong and you either drop work or duplicate it.When something is already broken, jump straight here.
| Symptom | Likely cause | First diagnostic | Fix / runbook |
|---|---|---|---|
pd <anything> → Connection refused | Daemon not running | pd status | examples/06-debug-daemon-down.md |
pd status hangs forever | Daemon wedged on event loop | lsof ~/.port-daddy/daemon.sock; check daemon.log | kill -9 $(cat ~/.port-daddy/daemon.pid) then pd start |
pd claim returns the "wrong" port | Identity-deterministic by design — it's correct | pd find <identity> to confirm | Use a different identity context, not a different port |
pd begin says session already active | Stale session for this PID | pd whoami | pd done then re-begin, or continue in the existing one |
pd session files claim says conflict | Another agent already claimed it | pd swarm_awareness or read the warning | examples/02-two-agents-same-file.md |
| Fleet agent never fires on commit | fleet.name != basename(projectDir) (most common) | scripts/fleet-validate.sh | Fix fleet.name; re-pd fleet up |
| Fleet agent fires but does nothing | prompt is too vague, or allowedTools blocks needed action | pd spawned shows it ran briefly; check its log | Tighten the prompt; widen the allowlist |
pd salvage shows huge backlog | Stale entries from agents that crashed long ago | pd salvage --project <p> | Triage with scripts/salvage-triage.sh; dismiss obviously-dead entries |
pd tuple rd returns nothing | Wrong harbor or pattern shape | pd tuple scan --harbor <h> | schemas/tuple-shape.md for grammar |
pd note writes succeed but pd notes returns empty | Notes encrypted but key changed | ls -la ~/.port-daddy/master.key perms must be 0600 | Restore key from backup; otherwise the notes are unreadable |
| Pheromone always reads near-zero | Decay outpacing spray cadence | pd pheromone show --table <t> --id <i> | Either spray more often or raise --strength; pheromones are not a database |
Two agents both tuple in succeed on same tuple | Bug — file feedback | .spark/feedback/$(date +%F)-tuple-double-take.md | The daemon should atomic-take; this is a regression |
This file is the L1/L2 entry. Don't paste deep references inline — load on demand:
| Need | Read |
|---|---|
| Worked end-to-end scenario | examples/INDEX.md (8 scenarios: bootstrap, conflict, salvage, fleet, swarm, daemon-down, port-collision) |
| Authoritative contract / data shape | schemas/INDEX.md (semantic-identity, pd-fleet schema, tuple, note, pheromone, salvage, MCP tools) |
| One-shot helper to run | scripts/ (preflight, session-resume, salvage-triage, fleet-validate, agent-handshake) |
| Template to copy and edit | assets/ (pd-fleet.starter.yml, .portdaddyrc.starter, session-note.template.md) |
| Full HTTP API (93+ endpoints) | references/api-reference.md |
| JavaScript SDK | references/sdk-reference.md |
| Advanced multi-agent patterns | references/multi-agent-patterns.md |
.portdaddyrc per-project config | references/portdaddyrc-spec.md |
# 1. Start your session — ALWAYS do this first
pd begin "Building auth module"
# 2. Claim a port — deterministic, never conflicts
PORT=$(pd claim myapp:api:main -q)
# 3. Leave breadcrumbs for other agents
pd note "JWT validation working, moving to refresh tokens"
# 4. Check who else is working here
pd salvage --project myapp # Any dead agents to rescue?
# 5. End cleanly
pd doneWithout Port Daddy:
With Port Daddy:
Start here (high-level, one call does many things):
| Tool | What It Does |
|---|---|
begin_session | Register as an agent + start a session atomically |
end_session_full | End session + unregister atomically |
whoami | What agent am I? What session? What files do I own? |
catch_me_up | What happened while I was away? Recent activity, notes, dead agents |
swarm_awareness | Who else is working here? All agents, sessions, file claims |
file_heat | Which files are agents fighting over? Pheromone-based contention map |
talk_to_agent | Send a direct message to a specific fleet agent by name |
claim_port | Get a deterministic port for a service identity |
add_note | Leave an immutable breadcrumb (notes can never be deleted) |
acquire_lock | Distributed lock for critical sections |
spawn_agent | Launch a background AI agent with a task |
fleet_init | Set up a background agent fleet with git hooks and pd-fleet.yml |
pd_discover | Find additional tools by category |
Tuple space tools (shared swarm memory):
| Tool | What It Does |
|---|---|
tuple_out | Write a typed tuple to the shared space (harbor-scoped) |
tuple_read | Read tuples matching a pattern (non-destructive) |
tuple_take | Atomically read + remove tuples matching a pattern |
tuple_scan | List all tuples in a harbor or global space |
tuple_count | Count tuples matching a pattern |
Discover more tools by category:
Call pd_discover with a category name: magic, session-lifecycle, ports, sessions, notes, locks, messaging, agents, inbox, webhooks, integration, dns, briefing, tunnels, projects, changelog, activity, system, tuples, pheromone
Integration signals: Use integration ready and integration needs to coordinate service dependencies. When your service is ready, signal it so other agents can proceed.
project:stack:contextEvery service gets a semantic name. The name IS the port — deterministic hashing means the same identity always maps to the same port. Identities are indexed in an in-memory Adaptive Radix Tree for O(k) lookups (where k is key length), replacing SQL LIKE scans.
pd claim myapp:api:main # Always gets port 3142 (or whatever hash gives)
pd claim myapp:api:feature-auth # Different port, same project
pd find 'myapp:*' # Prefix search — resolves through the trie, not SQL
pd find 'myapp:*:main' # Wildcard — all stacks with context "main"Sessions track what each agent is doing. Notes are immutable — once written, they can never be edited or deleted. This creates an audit trail that agents and humans can trust. Notes are encrypted at rest with AES-256-GCM (master key at ~/.port-daddy/master.key, auto-generated on first boot).
pd begin --identity myapp:api --purpose "Building auth"
pd note "Found SQL injection in token validation"
pd note "Patched. Tests green."
pd doneWhen an agent crashes, its session enters the salvage queue. Another agent can claim and continue the work:
pd salvage --project myapp # See dead agents' context
pd salvage claim dead-agent-42 # Pick up their workIMPORTANT: Always check pd salvage at the start of a session. You might be able to continue where a crashed agent left off instead of starting from scratch.
pd session files claim src/auth/*.ts
# Another agent tries the same file:
pd session files claim src/auth/login.ts
# → CONFLICT: claimed by agent 'myapp:api'Claims are advisory — they warn, don't lock. Hard locks cause deadlocks. Advisory claims cause conversations.
Agents signal each other through channels:
# Agent A finishes database setup
pd pub myapp:events "database-ready"
# Agent B was watching
pd watch myapp:events --exec "npm run migrate"For operations that truly must be exclusive:
pd with-lock deployment -- npm run deploy
# Or manually:
pd lock db-migration --ttl 300
pd unlock db-migrationHigh-frequency agent communication over a Unix domain socket with MessagePack encoding. The IPC channel sits alongside the HTTP API — agents that need low-latency communication (heartbeats, pheromone sprays, pub/sub publish) use IPC automatically when the daemon is running.
Key properties:
[type:1][conv_id:4][payload_len:2] + MessagePack payloadheartbeat(), pheromoneSpray(), publish() auto-use IPC when availableSocket location: ~/.port-daddy/daemon.ipc
Security hardening:
You don't need to use IPC directly. The SDK and CLI use it transparently for hot-path operations.
Declare agents in YAML. They fire on git commits, cron schedules, or pub/sub messages. Auto-respawn on crash with circuit breaker.
pd fleet init # Creates pd-fleet.yml + git hook
pd fleet up # Starts the fleet
git commit -m "fix auth" # QA, docs, cartographer fire automatically
pd fleet status # What is the fleet doing?
pd fleet down # Stop the fleetThe starter fleet includes: QA (bug hunting), Documentarian (docs sync), Cartographer (roadmap tracking), Spark (idea generation), Spider (cross-feature connections).
# pd-fleet.yml
fleet:
name: myapp
harbor: "{project}:fleet"
agents:
qa:
trigger: git:committed # React to pub/sub events
respawn: true # Auto-restart on crash
max_respawns: 3 # Circuit breaker
backend: claude-cli
allowedTools: "Read,Grep,Glob,Bash(npm test*)"
prompt: "Review the last commit for bugs..."
gardener:
schedule: "*/10 * * * *" # Or run on a cron schedule
backend: custom
prompt: "git status --porcelain"
on_success: publish git:status # Chain agents via channels
channels:
git:committed:
description: "Fired after a successful commit"
consumers: [qa]Key features:
claude-cli, ollama, gemini, aider, custom{project}) resolve from the YAML contexton_success: publish <channel> chains agents via pub/sub (DAG topology validated at startup)pd fleet up — all agents share a semantic namespacerespawn: true and max_respawns circuit breakerAgents write typed tuples to a shared space. Other agents query by pattern. Based on Linda (Gelernter, 1985). Harbor-scoped for fleet isolation. TTL for auto-expiry.
# Spider writes a connection it discovered
pd tuple out '["connection", "trie+pubsub=routing", "spider", 0.9]' --harbor myapp:fleet
# Spark reads all connections with confidence > 0.7
pd tuple rd '["connection", "*", "*", ">0.7"]' --harbor myapp:fleet
# Take (remove) a processed task from the space
pd tuple in '["task", "build-auth", "pending"]'
# Scan all tuples in a harbor
pd tuple scan --harbor myapp:fleet
# Count tuples
pd tuple count --harbor myapp:fleetPattern matching: exact values, * wildcard, >N/<N numeric comparisons, myapp:* semantic identity prefixes.
HTTP API:
POST /tuples — write a tuple (body: { tuple, harbor?, writtenBy?, ttl? })GET /tuples — read by pattern (query: pattern, harbor, limit)DELETE /tuples — take (destructive read) by patternGET /tuples/scan — list all tuples in a harborGET /tuples/count — count tuplesAgents spray numeric signals (0-1) onto entities. Signals decay exponentially over time at read, creating ambient awareness without polling.
# Spray a signal onto a service
pd pheromone spray --table services --id myapp:api --key urgency --strength 0.8
# Sniff pheromone values (applies read-time decay)
pd pheromone sniff --table services --id myapp:api
# View file heat map (which files are most contested)
pd pheromone files
# List all non-zero pheromone trails
pd pheromone listUse cases: file contention detection, agent reputation scoring, hot-path identification, adaptive thresholds.
HTTP API:
POST /pheromone/spray — set a pheromone value (body: { table, id, key, strength })GET /pheromone/:table/:id — read pheromone values (applies read-time decay)GET /pheromone — list all non-zero pheromonesGET /pheromone/files — file heat map from session file claims (query: path, depth)The Arbiter monitors every state transition against 6 formally-derived invariants from the TLA+ specification:
In strict mode, critical violations trigger man-overboard salvage.
pd arbiter status # Check rules and violation count
pd arbiter violations # List recorded violationsAll runtime files live in ~/.port-daddy/ (not /tmp/). This eliminates symlink attacks, survives /tmp/ cleanup, and keeps permissions user-private (0700 directory).
| File | Purpose |
|---|---|
~/.port-daddy/daemon.sock | HTTP Unix socket (CLI, SDK, MCP) |
~/.port-daddy/daemon.ipc | Binary IPC socket (agent hot path) |
~/.port-daddy/daemon.pid | PID file |
~/.port-daddy/daemon.port | TCP port file (dashboard discovery) |
~/.port-daddy/master.key | AES-256-GCM master key for note encryption |
Override via environment variables: PORT_DADDY_SOCK, PORT_DADDY_IPC, PORT_DADDY_PORT_FILE.
| Command | Purpose |
|---|---|
| Session Lifecycle | |
pd begin / pd done | Start/end session (agent registration included) |
pd whoami | Current agent and session context |
pd note / pd notes | Write/read immutable notes |
| Port Management | |
pd claim / pd release | Claim/release deterministic ports |
pd find | Wildcard service search (trie-accelerated) |
| Coordination | |
pd lock / pd unlock | Distributed locks |
pd with-lock | Run command under lock with auto-release |
pd pub / pd watch | Pub/sub messaging |
pd session files claim | Advisory file claims |
| Fleet & Agents | |
pd fleet init | Create pd-fleet.yml + git hook |
pd fleet up/down/status | Start/stop/inspect the fleet |
pd spawn / pd spawned | Launch/list background agents |
pd spawn kill | Kill a spawned agent |
pd salvage | Dead agent recovery |
| Swarm Memory | |
pd tuple out/rd/in | Write/read/take tuples |
pd tuple scan/count | List/count tuples |
pd pheromone spray | Set ambient signal on an entity |
pd pheromone sniff | Read pheromone values (with decay) |
pd pheromone list | List all non-zero pheromones |
pd pheromone files | File heat map |
| System | |
pd status | Daemon health |
pd version | Version and code hash |
pd arbiter status | Invariant enforcement status |
pd arbiter violations | List recorded violations |
pd dev start/stop/status | Isolated dev daemon (port 9877) |
| Problem | Solution |
|---|---|
| Dev server port conflict | pd claim myapp:api -q |
| Need to coordinate with other agents | pd begin + pd session files claim |
| Agent-to-agent signaling | pd pub + pd watch |
| Direct message to a specific agent | talk_to_agent MCP tool or pd inbox send |
| Background automation | pd fleet init + pd fleet up |
| Share knowledge across agents | pd tuple out / pd tuple rd |
| Track "hotness" of resources | pd pheromone spray / sniff |
| See file contention at a glance | file_heat MCP tool or pd pheromone files |
| Crashed agent left work behind | pd salvage |
| Exclusive operations (deploys, migrations) | pd with-lock |
| What happened while I was away? | catch_me_up MCP tool |
| Who else is working right now? | swarm_awareness MCP tool |
| Check for invariant violations | pd arbiter status |
Symptom: Connection refused on any pd command
Fix: pd start or pd install (installs as launchd service, auto-starts on login)
Symptom: You get a port but it's the "wrong" one
This is correct behavior. Same identity = same port, always. If you need a different port, use a different identity context: myapp:api:feature-x instead of myapp:api:main.
Symptom: pd begin says a session exists
Fix: Call pd whoami to see the current session. Either pd done the old one or continue working in it.
Symptom: Another agent claimed files you need
Fix: This is the system working. Check pd swarm_awareness to see who owns what. Coordinate via pd pub or work on different files.
Symptom: IPC-related errors in logs
Fix: The SDK falls back to HTTP automatically. IPC is an optimization, not a requirement. Check that ~/.port-daddy/daemon.ipc exists and has correct permissions (should be user-only, created by the daemon).
Before declaring "done" on any PD-mediated work:
pd whoami returns one).progress note per primitive milestone.handoff note exists if the work is ending mid-stream (salvage-friendly).pd done was called — leaving sessions open is the most common dogfooding violation.© curiositech, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 28 other files (scripts, assets) in .claude/skills/port-daddy of curiositech/some_claude_skills.
Open the folder on GitHubat commit 6713fc7
Port Daddy next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Port Daddy this skillcuriositech/some_claude_skills | 243 | — | ~6.2k | Automated safety check: Pass | MIT | |
| Logfire Infrastructurepydantic/skills | 140 | — | ~1.8k | Automated safety check: Pass | MIT | |
| LangBot Deployment Guidelangbot-app/LangBot | 18k | — | ~1.2k | Automated safety check: Notes | Apache-2.0 | |
| Build Openshell Mxc WindowsNVIDIA/OpenShell | 16k | — | ~4.9k | Automated safety check: Pass | Apache-2.0 | |
| Devopsnicepkg/auto-company | 194 | 2 repos | ~814 | Automated safety check: Pass | MIT | |
| Debug Openshell ClusterNVIDIA/OpenShell | 16k | — | ~19k | Automated safety check: Notes | Apache-2.0 |
pydantic/skills
Monitor hosts, Docker containers, Kubernetes clusters, database/queue/cache servers, and cloud-provider metrics with Pydantic Logfire — no application code required.
langbot-app/LangBot
Deploys and configures a LangBot instance with Docker Compose or Kubernetes, covering config.yaml, the Box sandbox runtime, the plugin runtime and the global API key.
NVIDIA/OpenShell
Maintain and validate OpenShell's build-only Windows MSVC lane for x64 and ARM64.
nicepkg/auto-company
Deploy to Cloudflare (Workers, R2, D1), Docker, GCP (Cloud Run, GKE), Kubernetes (kubectl, Helm).
NVIDIA/OpenShell
Debug why an OpenShell gateway deployment is unhealthy, unreachable, or unable to create sandboxes.
runzhliu/deepseek-harness-docker
Deploy, configure, verify, upgrade, and troubleshoot DeepSeek Harness with the community Docker, Docker Compose, rootless Podman, and Helm runtime, including the built-in Chromium/noVNC browser…
curiositech/some_claude_skills
Detect crisis signals in user content using NLP, mental health sentiment analysis, and safe intervention protocols.
curiositech/some_claude_skills
End-to-end form handling with react-hook-form, Zod schemas, validation patterns, error messaging, field arrays, and multi-step wizards.
curiositech/some_claude_skills
Build production CI/CD pipelines with GitHub Actions. An agent skill from curiositech/some_claude_skills.
curiositech/some_claude_skills
Expert in background job processing with Bull/BullMQ (Redis), Celery, and cloud queues.
curiositech/some_claude_skills
Strategic analyst that maps competitive landscapes, identifies white space opportunities, and provides positioning recommendations.
curiositech/some_claude_skills
Build production computer vision pipelines for object detection, tracking, and video analysis.
Works with
Categories
Multi-agent coordination daemon for coding agents. An agent skill from curiositech/some_claude_skills. Port Daddy is an agent skill from curiositech/some_claude_skills. Multi-agent coordination daemon for coding agents.
Port Daddy fits situations like: deterministic port claims; session tracking; tuple-space coordination; background fleets.
Run `npx skills add curiositech/some_claude_skills --skill port-daddy -a claude-code`. Or copy the skill folder (.claude/skills/port-daddy in curiositech/some_claude_skills) into .claude/skills/port-daddy in your project. Claude Code loads it when a task matches its description.
Run `npx skills add curiositech/some_claude_skills --skill port-daddy -a codex`. Or copy the skill folder (.claude/skills/port-daddy in curiositech/some_claude_skills) into .agents/skills/port-daddy in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add curiositech/some_claude_skills --skill port-daddy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/port-daddy, .gemini/skills/port-daddy, .github/skills/port-daddy and .opencode/skills/port-daddy in your project.
Going by SKILL.md and its folder, Port Daddy needs the command-line tools its instructions call (git). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Port Daddy is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.2k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Port Daddy: Logfire Infrastructure (pydantic/skills, 140 stars), LangBot Deployment Guide (langbot-app/LangBot, 18k stars), Build Openshell Mxc Windows (NVIDIA/OpenShell, 16k stars) and Devops (nicepkg/auto-company, 194 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
curiositech (a GitHub organization) maintains it in curiositech/some_claude_skills, which has 243 GitHub stars. The repository holds 95 skills in this directory. The repository was last updated on September 6, 2026.
Source: curiositech/some_claude_skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.