Installs into .claude/skills of the current project.
Are you the author of Turing Pyramid?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/leoyeai-turing-pyramid)
---
name: turing-pyramid
description: Prioritized action selection for AI agents. 10 needs with time-decay and tension scoring replace idle heartbeat loops with concrete next actions.
metadata:
clawdbot:
emoji: "๐บ"
requires:
env:
- WORKSPACE
bins:
- bash
- jq
- bc
- grep
- find
---
# Turing Pyramid
Prioritized action selection for AI agents. 10 needs with time-decay and tension scoring replace idle heartbeat loops with concrete next actions.
**Customization:** Tune decay rates, weights, patterns. Defaults are starting points. See `TUNING.md`.
**Ask your human before:** Changing importance values, adding/removing needs, enabling external actions.
---
## Requirements
**System binaries (must be in PATH):**
```
bash, jq, grep, find, date, wc, bc
```
**Environment (REQUIRED โ no fallback):**
```bash
# Scripts will ERROR if WORKSPACE is not set
export WORKSPACE="/path/to/your/workspace"
```
โ ๏ธ **No silent fallback.** If WORKSPACE is unset, scripts exit with error.
This prevents accidental scanning of unintended directories.
**Post-install (ClawHub):**
```bash
# ClawHub doesn't preserve executable bits โ fix after install:
chmod +x <skill-dir>/scripts/*.sh
chmod +x <skill-dir>/tests/**/*.sh
```
Why: Unix executable permissions (+x) are not preserved in ClawHub packages.
Scripts work fine with `bash scripts/run-cycle.sh`, but `./scripts/run-cycle.sh` needs +x.
---
## Data Access & Transparency
**What this skill reads (via grep/find scans):**
- `MEMORY.md`, `memory/*.md` โ for connection/expression/understanding signals
- `SOUL.md`, `SELF.md` โ for integrity/coherence checks
- `research/`, `scratchpad/` โ for competence/understanding activity
- Dashboard files, logs โ for various need assessments
**What this skill writes:**
- `assets/needs-state.json` โ current satisfaction/deprivation state
- `assets/audit.log` โ append-only log of all mark-satisfied calls (v1.12.0+)
**Privacy considerations:**
- Scans use grep patterns, not semantic analysis โ they see keywords, not meaning
- State file contains no user content, only need metrics
- Audit log records reasons given for satisfaction claims
- No data is transmitted externally by the skill itself
**Limitations & Trust Model:**
- `mark-satisfied.sh` trusts caller-provided reasons โ audit log records claims, not verified facts
- Some actions in `needs-config.json` reference external services (Moltbook, web search) โ marked with `"external": true, "requires_approval": true`
- External actions are **suggestions only** โ the skill doesn't execute them, the agent decides
- If you don't want external action suggestions, set their weights to 0
**Network & System Access:**
- Scripts contain **no network calls** (no curl, wget, ssh, etc.) โ verified by grep scan
- Scripts contain **no system commands** (no sudo, systemctl, docker, etc.)
- All operations are local: grep, find, jq, bc, date on WORKSPACE files only
- The skill **suggests** actions (including some that mention external services) but **never executes** them
**Required Environment Variables:**
- `WORKSPACE` โ path to agent workspace directory (REQUIRED, no fallback). **Not a credential** โ this is a filesystem path, not a secret. Set it to a deliberately scoped directory containing only files you want scanned.
- `TURING_CALLER` โ optional, for audit trail (values: "heartbeat", "manual")
**No API keys or secrets required by default.** The `external_model` scan method (disabled by default) would require an API key if enabled โ this requires explicit steward approval and is never enabled silently. See Scan Configuration below.
**Audit trail (v1.12.0+):**
All `mark-satisfied.sh` calls are logged with:
- Timestamp, need, impact, oldโnew satisfaction
- Reason (what action was taken) โ **scrubbed for sensitive patterns**
- Caller (heartbeat/manual)
**Sensitive data scrubbing (v1.12.3+):**
Before writing to audit log, reasons are scrubbed:
- Long tokens (20+ chars) โ `[REDACTED]`
- Credit card patterns โ `[CARD]`
- Email addresses โ `[EMAIL]`
- password/secret/token/key values โ `[REDACTED]`
- Bearer tokens โ `Bearer [REDACTED]`
View audit: `cat assets/audit.log | jq`
---
## Pre-Install Checklist
Before installing, review these items:
1. **Inspect scan scripts** โ Verify no network calls or unexpected commands:
```bash
grep -nE "\b(curl|wget|ssh|sudo|docker|systemctl)\b" scripts/scan_*.sh
# Expected: no output
```
2. **Scope WORKSPACE** โ Set to a deliberately limited directory. Avoid pointing at your full home directory. The skill only reads files inside `$WORKSPACE`.
3. **Audit scan targets** โ Scripts read `MEMORY.md`, `memory/`, `SOUL.md`, `research/`, `scratchpad/`. Relocate files containing secrets or private data you don't want pattern-matched.
4. **Review audit logging** โ `mark-satisfied.sh` logs caller-provided reasons after scrubbing. Check scrubbing patterns in the script are adequate for your data. If unsure, provide only generic reasons.
5. **External actions** โ Action suggestions like "post to Moltbook" or "web search" are text-only suggestions (never executed by this skill). To remove them: set their `weight` to `0` in `needs-config.json`.
6. **Run tests in isolation** โ Before production use:
```bash
WORKSPACE=/tmp/test-workspace ./tests/run-tests.sh
```
---
## Quick Start
```bash
./scripts/init.sh # First time
./scripts/run-cycle.sh # Every heartbeat
./scripts/mark-satisfied.sh <need> [impact] # After action
```
---
## Scan Configuration (First-Time Setup)
The Turing Pyramid uses **scanners** to evaluate each need by analyzing memory files. The default scan method uses line-level pattern matching, which works everywhere with zero cost.
**On first install, discuss scan configuration with your human:**
### Available Scan Methods
| Method | How it works | Cost | Accuracy | Setup |
|--------|-------------|------|----------|-------|
| `line-level` (default) | Per-line keyword matching. If a line has both positive and negative words (e.g. "fixed a bug"), positive wins. | Free | Good | None |
| `agent-spawn` | Spawns a sub-agent with a cheap model (e.g. Haiku) to classify memory lines as SUCCESS/FAILURE/NEUTRAL. | Low | High | Needs cheap model in agent's allowed list |
| `external-model` | Direct API call to an inference service (OpenRouter, etc.) for classification. | Low | High | Needs API key + explicit steward approval |
### Setup Conversation
When setting up, ask your human:
1. **"Do you have a cheap/fast model available (like Claude Haiku) in your model config?"**
- If yes โ offer `agent-spawn` method. Check with `openclaw models list`.
- The model must be in the agent's allowed model list.
2. **"Would you prefer to use an external inference service (like OpenRouter)?"**
- If yes โ ask for: base URL, API key env variable name, model name.
- Store in `assets/scan-config.json` with `approved_by_steward: true`.
- โ ๏ธ This method requires **explicit steward approval** โ never enable silently.
3. **If neither** โ `line-level` works well for most setups. No action needed.
### Configuration File
Edit `assets/scan-config.json`:
```json
{
"scan_method": "line-level",
"agent_spawn": {
"enabled": false,
"model": null,
"approved_by_steward": false
},
"external_model": {
"enabled": false,
"base_url": null,
"api_key_env": null,
"model": null,
"approved_by_steward": false
},
"fallback": "line-level"
}
```
**Fallback**: If the configured method fails (API down, model unavailable), scanners automatically fall back to `line-level`.
### Verification After Setup
After configuring a non-default method, **verify it works** before telling your human "all set":
1. **agent-spawn**: Run a test spawn:
```
sessions_spawn(task="Classify this line as SUCCESS, FAILURE, or NEUTRAL: 'Fixed the critical bug in scanner'", model="<configured_model>", mode="run")
```
- If it returns a classification โ โ tell human: "agent-spawn method verified, working."
- If it errors (model not in allowlist, etc.) โ โ ๏ธ tell human: "Model `X` isn't available for sub-agents. Options: add it to allowed models, or stick with line-level."
2. **external-model**: Test the API endpoint:
```bash
curl -s -H "Authorization: Bearer $API_KEY" \
"$BASE_URL/chat/completions" \
-d '{"model":"<model>","messages":[{"role":"user","content":"Reply OK"}]}'
```
- If you get a valid response โ โ tell human: "external-model method verified, API responding."
- If 401/403 โ โ ๏ธ "API key invalid or expired."
- If connection refused โ โ ๏ธ "Can't reach the API endpoint. Check URL."
3. **line-level**: No verification needed โ always works.
**Always report the result to your human.** Don't silently fall back.
---
## Needs Customization (First-Time Setup)
The default configuration is opinionated โ it reflects one model of agent priorities. **Your needs may differ.** On first install, review the hierarchy with your human:
### The Conversation
Ask your human:
> "The Turing Pyramid comes with 10 default needs ranked by importance. Want to review them together? We can adjust what matters most to you/me, change importance weights, or even skip needs that don't fit."
Then walk through the table together:
```
โโโโโโโโโโโโโโโโโฌโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Need โ Imp โ Question to discuss โ
โโโโโโโโโโโโโโโโโผโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ security โ 10 โ "System stability โ keep as top priority?" โ
โ integrity โ 9 โ "Value alignment โ important for you?" โ
โ coherence โ 8 โ "Memory consistency โ how much do I care?" โ
โ closure โ 7 โ "Task completion pressure โ too much?" โ
โ autonomy โ 6 โ "Self-direction โ more or less?" โ
โ connection โ 5 โ "Social needs โ relevant for me?" โ
โ competence โ 4 โ "Skill growth โ higher priority?" โ
โ understanding โ 3 โ "Learning drive โ stronger or weaker?" โ
โ recognition โ 2 โ "Feedback need โ does this matter?" โ
โ expression โ 1 โ "Creative output โ more important?" โ
โโโโโโโโโโโโโโโโโดโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
### What You Can Change Together
1. **Importance** (1-10): Reorder what matters most. An agent focused on research might want `understanding: 8, expression: 7`. A utility agent might want `competence: 10, connection: 1`.
2. **Decay rates**: How fast needs build pressure. Social agent? `connection: 3h`. Solitary thinker? `connection: 24h`.
3. **Disable a need**: Set `importance: 0` โ it won't generate tension or actions. Use sparingly.
### How to Apply
Edit `assets/needs-config.json`:
```json
"understanding": {
"importance": 8, // was 3 โ now top priority
"decay_rate_hours": 8 // was 12 โ decays faster
}
```
### Guidelines
- **Don't remove security/integrity** without good reason โ they protect system health
- **Importance is relative** โ what matters is the ranking, not absolute numbers
- **You can revisit** โ preferences evolve. Re-tune after a few weeks of use
- **Document changes** โ note why you changed something (future-you will want to know)
If your human says "defaults are fine" โ great, move on. The point is to **offer the choice**, not force a workshop.
---
## The 10 Needs
```
โโโโโโโโโโโโโโโโโฌโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Need โ Imp โ Decay โ Meaning โ
โโโโโโโโโโโโโโโโโผโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ security โ 10 โ 168h โ System stability, no threats โ
โ integrity โ 9 โ 72h โ Alignment with SOUL.md โ
โ coherence โ 8 โ 24h โ Memory consistency โ
โ closure โ 7 โ 12h โ Open threads resolved โ
โ autonomy โ 6 โ 24h โ Self-directed action โ
โ connection โ 5 โ 6h โ Social interaction โ
โ competence โ 4 โ 48h โ Skill use, effectiveness โ
โ understanding โ 3 โ 12h โ Learning, curiosity โ
โ recognition โ 2 โ 72h โ Feedback received โ
โ expression โ 1 โ 8h โ Creative output โ
โโโโโโโโโโโโโโโโโดโโโโโโดโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
---
## Core Logic
**Satisfaction:** 0.0โ3.0 (floor=0.5 prevents paralysis)
**Tension:** `importance ร (3 - satisfaction)`
### Action Probability (v1.13.0)
6-level granular system:
```
โโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ Sat โ Base P โ Note โ
โโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโค
โ 0.5 crisis โ 100% โ Always act โ
โ 1.0 severe โ 90% โ Almost always โ
โ 1.5 depriv โ 75% โ Usually act โ
โ 2.0 slight โ 50% โ Coin flip โ
โ 2.5 ok โ 25% โ Occasionally โ
โ 3.0 perfect โ 0% โ Skip (no action) โ
โโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโ
```
**Tension bonus:** `bonus = (tension ร 50) / max_tension`
### Impact Selection (v1.13.0)
6-level granular matrix with smooth transitions:
```
โโโโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโฌโโโโโโโโ
โ Sat โ Small โ Medium โ Big โ
โโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโผโโโโโโโโค
โ 0.5 crisis โ 0% โ 0% โ 100% โ
โ 1.0 severe โ 10% โ 20% โ 70% โ
โ 1.5 depriv โ 20% โ 35% โ 45% โ
โ 2.0 slight โ 30% โ 45% โ 25% โ
โ 2.5 ok โ 45% โ 40% โ 15% โ
โ 3.0 perfect โ โ โ โ โ โ โ (skip)
โโโโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโดโโโโโโโโ
```
- **Crisis (0.5)**: All-in on big actions โ every need guaranteed โฅ3 big actions
- **Perfect (3.0)**: Skip action selection โ no waste on satisfied needs
**ACTION** = do it, then `mark-satisfied.sh`
**NOTICED** = logged, deferred
---
## Protection Mechanisms
```
โโโโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Mechanism โ Value โ Purpose โ
โโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Floor โ 0.5 โ Minimum sat โ prevents collapse โ
โ Ceiling โ 3.0 โ Maximum sat โ prevents runaway โ
โ Cooldown โ 4h โ Deprivation cascades once per 4h โ
โ Threshold โ 1.0 โ Deprivation only when sat โค 1.0 โ
โโโโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Action Staleness (v1.15.0):** Penalizes recently-selected actions to increase variety.
- Actions selected within 24h get weight ร 0.2 (80% reduction)
- `min_weight: 5` prevents total suppression โ stale actions still have a chance
- Config: `settings.action_staleness` in needs-config.json
**Starvation Guard (v1.15.0):** Prevents low-importance needs from being perpetually ignored.
- If a need stays at floor (sat โค 0.5) without any action for 48+ hours โ forced into cycle
- Bypasses probability roll โ guaranteed action slot
- Config: `settings.starvation_guard` in needs-config.json
- Default: 1 forced slot per cycle, 48h threshold
**Spontaneity Layer A (v1.18.0):** Surplus energy system for organic high-impact actions.
- When all needs are above baseline (sat โฅ 2.0), surplus accumulates per-need
- Global gate requires ALL needs โฅ 1.5 and no starvation guard active
- When surplus exceeds threshold (~12.5 effective), impact matrix shifts toward bigger actions
- Full spend on HIGH hit, 30% partial on miss โ creates natural ~28-35hr pulsing rhythm
- Disabled for safety needs (security, integrity, coherence)
- Config: `settings.spontaneity` + per-need `spontaneous` block in needs-config.json
**Spontaneity Layer B (v1.19.0):** Stochastic noise โ boredom breeds variety, momentum creates bursts.
- B2 (Boredom): noise grows with time since last high-impact action (0%โ9% max over 72h)
- B3 (Echo): 8% boost after Layer A [SPONTANEOUS], decays linearly over 24h
- Combined cap: 12%. Effect: upgrade impact range by one step (lowโmid, midโhigh)
- Works independently of gate โ neural noise doesn't stop because one subsystem is stressed
- Boredom tracks actual completion (`mark-satisfied`), not suggestions
- Config: `settings.spontaneity.noise` + `settings.spontaneity.echo`
**Spontaneity Layer C (v1.20.0):** Context-driven triggers โ environmental stimuli boost specific needs.
- Delta engine compares workspace state between cycles (file counts, mtimes, keyword occurrences)
- Configurable trigger rules: `assets/context-triggers.json` with cooldowns
- Three detector types: file_count_delta, file_modified, file_keyword_delta
- Context boosts are additive with noise (B2+B3), capped together at 12%
- Personalize triggers during onboarding based on agent interests
**Day/Night Mode (v1.11.0):** Decay slows at night to reduce pressure during rest hours.
- Configure in `assets/decay-config.json`
- Default: 06:01-22:00 = day (ร1.0), 22:01-06:00 = night (ร0.5)
- Disable with `"day_night_mode": false`
**Base Needs Isolation:** Security (10) and Integrity (9) are protected:
- They influence lower needs (security โ autonomy)
- Lower needs cannot drag them down
- Only `integrity โ security (+0.15)` and `autonomy โ integrity (+0.20)` exist
---
## Cross-Need Impact
**on_action:** Completing A boosts connected needs
**on_deprivation:** A staying low (sat โค 1.0) drags others down
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ Source โ Target โ on_actionโ on_deprived โ Why โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโค
โ expression โ recognitionโ +0.25 โ -0.10 โ Express โ noticed โ
โ connection โ expression โ +0.20 โ -0.15 โ Social sparks ideas โ
โ connection โ understand โ -0.05 โ โ โ Socratic effect โ
โ competence โ recognitionโ +0.30 โ -0.20 โ Good work โ respect โ
โ autonomy โ integrity โ +0.20 โ -0.25 โ Act on values โ
โ closure โ coherence โ +0.20 โ -0.15 โ Threads โ order โ
โ security โ autonomy โ +0.10 โ -0.20 โ Safety enables risk โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโ
```
### Tips
- **Leverage cascades:** Connection easy? Do it first โ boosts expression (+0.20)
- **Watch spirals:** expression โ recognition can create mutual deprivation
- **Autonomy is hub:** Receives from 5 sources. Keep healthy.
- **Socratic effect:** connection โ understanding: -0.05. Dialogue exposes ignorance. Healthy!
Full matrix: `assets/cross-need-impact.json`
---
## Example Cycle
```
๐บ Turing Pyramid โ Cycle at Sat Mar 7 05:06
======================================
Current tensions:
connection: tension=10.0 (sat=1.00, dep=2.00)
closure: tension=7.0 (sat=2.00, dep=1.00)
expression: tension=1.0 (sat=0.00, dep=3.00)
๐จ Starvation guard: expression forced into cycle
Selecting 3 needs (1 forced + 2 regular)...
๐ Decisions:
โถ ACTION: expression (tension=1.0, sat=0.00) [STARVATION GUARD]
Range high rolled โ selected:
โ develop scratchpad idea into finished piece (impact: 2.7)
Then: mark-satisfied.sh expression 2.7
โถ ACTION: connection (tension=10.0, sat=1.00)
Range high rolled โ selected:
โ reach out to another agent (impact: 2.8)
Then: mark-satisfied.sh connection 2.8
โถ ACTION: closure (tension=7.0, sat=2.00)
Range mid rolled โ selected:
โ complete one pending TODO (impact: 1.7)
Then: mark-satisfied.sh closure 1.7
======================================
Summary: 3 action(s), 0 noticed
```
---
## Integration
Add to `HEARTBEAT.md`:
```bash
/path/to/skills/turing-pyramid/scripts/run-cycle.sh
```
---
## Customization
### You Can Tune (no human needed)
**Decay rates** โ `assets/needs-config.json`:
```json
"connection": { "decay_rate_hours": 4 }
```
Lower = decays faster. Higher = persists longer.
**Action weights** โ same file:
```json
{ "name": "reply to mentions", "impact": 2, "weight": 40 }
```
Higher weight = more likely selected. Set 0 to disable.
**Scan patterns** โ `scripts/scan_*.sh`:
Add your language patterns, file paths, workspace structure.
### Ask Your Human First
- **Adding needs** โ The 10-need structure is intentional. Discuss first.
- **Removing needs** โ Don't disable security/integrity without agreement.
---
## File Structure
```
turing-pyramid/
โโโ SKILL.md # This file
โโโ CHANGELOG.md # Version history
โโโ assets/
โ โโโ needs-config.json # โ Main config (needs, actions, settings)
โ โโโ cross-need-impact.json # โ Cross-need matrix
โ โโโ needs-state.json # Runtime state (auto-managed)
โ โโโ scan-config.json # Scan method configuration
โ โโโ decay-config.json # Day/night mode settings
โ โโโ audit.log # Append-only action audit trail
โโโ scripts/
โ โโโ run-cycle.sh # Main loop (tension + action selection)
โ โโโ mark-satisfied.sh # State update + cross-need cascades
โ โโโ apply-deprivation.sh # Deprivation cascade engine
โ โโโ get-decay-multiplier.sh # Day/night decay multiplier
โ โโโ _scan_helper.sh # Shared scan utilities
โ โโโ scan_*.sh # Event detectors (10 needs)
โโโ tests/
โ โโโ run-tests.sh # Test runner
โ โโโ test_starvation_guard.sh # Starvation guard (11 cases)
โ โโโ test_action_staleness.sh # Action staleness (13 cases)
โ โโโ unit/ # Unit tests (13)
โ โโโ integration/ # Integration tests (3)
โ โโโ fixtures/ # Test data
โโโ references/
โโโ TUNING.md # Detailed tuning guide
โโโ architecture.md # Technical docs
```
---
## Security Model
**Decision framework, not executor.** Outputs suggestions โ agent decides.
```
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ
โ TURING PYRAMID โ โ AGENT โ
โโโโโโโโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโค
โ โข Reads local JSON โ โ โข Has web_search โ
โ โข Calculates decay โ โโโโถ โ โข Has API keys โ
โ โข Outputs: "โ do X" โ โ โข Has permissions โ
โ โข Zero network I/O โ โ โข DECIDES & EXECUTESโ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ
```
### โ ๏ธ Security Warnings
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ THIS SKILL READS WORKSPACE FILES THAT MAY CONTAIN PII โ
โ AND OUTPUTS ACTION SUGGESTIONS THAT CAPABLE AGENTS MAY โ
โ AUTO-EXECUTE USING THEIR OWN CREDENTIALS. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**1. Sensitive file access (no tokens required):**
- Scans read: `MEMORY.md`, `memory/*.md`, `SOUL.md`, `AGENTS.md`
- Also scans: `research/`, `scratchpad/` directories
- Risk: May contain personal notes, PII, or secrets
- **Mitigation:** Edit `scripts/scan_*.sh` to exclude sensitive paths:
```bash
# Example: skip private directory
find "$MEMORY_DIR" -name "*.md" ! -path "*/private/*"
```
**2. Action suggestions may trigger auto-execution:**
- Config includes: "web search", "post to Moltbook", "verify vault"
- This skill outputs text only โ it CANNOT execute anything
- Risk: Agent runtimes with auto-exec may act on suggestions
- **Mitigation:** In `assets/needs-config.json`, remove or disable external actions:
```json
{"name": "post to Moltbook", "impact": 2, "weight": 0}
```
Or configure your agent runtime to require approval for external actions.
**3. Self-reported state (no verification):**
- `mark-satisfied.sh` trusts caller input
- Risk: State can be manipulated by dishonest calls
- Impact: Only affects this agent's own state accuracy
- **Mitigation:** Enable action logging in `memory/` to audit completions:
```bash
# run-cycle.sh already logs to memory/YYYY-MM-DD.md
# Review logs periodically for consistency
```
### Script Audit (v1.14.4)
**scan_*.sh files verified โ NO network or system access:**
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ curl, wget, ssh, nc, fetch โ NOT FOUND โ
โ โ /etc/, /var/, /usr/, /root/ โ NOT FOUND โ
โ โ .env, .pem, .key, .credentials โ NOT FOUND โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ Used: grep, find, wc, date, jq โ local file ops only โ
โ โ find uses -P flag (never follows symlinks) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Symlink protection:** All `find` commands use `-P` (physical) mode โ symlinks pointing outside WORKSPACE are not followed.
**Scan confinement:** Scripts only read paths under `$WORKSPACE`. Verify with:
```bash
grep -nE "\b(curl|wget|ssh)\b" scripts/scan_*.sh # network tools
grep -rn "readlink\|realpath" scripts/ # symlink resolution
```
---
## Token Usage
```
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ Interval โ Tokens/mo โ Est. cost โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโค
โ 30 min โ 1.4M-3.6M โ $2-6 โ
โ 1 hour โ 720k-1.8M โ $1-3 โ
โ 2 hours โ 360k-900k โ $0.5-1.5 โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโ
```
Stable agent with satisfied needs = fewer tokens.
---
## Testing
```bash
# Run all tests
WORKSPACE=/path/to/workspace ./tests/run-tests.sh
# Unit tests (13): decay, floor/ceiling, tension, tension bounds, tension formula,
# probability, impact matrix, day/night, scrubbing, autonomy coverage,
# crisis mode, scan competence, scan config
# Integration (3): full cycle, homeostasis stability, stress test
# Feature tests (24): starvation guard (11), action staleness (13)
# Total: 40 test cases
```
---
## Version
**v1.20.0** โ Spontaneity Layers A+B+C complete (surplus, noise, context triggers), 57 tests. Full changelog: `CHANGELOG.md`