How Data Flows Through Distilly from User Materials to Agent Hosts
Distilly bundles user-provided skill materials into a validated payload and copies them to host-specific directories, where agent hosts automatically discover and execute the skill package.
Understanding how data flows through Distilly is essential for developers building portable LLM skills. The titanwings/distilly repository implements a multi-stage pipeline that transforms raw user materials—prompts, reference documents, and helper tools—into a standardized bundle consumed by agent hosts like Claude, OpenClaw, and Hermes. This article traces the complete data journey from repository files to active agent execution.
Stage 1: Assembling the Skill Payload
The data flow begins with the payload assembly phase. Distilly defines a complete skill package through the payloadEntries array declared in bin/distilly.mjs (lines 20–30), which enumerates every file and directory required for a functional skill.
The payload includes:
SKILL.md— Metadata manifest containing the skill name, version, description, and required capabilitiesprompts/— Template files (e.g.,intake.md,work_builder.md) that drive LLM reasoningreferences/— Background knowledge documents referenced during executiontools/— Helper scripts written in Python or TypeScript for runtime utilitiesrequirements.txt— Python dependencies for the tools directory- Licensing and supporting configuration files
These entries form the complete bundle that Distilly validates and transports to agent hosts.
Stage 2: Resolving the Target Agent Host
Once the payload is defined, Distilly resolves the installation destination through the hosts map defined at lines 32–51 of bin/distilly.mjs. This mapping translates friendly host names into concrete filesystem paths on the user's machine.
Supported host mappings include:
claude-code→~/.claude/skills/distillyopenclaw→~/.openclaw/workspace/skills/distillyhermes,codex, and other specialized harnesses
The CLI also supports aliases for convenience—claude maps to claude-code, deepseek maps to deepseek-harness, and similar shortcuts—allowing users to run distilly install claude instead of the full host identifier.
Stage 3: Validating and Installing the Bundle
The installation logic, implemented in the validatePayload and install functions (lines 44–67 and 79–86 of bin/distilly.mjs), ensures data integrity before copying files to the host directory.
The validation process performs two critical checks:
- Existence verification — Confirms every entry in
payloadEntriesexists in the repository - Version synchronization — Validates that the version declared in
SKILL.mdmatches the version inpackage.json
After validation, the installer creates a temporary staging directory, copies every payload entry recursively using cpSync (preserving timestamps), and atomically renames the staging folder to the target location. If the target directory already exists, Distilly can create a timestamped backup before overwriting when the --force flag is provided.
# Install with automatic backup of existing version
distilly install claude-code --force
Stage 4: Agent Host Discovery and Execution
Once copied, the agent host automatically discovers the skill because the destination folder must be named exactly distilly—a convention required by all supported hosts. No additional registration code is necessary on the host side.
The host runtime performs the following actions:
- Reads
SKILL.mdto extract metadata (name, version, required capabilities) - Loads prompt templates from the
prompts/subdirectory into the LLM context - Ingests reference documents from
references/for retrieval-augmented generation - Makes helper scripts in
tools/available to the execution pipeline
The skill becomes immediately available through the host's UI or API without restart or manual configuration.
Installation Examples
Install to a supported host with automatic path resolution:
distilly install openclaw
# Copies payload to ~/.openclaw/workspace/skills/distilly
Install to a custom directory bypassing the hosts map:
distilly install --path ~/custom/agents/skills/distilly
Validate the payload without installing:
distilly --check-package
# Runs validatePayload() and confirms "Distilly package payload is valid."
Check the current package version:
distilly --version
# Outputs version from package.json
Key Source Files in the Data Flow
| File | Role | Location |
|---|---|---|
bin/distilly.mjs |
CLI entry point containing payloadEntries, hosts map, and installation logic |
Lines 20–86 |
SKILL.md |
Skill metadata manifest read by both Distilly validator and agent hosts | Repository root |
prompts/ |
LLM prompt templates copied to host | prompts/ directory |
tools/ |
Runtime helper scripts | tools/ directory |
package.json |
Source of truth for version validation | Repository root |
Summary
- Payload assembly relies on the
payloadEntriesarray inbin/distilly.mjsto define what constitutes a complete skill package - Host resolution maps friendly names to filesystem paths via the
hostsvariable, supporting aliases for convenience - Validation ensures version consistency between
SKILL.mdandpackage.jsonbefore any files are copied - Atomic installation uses a staging directory and
cpSyncto prevent partial deployments, with optional timestamped backups - Host discovery requires the destination folder to be named
distilly, enabling automatic loading without host-side configuration
Frequently Asked Questions
How does Distilly determine where to install a skill?
Distilly uses the hosts map defined in bin/distilly.mjs (lines 32–51) to translate command-line arguments like claude-code or openclaw into absolute filesystem paths. You can override this behavior using the --path flag to specify any directory on your system.
What happens if I install a skill multiple times to the same host?
By default, Distilly will overwrite the existing installation. If you provide the --force flag, the installer creates a timestamped backup of the previous version before copying the new payload to ~/.claude/skills/distilly or the equivalent host directory.
Why must the destination folder be named distilly?
The distilly folder name is a hard convention required by all supported agent hosts (Claude, OpenClaw, Hermes, etc.). Hosts scan their skills directories for folders with this specific name and automatically load the SKILL.md metadata and associated resources they find inside.
Can I verify my skill package before installing it?
Yes. Running distilly --check-package executes the validatePayload() function, which checks that all files listed in payloadEntries exist and that the version in SKILL.md matches package.json. This verification happens entirely within the repository without touching host directories.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →