skills/rao-georgeff-1991-modeling-rational-agents-bdi/SKILL.md
Formal framework for modeling intelligent agents through Beliefs, Desires/Goals, and Intentions as distinct mental states with rigorous semantics
npx skillsauth add curiositech/windags-skills rao-georgeff-1991-modeling-rational-agents-bdiInstall 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.
Name: BDI Rational Agent Design
Description: Formal framework for modeling intelligent agents through Beliefs, Desires/Goals, and Intentions as distinct mental states with rigorous semantics
Author/Source: Anand S. Rao & Michael P. Georgeff (1991)
Activation triggers: agent architecture, intelligent systems, commitment reasoning, intention modeling, action planning, side-effects problem, goal decomposition, multi-agent systems, autonomous behavior
Environment Stability Assessment:
├─ STABLE environment + HIGH resources
│ └─ Choose BLIND commitment (AI₁)
│ • Persist until believed achieved
│ • Maximize goal completion
├─ UNSTABLE environment + LIMITED resources
│ └─ Choose SINGLE-MINDED commitment (AI₂)
│ • Drop if impossible OR achieved
│ • Balance persistence with realism
└─ HIGHLY DYNAMIC + EXPLORATORY goals
└─ Choose OPEN-MINDED commitment (AI₃)
• Drop if no longer desired OR achieved
• Track changing preferences
Goal Decomposition Decision Tree:
├─ PRIMITIVE action (under agent control)
│ └─ INTEND(does(action)) → guarantees execution
├─ ACHIEVEMENT goal (world determines outcome)
│ └─ INTEND(achievement) → guarantees attempt only
└─ COMPLEX goal requiring subgoals
├─ IF sequential: INTEND(q) before INTEND(p) where q enables p
└─ IF disjunctive: Choose specific branch to commit to
Side-Effects Resolution:
├─ BELIEVE(action → wanted_effect AND unwanted_effect)
│ └─ Can INTEND(does(action)) without INTEND(unwanted_effect)
│ • Intention-worlds select specific branches
│ • Avoid closure under believed implications
└─ Multiple paths to same goal
└─ Select path minimizing unwanted side-effects
Other Agent's Mental States:
├─ What I BELIEVE they INTEND
│ └─ Plan coordination assuming their commitment
├─ What I INTEND regarding their actions
│ └─ My commitment to outcomes involving them
└─ Commitment conflicts detected
├─ IF my commitment is stronger → maintain, negotiate
└─ IF their commitment is stronger → revise, delegate
Detection: If you find yourself saying "intention = persistent goal" or treating INTEND(p) as equivalent to GOAL(p) + high_priority.
Diagnosis: Missing the independence of mental attitudes. Intentions have separate persistence conditions from goals.
Fix: Implement separate axioms for each attitude. An agent can intend something while no longer desiring it (obligation case) or desire something while not committing to it (wish case).
Detection: If BELIEVE(p → q) AND INTEND(p) forces INTEND(q), creating unwanted commitments to side-effects.
Diagnosis: Treating intentions as closed under logical entailment instead of using sub-world compatibility.
Fix: Apply geometric constraints: intention-worlds are sub-worlds of belief-worlds. You intend specific branches, not entire logical consequences.
Detection: Agent gives up too easily (needed blind commitment) or persists irrationally (needed open-minded commitment).
Diagnosis: Mismatched persistence axiom for environmental demands.
Fix: Reassess environment stability and resource constraints. Switch axioms: AI₁ for stable/high-resource, AI₂ for collaborative/resource-limited, AI₃ for dynamic/exploratory.
Detection: Treating failed outcomes as defective intentions when environmental factors prevented success.
Diagnosis: Confusing volitional commitment (does(action)) with result achievement (succeeds(action)).
Fix: Apply AI₄ correctly: INTEND(does(e)) guarantees execution, but INTEND(achieves(goal)) only guarantees attempt.
Detection: Using branching time to represent epistemic uncertainty instead of choice options.
Diagnosis: Collapsing two-dimensional structure (choices within worlds, uncertainty across worlds).
Fix: Separate optional/inevitable (branch quantification within worlds) from BEL/GOAL/INTEND (world quantification across epistemic alternatives).
Scenario: Two autonomous robots (A and B) must coordinate to move a heavy table. Initially, both have GOAL(table_moved) and different movement strategies.
Initial State:
Decision Point Navigation:
Expert vs. Novice:
Resolution: A adopts compatible sub-goal INTEND(push_while_B_pulls), maintaining higher-level commitment while adapting method.
Scenario: Diagnostic AI system must recommend treatment knowing it causes side-effects.
Setup:
Decision Tree Navigation:
Treatment recommendation:
├─ Can INTEND(prescribe_chemotherapy)
│ ├─ WITHOUT intending nausea (sub-world selection)
│ └─ WITH explicit management plan for side-effects
└─ Must inform about side-effects (belief obligation)
└─ But not commit to wanting them (goal independence)
Critical Insight: The system intends the specific branch where chemotherapy achieves tumor shrinkage with minimal nausea (through sub-world selection), not the entire logical closure including all side-effects.
Alternative Strategies Considered:
Scenario: Autonomous research assistant managing multiple paper deadlines with computation budget.
Initial Commitments:
Crisis Point: Halfway through, budget reduced to 60 hours total.
Strategy Comparison:
Expert Decision Process:
Trade-off Analysis: Single-minded commitment chosen because collaboration context requires reliability (better to deliver one complete paper than two incomplete ones).
Do NOT use BDI for:
Delegate to other skills:
Integration boundaries:
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.