skill
A skill is documentation that learned to do things.
معلومات المصدر
- المستودع
- SimHacker/moollm
- آخر نشاط في المصدر
- ٢٤ أبريل ٢٠٢٦ في ١٣:٥٣
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٦٠
- التفرعات
- ٥
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
مستكشف الملفات
10 ملفاتعرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- skill
- description
- A skill is documentation that learned to do things.
- license
- MIT
- permissions
- ["files"]
- allowed-tools
- ["read_file","write_file"]
- related
- ["moollm","prototype","incarnation","play-learn-lift","sister-script","sniffable-python","plain-text","speed-of-light","constructionism","empathic-templates","file-system-object"]
- tags
- ["moollm","meta","program","capability","anthropic"]
- credits
- ["David Ungar & Randall Smith — Self language (1987)","Seymour Papert — Constructionism","Marvin Minsky — K-lines, Society of Mind","Anthropic — Skills model foundation"]
# SKILL
> **"A skill is documentation that learned to do things."**
The meta-protocol: how skills work, how they evolve, how they compose, and how MOOLLM advances the state of the art.
---
## Foundation: What We Share with Anthropic
MOOLLM skills build on Anthropic's excellent Skills model foundation:
| Anthropic Principle | MOOLLM Implementation | Shared Why |
|---------------------|----------------------|------------|
| **Documentation-first** | `README.md` + `SKILL.md` | Explain before automating |
| **Tool definitions** | YAML frontmatter + `CARD.yml` | Machine-readable specs |
| **Composability** | Prototype inheritance + dovetails | Complex from simple |
| **Human gates** | `PLAN-THEN-EXECUTE` protocol | Trust but verify |
| **Skill libraries** | `skills/` directory | Central, shareable |
**The foundation is sound.** MOOLLM adds to it (see sections 1-10 below).
---
## MOOLLM's Unique Contributions
### 1. Skills as Prototypes (Self-like Inheritance)
> *"Objects all the way down."* — David Ungar
Traditional skills are static documentation. **MOOLLM skills are prototypes that create instances:**
```yaml
# Prototype (the skill)
skills/adventure/
├── SKILL.md # The documentation
├── CARD.yml # The interface
└── *.tmpl # The templates
# Instance (created BY the skill)
examples/adventure-4/
├── ADVENTURE.yml # Instantiated from template
├── characters/ # Populated during play
├── pub/ # A room instance
└── sessions/ # State over time
```
**Why this matters:**
- Skills aren't just docs — they're **factories**
- Instances inherit from prototypes but can override
- State lives in instances, behavior in prototypes
- Changes to prototypes automatically enhance all instances
See: [delegation-object-protocol.md](./delegation-object-protocol.md)
---
### The Semantic Image Pyramid: Multi-Resolution Reading
Like image pyramids in computer vision, skills and entities have **multiple resolutions** for different needs:
```mermaid
flowchart TB
subgraph GLANCE ["👁️ GLANCE (~5-70 lines)"]
G["INDEX entry or GLANCE.yml<br/>'Is this relevant?'"]
end
subgraph CARD ["📇 CARD.yml (~50-200 lines)"]
C["Interface, methods, advertisements<br/>'What can it do?'"]
end
subgraph SKILL ["📜 SKILL.md (~200-1000 lines)"]
S["Full protocol, examples<br/>'How does it work?'"]
end
subgraph README ["📚 README + resources (~500-5000+ lines)"]
R["Deep context, history, rationale<br/>'Why was it built?'"]
end
G --> C --> S --> R
```
**GLANCE is the eyeball** — the smallest useful unit:
- For skills: INDEX.yml entry (~5 lines per skill)
- For characters: GLANCE.yml (~50-70 lines vs 941)
- For rooms: GLANCE.yml (~50-70 lines vs 930)
**Reading Order (top-down):**
| Level | File | Lines | Use When |
|-------|------|-------|----------|
| 👁️ GLANCE | INDEX.yml entry / GLANCE.yml | 5-70 | "What is this?" Quick scan |
| 📇 CARD | CARD.yml | 50-200 | "What can it do?" Interface check |
| 📜 SKILL | SKILL.md | 200-1000 | "How does it work?" Protocol details |
| 📚 DEEP | README.md + resources | 500-5000+ | "Why?" Full context |
**The Rule:** Never load a lower level without first loading the level above it.
**For Boot Optimization:**
- skills/INDEX.yml gives you GLANCE for all 110+ skills
- Load CARDs only for skills you'll use
- Load SKILLs only when you need protocol details
- Load README only for archaeology
See: [bootstrap/SKILL.md](../bootstrap/SKILL.md) for GLANCE protocol
---
### 2. Cards: Playable Capability Bundles
Skills become **cards** that can be played, traded, collected:
```yaml
# CARD.yml — The interface contract
card:
id: adventure
name: "Text Adventure"
type: [skill, game, narrative]
emoji: 🎲
rarity: rare
methods:
EXPLORE: { description: "Move to adjacent room" }
EXAMINE: { description: "Look at something" }
TAKE: { description: "Pick up an object" }
advertisements:
NARRATIVE-EXPLORATION:
score: 90
condition: "Want interactive fiction"
```
**Why this matters:**
- Clear interface contract
- Advertised capabilities (like Sims objects!)
- Can be played, stacked, combined
- Machine-readable for orchestration
---
### 3. K-lines: Names as Activation Vectors
> *"A K-line is a wire-like structure that attaches to whichever mental agencies are active when you solve a problem."* — Marvin Minsky
When you invoke a skill by name, you activate its **entire knowledge context**:
```markdown
> Apply YAML-JAZZ to this configuration.
# This single name activates:
# - The semantic commenting philosophy
# - The specific syntax patterns
# - The examples and anti-patterns
# - The emotional tone (jazzy, improvisational)
# - Related concepts (POSTEL, soul-chat)
```
**When you instantiate a character, their name becomes their K-line.** "Palm" activates everything about Palm — history, personality, goals, relationships, the incarnation story.
**Why this matters:**
- Names are more than labels — they're **semantic activations**
- Context flows from invocation
- Related concepts automatically available
- The LLM's associative memory works FOR us
---
### 4. Ambient Skills: Always-On Behavioral Shaping
> *"Like air filters that clean continuously, not just when you smell smoke."*
Some skills should be "in the air" — always available, always shaping output without explicit invocation. These are **ambient skills**.
**The Key Insight:** AMBIENT is an advertisement type!
This fits perfectly because:
- Advertisements already have scores and conditions
- The orchestrator already knows how to process advertisements
- It's semantically accurate — the skill is literally advertising "I want to be in context"
**Declaring an Ambient Skill:**
```yaml
# In CARD.yml
advertisements:
# Regular advertisements (invoked on demand)
CREATE-SKILL:
score: 90
condition: "Need to make a new reusable capability"
# AMBIENT advertisement (always in context)
AMBIENT:
score: 100 # Priority for context budget
condition: always # Or: "when writing YAML"
scope: session # How long it persists
resolution: summary # How much to keep in context
```
**AMBIENT Advertisement Fields:**
| Field | Options | Meaning |
|-------|---------|---------|
| `score` | 0-100 | Priority for context budget (higher = kept longer) |
| `condition` | `always`, condition string | When to activate |
| `scope` | `session`, `conversation`, `room`, `card-only` | Persistence duration |
| `resolution` | `full`, `summary`, `sniff`, `card-only` | How much to load |
**Examples of Ambient Skills:**
```yaml
# no-ai-slop: Always on, syntactic hygiene
AMBIENT:
score: 100
condition: always
scope: session
resolution: card-only # Just the cardinal sins list
# yaml-jazz: When writing YAML
AMBIENT:
score: 90
condition: "when writing or editing YAML files"
scope: conversation
resolution: summary
# representation-ethics: When simulating real people
AMBIENT:
score: 95
condition: "when portraying real people or sensitive topics"
scope: conversation
resolution: full
```
**Orchestrator Behavior:**
The orchestrator handles AMBIENT advertisements by:
1. **Collecting**: Gather all AMBIENT ads from loaded skills
2. **Evaluating**: Check conditions against current context
3. **Sorting**: Order by score (highest priority first)
4. **Loading**: Include skills at their declared resolution until context budget exhausted
5. **Refreshing**: Re-evaluate on context change (new room, new topic, etc.)
**The Standard Schema Advantage:**
Because CARD.yml follows a **standard schema**, a smart orchestrator can:
1. Parse all advertisements programmatically
2. Find AMBIENT declarations automatically
3. Operationalize them without LLM intervention
4. **Inject them invisibly into the LLM's brain**
This is the "magic places" principle — structured locations (like `advertisements.AMBIENT`) where the orchestrator knows to look.
**Two Modes: Smart vs Dumb Orchestrators**
| Orchestrator | AMBIENT Handling | LLM Experience |
|--------------|------------------|----------------|
| **MOOCO (smart)** | Driver parses CARDs, injects automatically | Invisible — "I will inject them into your brain" |
| **Cursor (dumb)** | Advisory mode, manual hot list | Visible — LLM manages context manually |
**Smart Orchestrator (MOOCO) Promise:**
The custom driver says to the LLM:
> *"Don't worry about looking at ambient skills with the file tool.*
> *I will inject them into your brain continuously."*
The LLM never sees the mechanism. The CARD is just... there. Always.
**Dumb Orchestrator (Cursor/Claude Code) Fallback:**
We can't control these orchestrators, so:
1. **Declare AMBIENT in CARD.yml** — the skill advertises its ambient nature
2. **Manual hot list** — keep important CARDs in `.moollm/hot.yml` or working set
3. **Resolution field** — skill declares how much of itself to keep paged in (`card-only`, `summary`, `full`)
4. **Trust the LLM** — once the CARD is in context, the LLM knows to apply its constraints
This is "throw down the gauntlet" architecture: **if you want ambient, define an AMBIENT advertisement.** The mechanism adapts to the orchestrator.
**Why Not a Separate AMBIENT.yml?**
We considered a layered wake-up system:
- `AMBIENT.yml` — compressed activation file (always paged in)
- Triggers loading `SKILL.md` → resources → templates
- Dynamic scoring, context gates, resource bundles
**Rejected because:**
- Standard CARD.yml schema already enables smart orchestration
- Smart orchestrator can parse the ads directly from CARD
- Dumb orchestrators need manual management anyway
- One file (CARD.yml) works in both modes
- The existing advertisement system perfectly solves the problem with preconditions, scores, priorities, already, so we don't have to reimplement it for AMBIENT.yml
**The Design Elegance:**
Same CARD.yml, different runtimes:
- **MOOCO**: Orchestrator reads AMBIENT ads, injects them
- **Cursor**: Advisory mode, LLM manages manually
- **Future custom**: Any orchestrator can parse the standard schema
**The Air Cleaner Metaphor:**
| Type | What It Filters | Condition |
|------|-----------------|-----------|
| `no-ai-slop` | Syntactic sludge | always |
| `no-ai-gloss` | Semantic sludge (euphemism) | always |
| `postel` | Robustness failures | always |
| `yaml-jazz` | Bad YAML structure | when writing YAML |
| `representation-ethics` | Harmful portrayals | when simulating people |
**Why Ambient as Advertisement:**
1. **Unified mechanism**: No special "ambient" field needed — just a special advertisement
2. **Natural scoring**: Context budget allocation uses existing priority system
3. **Conditional activation**: Same condition evaluation as other ads
4. **Composable**: Ambient ads interact with other ads through normal scoring
**The `no-ai-*` Namespace:**
Ambient skills that enforce behavioral boundaries follow the `no-ai-*` naming pattern:
```yaml
no-ai-slop: # Syntactic hygiene
AMBIENT: { score: 100, condition: always }
no-ai-gloss: # Semantic hygiene
AMBIENT: { score: 100, condition: always }
no-ai-sycophancy: # (future) Social hygiene
AMBIENT: { score: 95, condition: always }
```
These are **ambient refusals** — always-on constraints that prevent specific harms.
---
### 5. Empathic Templates: Smart Instantiation
> *"Templates that understand what you mean, not just what you wrote."*
Traditional templates: `{{name}}` → literal substitution
Empathic templates: `{{describe_character}}` → **intelligent generation**
```yaml
# Template
description: |
{{describe_appearance_based_on_species_and_personality}}
# Context
species: "Golden Retriever mix"
personality: ["enthusiastic", "loyal", "goofy"]
# Generated
description: |
Biscuit is a fluffy, perpetually happy Golden Retriever mix with
eyes that sparkle with boundless enthusiasm. His tail is in a
constant state of wagging, a furry metronome of joy.
```
**Why this matters:**
- Not string substitution — **semantic generation**
- LLM adds value during instantiation
- Context informs content
- Results are coherent, not mechanical
See: [../empathic-templates/](../empathic-templates/)
---
### 6. Multi-Tier State Persistence
Skills persist state at multiple levels (this is unique to MOOLLM):
| Tier | Location | Lifespan | Use |
|------|----------|----------|-----|
| **Platform** | Cursor session | Ephemeral | Working memory |
| **Narrative** | `LOG.md`, `TRANSCRIPT.md` | Read-mostly | Data islands, events |
| **State** | `*.yml` files | Read-write | Characters, rooms, inventory |
**Data Islands:** Objects embedded in logs with `#object-id` addressing:
```yaml
# LOG.md embedded object — addressable as LOG.md#session-artifact
id: session-artifact
type: skill-output
patterns_found:
- "API requires auth header"
```
**Promotion Pattern:** If you need to edit it, promote to `.yml` file.
**Why this matters:**
- Right persistence for right data
- Logs stay read-only (audit trail)
عرض على GitHubملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub