Move AI agents between frameworks without rewriting them. Parse, validate, bridge, and run .fylle packages.
Project description
.fylle
Move AI agents between frameworks without rewriting them.
CrewAI → .fylle → OpenAI. OpenClaw → .fylle → Claude Code. Works today.
What works today
.fylle is a migration compiler for AI agents. You define an agent once in a portable YAML+Markdown format, then import/export it across frameworks.
4 framework adapters, all working:
| Direction | What happens |
|---|---|
| CrewAI YAML ↔ .fylle | Import/export CrewAI agent definitions |
| OpenAI Assistants JSON ↔ .fylle | Import/export OpenAI assistant configs |
| OpenClaw SOUL.md ↔ .fylle | Import/export OpenClaw agent definitions |
| Claude Code workspace ↔ .fylle | Import/export CLAUDE.md + settings + rules |
Core SDK:
- Parser, builder, validator for the
.fylleformat .fyllepackformat for multi-agent workflows- Simple runner (Anthropic + OpenAI live execution)
- 72 tests, all passing
Full migration pipeline:
OpenClaw → .fylle → Claude Code in one command — writes CLAUDE.md, settings.json, rules, and MCP config to disk. Then you run claude and your agent is live.
Try the migration demo in 30 seconds
git clone https://github.com/FylleAI/.fylle.git fylle
cd fylle/sdk/python && pip install -e .
# This is the migration — one command:
python fylle_bridge/demo/run_migration_demo.py --output ./my-agent
# Then use your migrated agent:
cd ./my-agent && claude
No API key needed for the migration. The demo takes a sample OpenClaw agent, converts it through .fylle, and generates a ready-to-use Claude Code workspace.
Add
[bridge]to the install (pip install -e ".[bridge]") if you want live execution with Anthropic or OpenAI APIs.
CLI
After installing, the fylle command is available:
# Scaffold a new agent
fylle init "My Agent"
# Package and validate
fylle pack my-agent/
fylle validate my-agent.fylle
# Migrate between frameworks
fylle migrate --from openclaw --to claude-code SOUL.md -o ./workspace
fylle migrate --from crewai --to openai agents.yaml -o assistant.json
# Inspect a package
fylle inspect my-agent.fylle
Run fylle --help for the full command reference.
How it works
A .fylle file is a ZIP archive containing a complete agent definition:
my-agent.fylle
├── manifest.yaml # Identity, model, inputs/outputs, tools
├── agent.md # System prompt
├── guardrails.yaml # Rules, limits, constraints (optional)
├── skills/ # Modular capabilities (optional)
├── memory-schema.yaml # What the agent remembers (optional)
└── README.md # Documentation (optional)
It's YAML and Markdown. Any runtime reads what it understands, ignores the rest.
Define an agent
# manifest.yaml
fylle_format: "0.1.0"
agent:
name: "Content Curator"
version: "1.0.0"
description: "Finds and curates relevant content for newsletters"
role: "Research Specialist"
model:
preferred: "claude-sonnet-4-5"
minimum_capability: ["tool-use"]
settings:
temperature: 0.7
prompt_file: "agent.md"
inputs:
- name: "topic"
type: "text"
required: true
description: "What to research"
tools:
required:
- name: "web_search"
protocol: "mcp"
description: "Search the web for current information"
guardrails:
max_autonomy: "draft-only"
limits:
max_iterations: 30
Migrate between frameworks
from fylle_bridge import crewai_to_fylle, fylle_to_openai
# CrewAI YAML → .fylle → OpenAI Assistant JSON
agent = crewai_to_fylle({
"researcher": {
"role": "Analyst",
"goal": "Research trends",
"backstory": "You are an expert analyst..."
}
})
openai_config = fylle_to_openai(agent)
# Or from an existing CrewAI YAML file:
from fylle_bridge import crewai_to_fylle_yaml
agent = crewai_to_fylle_yaml("my_crew/agents.yaml")
from fylle_bridge import openclaw_to_fylle, fylle_to_claude_code
# OpenClaw SOUL.md → .fylle → Claude Code workspace
agent = openclaw_to_fylle(open("SOUL.md").read())
workspace = fylle_to_claude_code(agent)
# → CLAUDE.md, settings.json, rules/*.md, .mcp.json
Run the bridge demo
cd sdk/python
pip install -e ".[bridge]"
# Dry run (no API key needed)
python fylle_bridge/demo/run_demo.py --dry-run
# Live execution
ANTHROPIC_API_KEY=sk-... python fylle_bridge/demo/run_demo.py
Two formats
.fylle |
.fyllepack |
|
|---|---|---|
| What | A single agent | A multi-agent workflow |
| Contains | manifest + prompt + skills | manifest + pipeline + N agents |
| Use case | "I need a content curator" | "I need a full content pipeline" |
newsletter-creator.fyllepack
├── manifest.yaml
├── agents/
│ ├── curator.fylle
│ ├── writer.fylle
│ └── reviewer.fylle
├── brief_schema.yaml
└── README.md
Relationship to other standards
.fylle is not trying to replace any framework — it sits between them as a translation layer.
| Standard / Framework | Relationship |
|---|---|
| CrewAI | Bidirectional adapter. Import/export CrewAI YAML definitions |
| OpenAI Assistants | Bidirectional adapter. Import/export assistant JSON configs |
| OpenClaw | Bidirectional adapter. Import/export SOUL.md agent definitions |
| Claude Code | Bidirectional adapter. Import/export CLAUDE.md + full workspace |
| Claude Agent SDK | Planned adapter. Next priority |
| LangGraph | Planned adapter. Graph-based workflow mapping |
Status
Done:
- Format specification v0.1.0
- Python SDK — parser, builder, validator
.fyllepackmulti-agent format- CrewAI adapter (import + export)
- OpenAI Assistants adapter (import + export)
- OpenClaw adapter (import + export)
- Claude Code adapter (import + export)
- Simple runner (Anthropic + OpenAI)
- OpenClaw → Claude Code full migration pipeline
- Python CLI (6 commands: validate, inspect, pack, unpack, init, migrate)
- 83 tests passing
Coming:
.fyllepackrunner (multi-agent orchestration)- Claude Agent SDK adapter
- LangGraph adapter
- Fylle Hub (agent registry)
Project structure
.fylle/
├── spec/
│ └── SPECIFICATION.md # Format specification v0.1.0
├── examples/
│ ├── content-curator/ # Single agent example
│ ├── compliance-checker/ # Agent with guardrails
│ └── newsletter-pack/ # Multi-agent workflow
├── sdk/python/
│ ├── fylle/ # Core SDK (parse, validate, build)
│ ├── fylle_bridge/ # Framework adapters + runner
│ │ ├── adapters/ # CrewAI, OpenAI, OpenClaw, Claude Code
│ │ ├── runner/ # Live agent execution
│ │ └── demo/ # Bridge demo + migration demo
│ ├── fylle_cli/ # CLI (validate, inspect, pack, migrate...)
│ └── tests/ # 83 tests
├── assets/
│ └── demo.gif # Migration demo recording
└── LICENSE # Apache 2.0
Why this exists
We build AI-powered content workflows at Fylle. Our agents were locked inside one framework — every time the API changed or something better came out, we had to rewrite everything.
.fylle started as our internal migration tool. We open-sourced it because if you work with AI agents across multiple frameworks, you probably have the same problem.
Contributing
See CONTRIBUTING.md. PRs for new framework adapters are especially welcome.
License
Apache 2.0 — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fylle-0.1.0.tar.gz.
File metadata
- Download URL: fylle-0.1.0.tar.gz
- Upload date:
- Size: 42.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5be6e302caf9e914b4fc3500221c0f77a019a81fa0c63aaf924854005965b68
|
|
| MD5 |
6d6d6387ecb301cd4ea857459ef99f56
|
|
| BLAKE2b-256 |
f6408bab643f04315016c94de8e2bfdf089f9b55cdb9391d25c437e1ecf8aaa8
|
File details
Details for the file fylle-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fylle-0.1.0-py3-none-any.whl
- Upload date:
- Size: 45.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ca0fca8039c2664285eb8f17a29b1c1eeef8fb874b329714792f26ae780c6c3
|
|
| MD5 |
ee550160172f7457387e8eef4e0a3cea
|
|
| BLAKE2b-256 |
8b1c7e84ee330d13ddd49982a9ca4aaa8203cdac6475f7a951a5f5838afcfa02
|