The autonomous agent framework that doesn't mess around. Build once, deploy everywhere.
Powered by Quicksilver โ our open-source framework that bridges Large Language Models (LLMs) with Decentralized Physical Infrastructure Networks (DePINs) to create advanced AI agents.
Originally forked from ElizaOS โ credits to the pioneering work that laid the foundation.
See it in action: @Bino_AI โข @Caila_AI
- โจ What You Get
- ๐ฏ What You'll Build
- ๐ 3-Minute Setup (No, Really)
- ๐ ๏ธ For the Brave: Build From Source
- ๐ Feed Your Agent Knowledge
- ๐ญ Character Data Sources
- ๐ ๏ธ Multi-platform domination: Discord, Twitter, Telegram โ your agents go where the action is
- ๐ง Model buffet: Grok, OpenAI, Anthropic, Gemini โ pick your poison, we'll make it work
- ๐ Document devouring: Feed it anything. PDFs, docs, websites โ it reads faster than you and remembers everything
- ๐พ Privacy-first memory: Smart retention that remembers what matters, forgets what doesn't. Auto-deletes old data and wipes everything on user request
- ๐ง Infinitely hackable: Built to be broken apart and rebuilt. Create custom actions, clients, whatever your heart desires
- ๐ฆ MCP ready: Connect your own servers because vendor lock-in is for the weak
- ๐ค Chatbots with brains โ no more "I don't understand" responses
- ๐ต๏ธ Digital workforce โ agents that actually get stuff done while you sleep
- ๐ Business automation โ because manual processes are so 2020
- ๐ก๏ธ Brand guardians โ agents that know your brand inside-out, hunt down scammers, and turn FUDders into believers
- ๐ฎ NPCs that aren't braindead โ give your game characters actual personality
- ๐ง Trading bots โ automate your way to financial freedom (not financial advice, just good code)
Windows folks: You know the drill. WSL 2 or bust.
-
Give your agent a personality: Copy
characters/trump.character.jsontocharacters/my-character.jsonand make it interesting. Boring agents are useless agents. -
Handle your secrets: Copy
.env.exampleto.envand fill in your API keys.cp .env.example .env
Pro tip: Skip the
.envif you're feeling brave โ pass secrets through character JSON instead. -
Grab the Docker blueprint: Copy
docker-compose.yamlto your project root. -
Point it in the right direction: Edit
docker-compose.yamlto use your character:services: bino: image: ghcr.io/iotexproject/bino:latest # Latest and greatest command: ["pnpm", "start", "--character=characters/my-character.json"] # ... rest of your config ...
-
Fire it up:
docker compose up
Watch your digital offspring come to life. If it breaks, that's what logs are for.
Want to get your hands dirty? Add your own features? Break things properly? Skip the Docker and build it yourself.
git clone https://github.com/iotexproject/binoSwarm.git binoSwarm
cd binoSwarm-
Handle secrets: Same as above โ copy
.env.exampleto.envand fill it out. -
Create your character: Copy and customize a character file just like the Docker setup.
-
Build the beast:
pnpm i --no-frozen-lockfile && pnpm build -
Let it rip:
pnpm start --character=characters/binotest.json
Now you're running raw code. Break it, fix it, make it better. Pull requests welcome.
Your agent is only as smart as what you teach it. Time to make it an expert.
Drop your knowledge files into characters/knowledge/. Markdown files work great.
Got a knowledge base in another GitHub repo? Don't copy-paste like a peasant โ link it:
# Clone your knowledge repo outside the project
git clone https://github.com/your-org/your-docs.git
cd binoSwarm
# Create a symbolic link
ln -s ../your-docs characters/knowledge/your-docsUpdate your character.json to point to the knowledge files:
"knowledge": [
{
"path": "iotex2-docs/README.md",
"shared": false
},
{
"path": "iotex2-docs/depin-infra-modules-dim/ioconnect-hardware-sdk/README.md",
"shared": false
}
]Now your agent knows everything you know. Scary? Maybe. Useful? Absolutely.
Your agent's personality comes from multiple sources, merged in a specific order. Here's how it works:
When you start an agent, character data is loaded and merged in this order:
-
Default Character (
packages/core/src/defaultCharacter.ts)- Used when no character JSON path is provided
- Provides a baseline "Eliza" character with default traits
- Includes system prompt, bio, lore, message examples, and style
-
Character JSON File (
characters/*.json)- Loaded when you specify
--character=characters/my-character.json - Defines core character properties: name, model provider, plugins, clients
- Can include initial traits, but these get enriched by subsequent sources
- Loaded when you specify
-
Filesystem Traits (
characters/agentsTraits/<characterName>/)- Primary source for character traits (bio, lore, knowledge, templates, etc.)
- Loaded from a directory matching the character's
namefield - Structure mirrors GitHub repo format (see below)
- If found, traits are merged with the character JSON
-
Database Traits (PostgreSQL fallback)
- Fallback when filesystem traits directory doesn't exist
- Maintains backwards compatibility with existing deployments
- Traits stored in
characterstable withis_published = true
The merge process follows this flow:
Start Agent
โ
Load Character JSON (or use default)
โ
Check: Does `characters/agentsTraits/<characterName>/` exist?
โโ YES โ Load traits from filesystem โ Merge โ Done
โโ NO โ Check database for traits โ Merge โ Done
Important: Filesystem traits take precedence over database traits. If both exist, filesystem wins.
The filesystem traits directory structure matches a GitHub repository format. Here's how to set it up:
Your character traits repo should follow this structure:
your-character-repo/
โโโ bio.json # Array of biography strings
โโโ lore.json # Array of lore strings
โโโ knowledge.json # Array of knowledge paths (strings or objects)
โโโ messageExamples.json # Nested array of message examples
โโโ postExamples.json # Array of post example strings
โโโ topics.json # Array of topic strings
โโโ adjective.json # Array of adjective strings
โโโ style.json # Style object with all/chat/post arrays
โโโ templates.json # Template names mapped to file paths
โโโ xTargetUsers.txt # One username per line
โโโ xKnowledgeUsers.txt # One username per line
โโโ prompts/
โโโ system.md # System prompt (becomes system_prompt)
โโโ goals.md # Template (becomes templates.goalsTemplate)
โโโ *.md # Other templates
-
Clone your character traits repo:
git clone https://github.com/your-org/your-character-repo.git
-
Create a symlink in the project:
cd binoSwarm ln -s ../your-character-repo characters/agentsTraits/your-character-nameThe directory name must match the
namefield in your character JSON.
The templates.json file maps template names to file paths:
{
"goalsTemplate": "./prompts/goals.md",
"twitterQSPrompt": "./prompts/twitterQS.md",
"memeSystemPrompt": "./prompts/memeSystem.md"
}The loader reads these files and stores their content in character.templates.
knowledge.json can contain either:
- Simple strings:
["path/to/file.md"] - Objects with paths:
[{"path": "path/to/file.md", "shared": false}]
Both formats are supported and converted to string arrays during loading.