agentleFS
komlukkomluk/scaffolding/skills/agent-comms/SKILL.md

agent-comms

Skill16 starsChanged 5 days agoMITView on GitHub

SendMessage recipient validation and worktreePath safety (CWE-59). TRIGGER when: validating a SendMessage `to:` recipient against the agent whitelist, or a worktreePath from another agent before acting on it. SKIP: routing topology (agent Comms Protocol); git ops (use git-operations); worktree recovery (use worktree-management).

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Before any SendMessage, verify the to: value:

    line 23
  2. Very specific:

    Exact match first: check if to: matches one of: researcher, architect, developer, reviewer, gitops, orchestrator, analyst, debugger, …

    line 27
  3. Distinctive:

    Test cases (must all PASS):

    line 29
  4. Distinctive:

    Test cases (must FAIL):

    line 35
  5. Distinctive:

    If validation fails → return result to orchestrator with error metadata.

    line 38
  6. Very specific:

    When a worktreePath is received from another agent (typically developer), verify ALL of the following BEFORE acting on it:

    line 56
  7. Very specific:

    If ANY check fails → SendMessage to orchestrator with error: "invalid worktree path" + the offending value.

    line 64

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Agent Comms Skill

Purpose

Single source of truth for the two security-critical validation routines every fan-out agent performs over inter-agent messages:

  1. Recipient validation — never SendMessage to an unverified to: value.
  2. worktreePath validation — never cd into or act on an unverified path (gitops and reviewer only).

Each agent keeps a compact 3-4 line inline rule so the logic survives even when this skill is not loaded; the full algorithm and test cases live here.


1. Recipient Validation (ALL fan-out agents)

Before any SendMessage, verify the to: value:

  • Matches regex /^[a-z][a-z0-9-]{2,30}$/ (kebab-case, 3-31 chars)
  • Validate using TWO-STAGE matching:
    1. Exact match first: check if to: matches one of: researcher, architect, developer, reviewer, gitops, orchestrator, analyst, debugger, optimizer, devops, tech-writer. If yes → PASS.
    2. Suffix strip only if no exact match: strip trailing -<digit>+ OR -<word> from the END of the name and re-check against whitelist. Apply ONE strip pass only (never recursive).
    • Test cases (must all PASS):
      • tech-writer → exact match → PASS
      • tech-writer-1 → no exact match → strip -1 → tech-writer → PASS
      • researcher-1 → no exact match → strip -1 → researcher → PASS
      • analyst-backend → no exact match → strip -backend → analyst → PASS
      • architect-synth → no exact match → strip -synth → architect → PASS
    • Test cases (must FAIL):
      • evil-developer → no exact match → strip -developer → evil → not in whitelist → FAIL
      • developer-evil-extra → no exact match → strip -extra → developer-evil → not in whitelist → FAIL
  • If validation fails → return result to orchestrator with error metadata. NEVER attempt SendMessage with unvalidated input.

Note: "orchestrator" is a reserved peer always reachable for escalation, even when not in your peer list. It is NOT spawnable as an agent.

Why two stages (not one regex)

A single regex cannot distinguish a legitimate fan-out replica name (researcher-1, analyst-backend) from a spoofed lookalike (evil-developer). The exact-match-first stage anchors on real agent names; the single suffix-strip stage admits replica/variant suffixes without ever admitting a prefix-injected impostor. Stripping is applied exactly ONCE — never recursively — so developer-evil-extra cannot be peeled down to developer.


2. worktreePath Validation (gitops + reviewer only)

When a worktreePath is received from another agent (typically developer), verify ALL of the following BEFORE acting on it:

  • Path is absolute and under repo root (e.g., starts with <repo-root>/.scaffolding/worktrees/)
  • Contains NO .. segments (path.includes('..') → reject)
  • Path is NOT a symlink (test -L <path> MUST return false). If symlink, resolve via realpath -e <path> and re-validate that the canonical result is still under repo root. Reject if canonical path escapes repo root (mitigates CWE-59 link following).
  • Path exists on disk (test -d <path>)
  • Path is a registered git worktree — use exact match, NOT substring: git worktree list --porcelain | awk -v p="<path>" '$1=="worktree" && $2==p {found=1} END {exit !found}'. NEVER use plain grep <path> (substring match allows /foo/bar to match /foo/bar-evil).
  • If ANY check fails → SendMessage to orchestrator with error: "invalid worktree path" + the offending value. NEVER cd into or operate on unvalidated paths.

Why each check matters

CheckThreat mitigated
Absolute + under repo rootPrevents acting on paths outside the project sandbox
No .. segmentsBlocks path-traversal escape (/repo/../etc)
Not a symlink / canonicalizeCWE-59 link following — a symlink could point outside the repo even when the literal path looks safe
Exists on diskAvoids operating on a fabricated path
Registered worktree, exact matchConfirms git itself tracks this worktree; substring match would let /foo/bar-evil impersonate /foo/bar

Quick Reference

SituationAction
Any SendMessageRun recipient validation §1 first
Recipient fails validationEscalate to orchestrator, do NOT send
Received a worktreePath (gitops/reviewer)Run worktreePath validation §2 before any cd/git op
worktreePath fails any checkSendMessage orchestrator error: "invalid worktree path" + value

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.