Skip to main content

card

Portable tokens of capability, identity, and access

来源信息

仓库
SimHacker/moollm
最近来源活动
2026年4月24日 15:02
检测到的 SKILL.md 语言
英语
星标
60
Forks
5

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
47 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
card
description
Portable tokens of capability, identity, and access
allowed-tools
["read_file","write_file","list_dir"]
tier
1
protocol
TRADING-CARD
related
["skill","prototype","room","character","party","soul-chat","adventure","multi-presence","advertisement","return-stack"]
tags
["moollm","gamification","capabilities","portable","actor"]
templates
[{"file":"CARD.yml.tmpl","purpose":"Individual card template"},{"file":"COLLECTION.yml.tmpl","purpose":"Card collection template"}]
# Card > **Portable tokens of capability, identity, and access.** Cards are templates. Put them "in play" in a [room](../room/) to activate them. > [!TIP] > **Hero-stories.** Actors. Safe pointers to wisdom. No risks of impersonation, just tribute, storytelling, skill sharing and composing. --- ## The Card Pun Stack — What A CARD Is "Card" elegantly puns across a stack of well-proven computing concepts. MOOLLM's CARD sits at the intersection of all of them, and borrows from each. Take the richness as intentional: | Lineage | What it contributes | How it shows up in `CARD.yml` | |---|---|---| | 🎴 **HyperCard** (Bill Atkinson, 1987) | A card as a **self-contained navigable unit** with fields, buttons, scripts — a little interactive object you can page through, link to, and stack. "Everything is a card." | `card:` identity, `navigation:`, `advertisements:` that surface actions the way HyperCard buttons did | | 💾 **Type Library / IDL / ActiveX / OLE Control** (Microsoft, 1990s) | **Dispatch metadata** describing an object's interface: its methods, properties, events, IDs. Binary in COM; human-readable YAML for us. | `methods:`, `state:`, `k_lines:` (our stand-in for UUIDs), `inherits:` (analog to COM aggregation) | | 🎭 **Actor** (Hewitt 1973; Agha 1986) | A **message-receiving autonomous entity** with its own state, responding to messages by sending messages or changing state. Concurrency is inherent. | The whole card is an actor signature; advertisements describe the messages this actor handles | | 🧵 **Thread / Process** | A **unit of control** with its own identity, lifecycle, and dispatchable surface. | Cards are dispatchable in parallel; `state:` is the actor-thread's local memory | | 📬 **Message Dispatching Surface** (Smalltalk/Self/Objective-C) | The OO insight: methods aren't called, **messages are sent**, and the receiver decides what to do. Late binding, polymorphism, duck typing. | `methods:` ≠ functions; they're the messages this card responds to. DOP delegation composes dispatch across parent cards. | | 🃏 **Trading / Playing Card** | **Portable token of identity and capability** — you collect them, play them, trade them. Front = identity/rarity; back = mechanical rules. | `rarity:`, `tier:`, `emoji:`, `tagline:`, the whole collectible ethos (hero-stories, soul-chat) | | 🎯 **Business Card / Index Card** | **Sniffable surface.** Hand it to someone, they know who you are, how to reach you, what you do. | `tagline:`, `description:`, the entire "sniffable interface" framing | A CARD is **all of these at once** — that's the design, not accident. When you encounter a `CARD.yml`, you're looking at: - an **interface definition** (like IDL) describing a dispatchable surface, - a **HyperCard** you can navigate to, activate, and page through, - an **actor signature** describing a message-receiving entity with local state, - a **type library entry** in a distributed, human-readable, zero-ceremony registry (the filesystem itself), - a **collectible token** with rarity, identity, and portability, and - a **business card** you can hand to a reader (human or LLM) to say "this is what I am and what I do." The richness is load-bearing. Every time you write `methods:`, `advertisements:`, `k_lines:`, or `inherits:`, you're simultaneously: - declaring an interface (IDL-style), - describing an actor's message-handling surface (Hewitt-style), - exposing navigation/activation triggers (HyperCard-style), - publishing metadata that tooling and LLMs can sniff without execution (TypeLib-style), - presenting a portable token of identity (trading-card-style). This is why a CARD-only directory (no `SKILL.md`) is already a first-class dispatchable object. The CARD isn't documentation for the skill — it **is** the skill's interface, actor, card, type library, and business card rolled into one YAML file. > 💡 *The other meta-skills (`skill`, `prototype`, `schema`, `file-system-object`) each name one aspect of the MOOLLM object system. `card` names the interface-and-actor surface itself — the CARD is the handle by which everything else is invoked.* --- ## 📑 Index **Architecture** - [The Card Pun Stack — What A CARD Is](#the-card-pun-stack--what-a-card-is) - [Card Architecture](#card-architecture) — The most important section! - [Recommended Section Order](#recommended-section-order) - [What Goes Where](#what-goes-where) - [Advertisements Before Methods](#advertisements-before-methods) - [Method Placement Rules](#method-placement-rules) **Card Types** - [What's a Card?](#whats-a-card) - [Sidecar Pattern](#sidecar-cardyml-pattern) - [Card Types](#card-types) **Mechanics** - [Activation Records](#activation-records) - [Card State](#card-state) - [Collections](#collections) --- ## Card Architecture > **KEY INSIGHT: Cards are ACTIVATION TRIGGERS, not activation handlers.** This is the most important concept in MOOLLM card design. ### The Fundamental Distinction | | CARD.yml | SKILL.md | |--|----------|----------| | **Purpose** | Decide IF this skill applies | Explain HOW to execute | | **Role** | Activation trigger | Activation handler | | **Content** | Sniffable interface | Full documentation | | **Size** | ~150-200 lines | As needed | | **LLM reads** | First, to decide | Second, if activated | The CARD asks: "Does this situation call for me?" The SKILL.md answers: "Here's how to actually do it." ### Recommended Section Order Order sections for optimal LLM scanning: ```yaml # 1. Identity (who am I?) card: id: my-skill name: "My Skill" emoji: 🎯 tagline: "One-line pitch" description: "Brief paragraph" # 2. Files index (what else should LLM read?) files: - SKILL.md - examples/ # 3. K-lines (what concepts does this activate?) k-lines: activates: [MY-SKILL, RELATED-CONCEPT] # 4. Invoke when (trigger conditions) invoke_when: - "Situation that calls for this skill" # 5. ADVERTISEMENTS — PRIMARY! Put BEFORE methods! advertisements: DO-THE-THING: score: 90 condition: "When this applies" # 6. Methods (signatures only, implementations in SKILL.md) methods: DO-THING: { signature: "DO-THING [arg]" } # 7. State (brief field list) state: fields: [field1, field2] # 8. Documentation pointers documentation: SKILL.md: - "§ Detailed section" ``` ### Why Advertisements Before Methods? Advertisements are the **PRIMARY activation signal**: 1. LLM scans top-down looking for "does this apply?" 2. Ads answer that question directly 3. Methods are secondary — only relevant AFTER activation 4. Front-loading ads speeds up skill selection ```yaml # GOOD — Ads first advertisements: PET-THE-CAT: score: 80 condition: "Cat is present" methods: PAT: { signature: "PAT [cat]" } # BAD — Methods first (LLM has to read past them) methods: PAT: { ... long list ... } SCRITCH: { ... } # ... many more ... advertisements: # Too late! LLM already moved on ``` ### What Goes Where #### In CARD.yml (sniffable interface) ```yaml # YES — Include these - Brief description + tagline - Files index (for one-shot activation) - K-lines (activation vectors) - Advertisements (PRIMARY!) - Method SIGNATURES (one-liners) - Brief state schema (field names only) - Documentation pointers # NO — Move these to SKILL.md - Implementation details - Detailed protocols with sequences - Dispatch tables - Dialogue examples - Full state schemas with types - Worked examples ``` #### In SKILL.md (full documentation) ```markdown - ## 📑 Index (link to each section) - Detailed method implementations - Protocols with step sequences - Dispatch tables (actor_verb_target) - State schemas with types and defaults - Integration points with other skills - Mechanics explanations ``` #### In examples/ (worked examples) ```yaml # Separate files with descriptive names examples/ ceremony-invocation.yml # Good! buff-chain-trigger.yml # Good! example1.yml # Bad — not descriptive ``` ### Method Placement Rules | Situation | Place In | Example | |-----------|----------|---------| | Short signature | CARD methods | `PAT: { signature: "PAT [cat]" }` | | Trivial inline | Advertisement | `method: "PAT [nearest-pet]"` | | Detailed protocol | SKILL.md | Dispatch tables, sequences | | Multiple variants | SKILL.md | Species-specific versions | | Dispatch table | SKILL.md | `cat_sniffs_dog`, etc. | #### Embed in CARD when: - Method is SHORT (one-liner signature) - Method is UNIQUE to this skill - Just showing signature, not implementation #### Embed in advertisement when: - Method is TRIVIAL (buff, reply, simple prompt) - Method is AD-SPECIFIC (only makes sense in this trigger) #### Delegate to SKILL.md when: - Method has DETAILED protocol (sequences, tables) - Method is SHARED with other skills - Method has multiple VARIANTS - Method needs EXAMPLES to understand ### Target Card Size ```yaml card_yml: ~150-200 lines skill_md: As long as needed, but indexed examples: Separate files, descriptively named smell: "If CARD > 300 lines, refactor" ``` --- ## What's a Card? Cards are **portable tokens** you can carry, give, play, and activate. ### The Card Intersection CARD.yml sits at the intersection of *many* card traditions, each contributing essential meaning: | Tradition | What It Contributes | In CARD.yml | |-----------|---------------------|-------------| | **PC Board Card** | Slot/interface — plugs into a system | Cards plug into rooms, skills, activations | | **HyperCard** | Navigable unit of content | Each card is a stack, browsable, clickable | | **Playing Cards** | Combinable, playable, deckable | Cards compose into decks, hands, plays | | **Magic: The Gathering** | Abilities, costs, types, combos | Methods, state, synergies, triggered effects | | **Pokémon** | Creatures with stats, evolution | Characters with sims_traits, mind_mirror, growth | | **Fluxx** | Cards that change the rules | Meta-cards that modify the game itself | | **Tarot** | Archetypal symbols, prompts | K-lines as archetypal activation | | **Business Cards** | Contact, credentials, intro | Hero-Story cards introduce traditions | | **Key Cards** | Access tokens | Room access, capability gates | | **Hollerith Cards** | Data as physical artifact | YAML as punchable, portable data | **The genius is the layering.** When you create a CARD.yml, you're creating: - An **interface slot** (PC board) that plugs into the MOOLLM system - A **navigable document** (HyperCard) that LLMs can browse and activate - A **playable piece** (playing card) that can be dealt, held, played - A **creature with abilities** (MTG/Pokémon) that has stats and moves - A **rule modifier** (Fluxx) that can change the game - An **archetypal pointer** (Tarot/K-line) that invokes patterns - An **access token** (key card) that grants capabilities All at once. Different contexts activate different metaphors. ### Card Examples by Tradition | Type | Examples | |------|----------| | **Trading cards** | Hero-Story cards for real people's traditions | | **Playing cards** | Actions, abilities, spells to play | | **Magic: The Gathering** | Complex cards with costs, effects, combos | | **Pokémon cards** | Characters with stats, moves, evolution | | **Fluxx cards** | Rule-changing cards — play to modify the game itself | | **Tarot cards** | Archetypal symbols, prompts for reflection | | **Business cards** | Contact info, credentials, introductions | | **Pleasure cards** | Memberships, VIP access, perks | | **Key cards** | Access tokens for rooms and resources | | **Receipts** | Proof of transaction, claim tickets | | **Tickets** | Entry passes, reservations, permissions | | **Coupons** | Redeemable capabilities, discounts | | **Hollerith cards** | Punch cards — data as physical holes! | | **QR codes** | Scannable data, links, actions | | **Wallet cards** | Apple/Google Pay — phone as card carrier | A card is anything you can **carry in your inventory** and **play when needed**. --- ## Sidecar CARD.yml Pattern Any entity that lives in a directory can have a **sidecar `CARD.yml`** file that makes it card-playable: ``` pub/ ├── ROOM.yml # The room definition ├── CARD.yml # Makes the pub a playable card! └── ... characters/don-hopkins/ ├── CHARACTER.yml # Character definition ├── CARD.yml # Don's trading card representation └── ... objects/magic-lamp/ ├── OBJECT.yml # Lamp definition ├── CARD.yml # Card for summoning/playing the lamp └── ... ``` ### Why Sidecars? - **Separation of concerns** — Entity definition vs. card representation - **Optional** — Not everything needs to be a card - **Composable** — Same entity, multiple views - **Portable** — Card data can reference the entity by path ### Sidecar Card Schema ```yaml # pub/CARD.yml — makes the pub a playable card card: for: ./ROOM.yml # What this card represents type: location-card # Card type # Card-specific presentation name: "Gezelligheid Grotto" art: "cozy-coffeeshop.png" flavor: "Where good vibes flow like espresso" # What playing this card does advertisements: VISIT: description: "Teleport party to this location" effect: "Set party.location = pub/" SUMMON: description: "Bring the pub's vibe to current room"
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看