Claude-skill-registry logistic-container
Factorio-style logistics — items flow automatically between containers
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/logistic-container" ~/.claude/skills/majiayu000-claude-skill-registry-logistic-container && rm -rf "$T"
skills/data/logistic-container/SKILL.mdLogistic Container Skill
"The factory grows. Items flow. The world runs itself."
Overview
The Logistic Container skill brings Factorio-style logistics to MOOLLM adventures. Containers participate in a network where items flow automatically between providers and requesters.
The Five Box Types
Like Factorio's colored logistic chests:
| Mode | Color | Emoji | Behavior |
|---|---|---|---|
| passive-provider | Yellow | 📦🟡 | "Take from me if you need" |
| active-provider | Red | 📦🔴 | "I'm pushing these OUT" |
| requester | Blue | 📦🔵 | "I WANT these items" |
| storage | White | 📦⬜ | "General overflow" |
| buffer | Green | 📦🟢 | "Hold until condition met" |
Grid Storage
Containers can manage grids of cells, each holding one item type:
warehouse/ LOGISTIC-CONTAINER.yml # The config iron-ore/ # Auto-created CELL.yml # count: 2500 copper-ore/ CELL.yml # count: 1800 magic-sword/ CELL.yml # instances: [{...}, {...}]
Auto-Creation
When you toss a new item type into a grid container, a new cell directory is created automatically. Like
mkdir -p for items!
grid: enabled: true auto_create_cells: true cell_naming: item-id # iron-ore/ from iron-ore item
Fungible vs Instance Items
Fungible (Just Count)
Identical items — store as a count:
# 500 iron ore, all the same { item: "iron-ore", count: 500 }
Tags that trigger fungible mode:
,raw-material
,currency
,ammo
,commoditystackable
Instance (Keep State)
Items with individual properties — store as array:
# 3 swords, each different { item: "magic-sword", count: 3, instances: [ { id: "sword-001", durability: 85, enchant: "fire" }, { id: "sword-002", durability: 100, enchant: null }, { id: "sword-003", durability: 50, enchant: "ice" } ]}
Tags that trigger instance mode:
,unique
,named
,enchanted
,damagedconfigured
Examples
Pantry (Passive Provider)
logistic-container: id: pantry name: "Kitchen Pantry" mode: passive-provider provides: - tags: ["food", "ingredient"] reserve: 1 # Always keep 1 of each filters: allow: [{ tags: ["food"] }]
Factory Output (Active Provider)
logistic-container: id: assembly-output name: "Assembly Line Output" mode: active-provider push_to: - match: { tags: ["finished"] } destination: "../warehouse/" - match: { tags: ["scrap"] } destination: "../recycling/" - default: "../overflow/"
Workbench (Requester)
logistic-container: id: workbench name: "Crafting Workbench" mode: requester request_list: - item: "iron-plate" count: 20 min: 5 # Request more when below 5 - tags: ["fuel"] count: 10
Warehouse (Grid + Provider)
logistic-container: id: main-warehouse name: "Central Warehouse" mode: passive-provider grid: enabled: true auto_create_cells: true stack_limit: 10000 navigable: true # Players can walk between cells item_handling: default_mode: auto fungible_tags: ["ore", "ingot", "plate"] instance_tags: ["weapon", "armor"]
Loading Dock (Buffer)
logistic-container: id: dock name: "Ship Loading Dock" mode: buffer buffer_for: - destination: "../ship/cargo/" when: "world.ship.docked == true"
Network Participation
Containers only exchange items with others in the same network:
network: factory-a # Only connects to factory-a # Or multiple networks: network: [factory, emergency]
Signals (Circuit Network)
Emit signals about contents for automation:
signals: enabled: true emit: - signal: "iron-count" value: "count of iron-plate" - signal: "is-full" value: "total_items >= capacity"
Other objects can read these signals:
# Door that only opens when warehouse has iron exit: signal_control: open_when: signal: "iron-count" operator: ">" value: 100
Logistics Bots
Characters with
behavior.type: logistic-bot move items between containers:
character: id: courier-kitten behavior: type: logistic-bot roboport: warehouse/#charging-station cargo_slots: 5 range: 10
Bots:
- Find active providers or pending requests
- Pick up items
- Deliver to requesters or push destinations
- Return to roboport when idle
Integration with Exits
Exits can have flow for automatic item transport:
exit: direction: EAST destination: ../warehouse/ flow: enabled: true allow: [{ tags: ["finished"] }]
This creates a "conveyor belt" between rooms!
Related Skills
- container — Simpler container without logistics
- exit — Exits with flow behavior
- character — Logistic bot characters
- object — Inserters and assemblers
- postal — Message-based logistics
Design Document
See factorio-logistics-protocol.md for the full design.