Resources
6Install
npx skillscat add simhacker/moollm/logistic-container Install via the SkillsCat registry.
We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing language, no superlatives, no calls to action. At most 60 words. No markdown formatting, no bullet points, no headings, no quotes. Just the summary text. We need to explain what the skill does, what problem it solves, when to use it. So something like: "The logistic-container skill enables automatic item flow between containers in a grid, supporting both fungible and instance items. It solves the problem of manual inventory management by providing provider, requester, storage, and buffer modes.
Logistic 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 itemFungible 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,commodity,stackable
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,damaged,configured
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: 10Warehouse (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: 100Logistics 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: 10Bots:
- 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.