用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/SimHacker/moollm --skill container命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | container |
| description | Intermediate scope for inheritance — like OpenLaszlo's <node> |
| license | MIT |
| tier | 1 |
| allowed-tools | ["read_file","write_file"] |
| related | ["room","object","adventure","prototype","logistic-container"] |
| tags | ["moollm","scope","inheritance","hierarchy","composition"] |
Intermediate scopes that provide inheritance without being navigable rooms.
Containers are directories that define shared properties for their children, without themselves being places you can "go to."
In OpenLaszlo (Don Hopkins' earlier work!), <node> was a fundamental building block:
<!-- OpenLaszlo: <node> provides inheritance without visual layout -->
<node name="mazeDefaults">
<attribute name="isDark" value="true"/>
<attribute name="hasDanger" value="true"/>
</node>
<view extends="mazeDefaults">
<!-- Inherits isDark, hasDanger -->
</view>
MOOLLM's CONTAINER.yml does the same for adventure directories:
# maze/CONTAINER.yml
container:
name: "The Twisty Maze"
inherits:
is_dark: true
is_dangerous: true
grue_rules:
can_appear: true
All rooms inside maze/ automatically inherit these properties!
| Type | File | Navigable? | Inherits to children? |
|---|---|---|---|
| Room | ROOM.yml | ✅ Yes | ❌ No |
| Container | CONTAINER.yml | ❌ No | ✅ Yes |
| Meta | .meta.yml | ❌ No | ❌ No (just metadata) |
Use Container when:
Use Room when:
Use .meta.yml when:
Properties in inherits: flow to ALL descendants:
maze/
├── CONTAINER.yml # inherits: { is_dark: true }
├── room-a/
│ └── ROOM.yml # Inherits is_dark: true
├── room-b/
│ └── ROOM.yml # Inherits is_dark: true
└── deep/
└── CONTAINER.yml # Can add MORE inherits
└── room-c/
└── ROOM.yml # Inherits from BOTH containers!
Children can override inherited values:
# maze/room-f/ROOM.yml
room:
name: "The Treasure Chamber"
is_dark: false # Override! This room has magical light
For objects and arrays, inheritance MERGES:
# maze/CONTAINER.yml
container:
inherits:
rules:
- "Grues patrol in darkness"
# maze/room-g/ROOM.yml
room:
rules:
- "This room has a pit trap" # ADDS to inherited rules
Result: room-g has BOTH rules.
| Field | Purpose |
|---|---|
inherits | Properties that children GET automatically |
defaults | Values to use IF a child doesn't define them |
container:
# Every child room IS dark (forced)
inherits:
is_dark: true
# If a room doesn't define atmosphere, use this
defaults:
room:
atmosphere: "damp and musty"
# maze/CONTAINER.yml
container:
name: "The Twisty Maze"
description: "Passages all alike... or are they?"
inherits:
is_dark: true
is_dangerous: true
grue_rules:
can_appear: true
safe_with_light: true
rules:
- "No teleportation"
- "Breadcrumbs disappear after 3 turns"
- "Echoes alert nearby rooms"
ambient:
sound: "dripping water"
smell: "wet stone"
temperature: cold
# characters/animals/CONTAINER.yml
container:
name: "Animal Characters"
description: "Non-human beings with souls"
inherits:
type: animal
has_instincts: true
defaults:
character:
can_speak_human: false
pet_able: true
diet: omnivore
# kitchen/appliances/CONTAINER.yml
container:
name: "Kitchen Appliances"
inherits:
type: appliance
requires_power: true
defaults:
object:
breakable: true
fixable_with: "wrench"
When looking up a property:
CONTAINER.yml in parent dirADVENTURE.yml defaultsmaze/deep/room-c/ROOM.yml
↓ inherits from
maze/deep/CONTAINER.yml
↓ inherits from
maze/CONTAINER.yml
↓ inherits from
ADVENTURE.yml (if it has defaults)
↓ inherits from
skills/room/ROOM.yml.tmpl
The linter recognizes CONTAINER.yml:
📂 Phase 1: Discovery
Found: 36 rooms, 54 objects, 6 characters
Found: 2 containers # NEW!
Containers suppress the "missing type declaration" warning:
# Before: maze/ triggers warning
⚠️ Directory has room children but no ROOM.yml
# After: maze/CONTAINER.yml exists
✅ maze/ is a container (not a room)
<node> element as non-visual scope