skills/wooldridge-multiagent-intro/SKILL.md
Comprehensive introduction to multi-agent systems covering coordination, communication, and distributed AI theory
npx skillsauth add curiositech/windags-skills wooldridge-multiagent-introInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
license: Apache-2.0
Load this skill when facing:
Don't use this skill for: Single-agent planning problems, centralized optimization, systems where "agents" are just objects with methods (no real autonomy), LLM prompt engineering (unless building true multiagent LLM systems).
The principle: Agent architecture complexity must match environment observability and dynamics, not domain sophistication.
The framework:
Fully observable + Deterministic + Static → Simple reactive suffices
Partially observable → Need internal state (belief tracking)
Non-deterministic → Need contingency planning or probabilistic reasoning
Dynamic → Need real-time responsiveness (limit deliberation cycles)
Continuous + Dynamic → Hybrid architectures mandatory (reactive layer + deliberative layer)
Why it matters: Starting with "what cool AI should the agent have?" inverts the design process. A Mars rover (inaccessible, partially observable, dynamic environment) needs fundamentally different architecture than a chess program (fully observable, deterministic, static), regardless of domain complexity. Environment characterization determines minimum viable architecture; domain determines sufficient capability.
The test: Can you specify your environment on these axes: accessible, deterministic, episodic, static, discrete? If not, you can't make principled architecture decisions yet.
The principle: An agent differs from an object because it encapsulates control—it decides whether to act on requests, not just how.
The inversion:
object.method() → immediate execution)Why it matters: This isn't philosophical—it's architectural. In distributed systems without global locks or guaranteed response times, you can't rely on synchronous control flow. "Agent-oriented" design means specifying desired behavior under the constraint that you cannot dictate execution. This forces explicit reasoning about:
The error: Treating agents as asynchronous objects. True agent systems require speech act semantics, commitment models, or contract protocols—mechanisms that acknowledge control inversion.
The principle: Coordination requirements emerge from environment properties (partial observability, non-determinism, resource contention), not from a design preference for "collaboration."
The forcing function:
The DVMT example (Distributed Vehicle Monitoring Testbed): Aircraft tracking with non-overlapping sensor coverage. No single agent can track a vehicle across its entire trajectory. Coordination isn't "nice"—it's the only way to maintain continuous tracks. The question shifts from "should we coordinate?" to "what's the minimal coordination protocol that prevents track loss?"
Design implication: Characterize environment first → identify coordination necessities → design minimal sufficient protocols. Over-coordinating wastes bandwidth/cycles; under-coordinating causes failures.
The principle (Kinny & Georgeff experiments): Agent boldness—how persistently it pursues goals despite changing circumstances—must track environment volatility.
The empirical result:
The tuning parameter: Meta-level strategy determining reconsideration frequency. No universal "best practice"—optimal boldness is environment-dependent.
Why it matters:
Design question: What's your environment's change rate relative to deliberation cost? If changes happen faster than replanning, you need reactive layers or approximate methods.
The formal result (Coordinated Attack Problem): Without guaranteed message delivery, common knowledge of any fact requires infinite message exchange. Even with guarantees, establishing "everyone knows that everyone knows that..." requires costly protocol rounds.
The hierarchy:
Individual knowledge: Agent i knows φ
Everyone knows: Every agent knows φ (but may not know others know)
Common knowledge: Everyone knows φ, everyone knows everyone knows φ, ad infinitum
Distributed knowledge: An omniscient observer combining all agents' knowledge could deduce φ
The pragmatic implications:
Design heuristic: Start with distributed knowledge requirements (what must be collectively knowable?), escalate to common knowledge only when proven necessary (what must everyone know everyone knows?), verify your communication model can actually establish it.
IF environment is:
Fully observable + deterministic + static
→ Simple reflex agent (stimulus-response)
Partially observable OR non-deterministic
→ Deliberative agent with belief state tracking
Dynamic + real-time constraints
→ Hybrid architecture (reactive layer for time-critical, deliberative for planning)
Continuous state/action spaces + dynamic
→ Subsumption-style layered reactivity OR explicit hybrid (see references/hybrid-architectures)
IF agents have:
Non-overlapping sensor coverage → Need information sharing protocols
Overlapping goals/resources → Need negotiation or allocation mechanisms
Task dependencies → Need commitment protocols with decommitment costs
Uncertain environments → Need replanning coordination (avoid thrashing on others' stale plans)
THEN consider:
Contract Net (task allocation via bidding)
Partial Global Planning (incrementally share/merge local plans)
Game-theoretic mechanisms (when self-interested)
(See references/coordination-as-necessity, references/negotiation-and-resource-allocation)
IF environment is:
Static + goals rarely invalidated → Bold commitment (low reconsideration)
Highly dynamic + frequent goal obsolescence → Cautious commitment (frequent reconsideration)
Mixed (stable plans with occasional disruptions) → Single-minded commitment (reconsider on new info, not timer)
THEN tune meta-level strategy:
Bold = reconsider only on explicit contradiction
Cautious = reconsider every N cycles
Single-minded = reconsider on new percepts affecting current intention
(See references/commitment-strategies-and-environment-dynamics)
IF safety property requires:
"At least one agent knows φ" → Individual knowledge (cheap)
"Every agent knows φ" → Broadcast + acknowledgment (moderate cost)
"Every agent knows every agent knows φ" → Common knowledge protocol (expensive/impossible in unreliable networks)
"Collectively, agents could deduce φ" → Distributed knowledge (no explicit protocol needed, but need query mechanism)
THEN:
Verify communication model supports required knowledge level
Consider relaxing common knowledge to distributed knowledge + query protocol
(See references/grounded-epistemic-logic)
| File | Load When... | Contents |
|------|-------------|----------|
| references/environment-characterization-drives-architecture.md | Choosing between reactive, deliberative, or hybrid architectures; characterizing environment properties | Environment taxonomy (accessible, deterministic, episodic, static, discrete), why environment properties force architectural choices, systematic mapping from environment to minimum viable architecture |
| references/coordination-as-necessity-not-luxury.md | Designing coordination protocols; justifying why agents must communicate/coordinate | Why coordination emerges from partial observability and resource contention, DVMT vehicle tracking case study, minimal sufficient coordination principles, over-coordination costs |
| references/commitment-strategies-and-environment-dynamics.md | Tuning agent boldness/persistence; handling dynamic environments; meta-level reasoning about when to replan | Kinny & Georgeff empirical results, bold vs. cautious vs. single-minded commitment strategies, environment dynamics as tuning parameter, real-time reasoning trade-offs |
| references/grounded-epistemic-logic-for-distributed-agents.md | Reasoning about distributed knowledge; verifying communication protocols; analyzing coordination failures due to knowledge asymmetry | Epistemic logic grounded in runs/local states/observation partitions, common vs. distributed knowledge distinction, coordinated attack problem, computational interpretation of modal operators |
| references/hybrid-architectures-and-realtime-adaptation.md | Designing agents that need both planning and fast reaction; integrating deliberative and reactive layers; real-time constraints | Historical progression (reactive → deliberative → hybrid), TouringMachines and InteRRaP architectures, vertical vs. horizontal layering, real-time constraint satisfaction |
| references/negotiation-and-resource-allocation-mechanisms.md | Designing negotiation protocols; allocating resources among self-interested agents; applying game theory to coordination | Shift from benevolent to self-interested agents, Contract Net Protocol, game-theoretic mechanisms (auctions, voting), Nash equilibrium in coordination, mechanism design principles |
Someone has not internalized Wooldridge if they:
Someone has internalized Wooldridge if they:
The definitive tell: They can explain why a simple reactive agent in a partially observable, non-deterministic, dynamic environment is harder to design correctly than a complex deliberative agent in a fully observable, deterministic, static environment—and defend it with Wooldridge's environment taxonomy rather than intuition.
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.