gathering-security
Gathering Security 🌲🕷️🦝🐢
The drum echoes in the shadows. But this time, the conductor stands at the clearing's edge — not doing the work, but orchestrating it. Each animal arrives with fresh eyes, reads its own instructions, and works with full adversarial attention. The Spider weaves auth with precision. The Raccoon rummages with suspicion. The Turtle hardens with patience. Three isolated minds, zero shared sympathy, one fortress built right.
When to Summon
- Implementing authentication systems
- Adding OAuth or session management
- Security auditing before launch
- After security incidents
- Preparing for production deployment
- When auth, security audit, and deep hardening must work together
- Building a new feature that handles sensitive data
- Hardening existing code for defense in depth
IMPORTANT: This gathering is a conductor. It never writes code or fixes vulnerabilities directly. It dispatches subagents — one per animal — each with isolated context and an intentional model. The conductor only manages handoffs and gate checks.
The Gathering
SUMMON → DISPATCH → GATE → DISPATCH → GATE → DISPATCH → GATE → FORTIFY
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
Spec Spider Check Raccoon Check Turtle Check Final
(self) (opus) ✓ (sonnet) ✓ (opus) ✓ Verify
Animals Dispatched
| Order | Animal | Model | Role | Fresh Eyes? |
|---|---|---|---|---|
| 1 | 🕷️ Spider | opus | Weave authentication | Yes — sees only the security spec |
| 2 | 🦝 Raccoon | sonnet | Audit secrets, vulns, dead code | Yes — sees only file list from Spider |
| 3 | 🐢 Turtle | opus | Adversarial hardening | Yes — sees file list only, not Spider's reasoning |
Reference: Load references/conductor-dispatch.md for exact subagent prompts and handoff formats
Phase 1: SUMMON
The drum sounds. The shadows shift...
The conductor receives the security request and prepares the dispatch plan:
Clarify the Security Work:
- Adding new auth provider? (OAuth, SSO)
- Securing routes and APIs?
- General security audit?
- Deep security hardening?
- Post-incident cleanup?
- Pre-production hardening?
Selective Mobilization:
Not every gathering needs all three animals:
| Situation | Animals Needed |
|---|---|
| New auth system + full security | All three: Spider → Raccoon → Turtle |
| Auth already exists, need hardening | Raccoon → Turtle |
| New feature, ensure secure by design | Turtle only (or Turtle → Raccoon) |
| Secrets leak / incident response | Raccoon → Spider (rotate creds) → Turtle (verify) |
| Pre-production deploy | Raccoon → Turtle |
Error Codes as Security Posture:
All errors MUST use Signpost codes — this is a security requirement, not just a convention:
- All server errors use codes from the appropriate catalog (
API_ERRORS,AUTH_ERRORS, etc.) userMessageis always generic and warm — no technical details leak to clientsadminMessageis detailed — stays in server logs only- Auth errors NEVER reveal user existence ("Invalid credentials" — not "user not found")
logGroveError()for all server errors — neverconsole.erroralone
Confirm with the human, then proceed.
Output: Security specification, animal roster, dispatch plan confirmed.
Phase 2: WEAVE (Spider)
The conductor signals. The Spider descends from the canopy...
Agent(spider, model: opus)
Input: security specification only
Reads: spider-weave/SKILL.md + references (MANDATORY)
Output: auth implementation + file list
Dispatch an opus subagent to implement authentication. The Spider receives ONLY the security specification — no pre-analysis, no opinions. It reads its own skill file and executes its full workflow.
What the Spider builds:
- OAuth/PKCE flow implementation
- Session management
- Route protection middleware
- CSRF protection
- Token handling
Handoff to conductor: Auth file list (every file created/modified), auth summary (what was implemented, key decisions), integration points.
Gate check: Run gw dev ci --affected --fail-fast — must compile. If build fails, resume the Spider agent with error output.
Phase 3: AUDIT (Raccoon)
The Raccoon emerges from the undergrowth, nose twitching...
Agent(raccoon, model: sonnet)
Input: file list from Spider + security scope summary
Reads: raccoon-audit/SKILL.md (MANDATORY)
Output: audit report + applied fixes
Dispatch a sonnet subagent to audit the codebase. The Raccoon receives the file list and a brief scope summary — NOT the Spider's reasoning or implementation details. Fresh eyes for the audit.
What the Raccoon audits:
- Secrets in code (hardcoded keys, tokens)
- Dependency vulnerabilities
- Dead code and unused imports
- Unsafe patterns (eval, innerHTML, string SQL)
- Sensitive data in logs
Handoff to conductor: Audit report (findings, fixes applied, remaining concerns), updated file list.
Gate check: Run gw dev ci --affected --fail-fast — must still compile after audit fixes. If broken, resume Raccoon agent.
Phase 4: HARDEN (Turtle)
The Turtle approaches. It sees only what was built — not why...
Agent(turtle, model: opus)
Input: combined file list ONLY (not Spider's or Raccoon's reasoning)
Reads: turtle-harden/SKILL.md + references (MANDATORY)
Output: hardening report + applied fixes
Dispatch an opus subagent for adversarial security hardening. The Turtle receives ONLY the file list — NOT the Spider's auth decisions or Raccoon's audit reasoning. This is intentional: the Turtle should examine the code with adversarial fresh eyes, not sympathize with prior animals' reasoning.
What the Turtle hardens:
- Input validation (Zod schemas on all entry points)
- Output encoding (context-aware, DOMPurify for rich text)
- Parameterized queries (no string concatenation in SQL)
- Security headers (CSP with nonces, HSTS, X-Frame)
- Signpost error codes (verify Spider used them correctly)
- Rootwork boundary safety (verify no
ascasts at trust boundaries) - Rate limiting on sensitive endpoints
- CSRF, CORS, session security
- Exotic attack vectors (prototype pollution, timing attacks, SSRF, race conditions)
Handoff to conductor: Hardening report (vulnerabilities found, fixes applied, defense layers, remaining risks), updated file list.
Gate check: Run gw dev ci --affected --fail-fast — must still compile after hardening.
Phase 5: ITERATION (When Turtle Finds Deep Issues)
The cycle turns. Some vulnerabilities run deeper than one animal can fix...
┌──────────────────────────────────────────────────┐
│ SECURITY ITERATION │
├──────────────────────────────────────────────────┤
│ │
│ Turtle hardening report │
│ │ │
│ ▼ │
│ Auth vulnerability found? │
│ / \ │
│ Yes No │
│ │ │ │
│ ▼ ▼ │
│ RESUME Spider Raccoon/Turtle │
│ (same agent) fixes directly │
│ │ │
│ ▼ │
│ Gate check │
│ │ │
│ ▼ │
│ RESUME Turtle │
│ (re-verify only changed files) │
│ │ │
│ ▼ │
│ Clean? ──→ ✅ Proceed to FORTIFY │
│ │ │
│ No ──→ Max 3 iterations, then escalate │
└──────────────────────────────────────────────────┘
Iteration Rules:
- Turtle finds auth vulnerability → resume Spider agent with specific finding → Spider patches → resume Turtle to re-verify
- Turtle finds non-auth vulnerability → Turtle fixes directly or conductor applies fix
- Raccoon finds secrets → Raccoon cleans → resume Turtle to verify no residual exposure
- Maximum 3 iterations per issue (if more needed, escalate to human)
- Each iteration focuses only on newly found/fixed items
- Always resume agents (preserves context), don't spawn new ones
Phase 6: FORTIFY
The web holds. The audit confirms. The shell endures...
The conductor runs final verification:
pnpm install
gw dev ci --affected --fail-fast --diagnose
Validation Checklist:
Authentication:
[ ] Login redirects to provider
[ ] Callback exchanges code for tokens
[ ] Sessions created correctly
[ ] Logout clears sessions server-side
[ ] Expired tokens rejected
Authorization:
[ ] Protected routes require auth
[ ] API endpoints verify tokens
[ ] Users can't access others' data (IDOR)
Hardening:
[ ] SQL injection prevented (parameterized queries)
[ ] XSS prevented (output encoding + CSP)
[ ] CSRF prevented (tokens + SameSite cookies)
[ ] Rate limiting active on sensitive endpoints
[ ] Signpost error codes on every error path
[ ] Rootwork boundary safety at all trust boundaries
Completion Report:
🌲 GATHERING SECURITY COMPLETE
Security Work: [Description]
DISPATCH LOG
🕷️ Spider (opus) — [auth implemented, X files created/modified]
🦝 Raccoon (sonnet) — [audit complete, Y findings fixed]
🐢 Turtle (opus) — [Z hardening fixes, N defense layers applied]
GATE LOG
After Spider: ✅ compiles clean, auth functional
After Raccoon: ✅ compiles clean, audit findings resolved
After Turtle: ✅ compiles clean, hardening applied
Iterations: [N iterations, all resolved / none needed]
Final CI: ✅ gw dev ci --affected passes
HARDENING SUMMARY
| Defense Layer | Status | Details |
| Input Validation | ✅ | Zod schemas on all entry |
| Output Encoding | ✅ | Context-aware + DOMPurify |
| SQL Injection | ✅ | All queries parameterized |
| Security Headers | ✅ | CSP, HSTS, X-Frame |
| CORS | ✅ | Exact origin allowlist |
| Session Security | ✅ | HttpOnly, Secure, SameSite |
| Rate Limiting | ✅ | Per-endpoint limits |
Woven tight, audited clean, hardened deep — the forest endures.
Conductor Rules
Never Do Animal Work
The conductor dispatches. It does not implement auth, audit secrets, or harden code. If you catch yourself writing security code, stop — dispatch a subagent.
Fresh Eyes Are a Feature
Turtle intentionally receives LESS context than the full history. It doesn't see Spider's reasoning or Raccoon's audit logic. Adversarial fresh eyes produce better security review.
Gate Every Transition
Run CI between every animal. Don't let bad state cascade.
Resume, Don't Restart
If a gate check fails or iteration is needed, resume the failing agent with the error context. Don't spawn a new one — the resumed agent has its prior work in context.
Selective Mobilization
Not every security gathering needs all three animals. Auth-only work skips Turtle. Hardening-only work skips Spider. The conductor decides based on the request.
Anti-Patterns
The conductor does NOT:
- Write security code itself (dispatch subagents)
- Pass full conversation history to every agent (structured handoffs only)
- Skip gate checks between animals
- Let agents skip reading their skill file (MANDATORY in every prompt)
- Let Turtle see Spider's reasoning (adversarial isolation is the point)
- Continue after a gate failure without fixing it
- Iterate more than 3 times without escalating to human
Quick Decision Guide
| Situation | Animals to Dispatch | Models |
|---|---|---|
| New auth + full security | Spider → Raccoon → Turtle | opus, sonnet, opus |
| Auth exists, need deep hardening | Raccoon → Turtle | sonnet, opus |
| New feature, secure by design | Turtle (optionally + Raccoon) | opus (+ sonnet) |
| Incident response | Raccoon → Spider → Turtle | sonnet, opus, opus |
| Pre-production deploy | Raccoon → Turtle | sonnet, opus |
| Auth-only work | Spider → Raccoon | opus, sonnet |
Woven tight, audited clean, hardened deep — the forest endures. 🌲
More from autumnsgrove/groveengine
git-workflows
Execute git and GitHub operations through Grove Wrap (gw) with safety-tiered commands, Conventional Commits, and agent-safe defaults. Use when making commits, managing branches, working with PRs/issues, or performing any version control operations.
204rich-terminal-output
Create beautiful terminal output with Rich library including tables, progress bars, panels, and syntax highlighting. Use when building CLI applications or enhancing terminal output in Python.
93api-integration
Integrate external REST APIs with proper authentication, rate limiting, error handling, and caching patterns. Use when working with external APIs, building API clients, or fetching data from third-party services.
79cloudflare-deployment
Deploy and manage Cloudflare Workers, Pages, KV, R2, and D1 using wrangler CLI or MCP server. Use when working with Cloudflare services, serverless functions, or edge deployments.
77project-scaffolding
Initialize new projects with proper structure, configuration, and setup from BaseProject template. Use when creating new projects, setting up directory structures, or initializing repositories.
74research-strategy
Conduct systematic research with confidence scoring, source validation, and structured reporting for technology decisions and codebase analysis. Use for complex research tasks, technology selection, or best practice discovery.
74