The .bot file format

Version bot/1 · open, free to implement

Your bots belong to you. Baguette Bot exports them to a .bot file: plain UTF-8 text that a person can read and any app can import. Use it to keep a copy, or to move your agents to another compatible app. No account, licence or permission is needed to implement it.

Example

#! bot/1
# Baguette Bot · 2026-10-09 · 2 bots

@bot Atlas
role: Team lead
model: anthropic/claude-sonnet-5.5

@instructions
You coordinate the team and answer in French.
Keep answers short.

@memory
The user runs a bakery in Lyon.

@routine Morning summary
schedule: 0 8 * * 1-5
timezone: Europe/Paris

Summarize the emails that need a reply.

@watcher Competitor prices
mode: change
url: https://example.com/pricing
every: 60

Tell me what changed.

@bot Pain Perdu
role: Writer

@team Marketing
lead: Atlas
member: Atlas
member: Pain Perdu

Why not JSON?

A bot is mostly long text written by a person: instructions, memories, tasks. In JSON, that text ends up on a single line full of \n and \", and one missing comma breaks the whole file. In a .bot file, the text reads exactly as it was written. You can open it in any text editor, fix a typo, add a memory or a comment, and compare two versions line by line. The format stays strict enough to parse, with blocks, key: value lines and a single escaping rule. A reader takes about 60 lines of code, and the button above gives an LLM everything it needs to read or write one.

Rules

  • The first line is #! bot/1. Lines starting with # before the first block are comments.
  • A block starts with a line @type title.
  • The bot, routine, watcher and team blocks start with key: value lines. A blank line ends them, and the rest of the block is its text.
  • The instructions and memory blocks are text only. There is one memory per block.
  • instructions, memory, routine and watcher belong to the @bot above them. team stands on its own.
  • A text line that starts with @ or \ is written with one extra \ in front. Readers remove it.
  • Readers ignore blocks and keys they don't know, so newer files stay readable.

Blocks

  • @bot name. Keys:
    • role;
    • model, an OpenRouter-style id such as provider/model;
    • avatar, Baguette Bot's avatar as one line of JSON. Other apps may ignore it.
  • @instructions: the bot's instructions (its system prompt, as the user wrote it).
  • @memory: one thing the bot remembers.
  • @routine name. Keys:
    • schedule, a 5-field cron expression;
    • timezone, an IANA name;
    • audio and enabled, yes or no.
    The text is the task to run.
  • @watcher name. Keys:
    • mode: change, keyword, price or email;
    • url and keyword;
    • every, in minutes;
    • enabled.
    The text is what to do when it triggers.
  • @team name. Keys: lead, and one member line per bot name.

What a .bot file never contains

Exports from Baguette Bot leave out the secrets vault, connected accounts (email, calendar, messaging), conversation history and webhook links. Anything in the instructions or memory that looks like a password, an API key, a token, a card number or an IBAN is replaced with [redacted].

Importing safely

A .bot file can come from anywhere. When Baguette Bot imports one, routines and watchers arrive paused, and every bot asks before acting. We recommend the same for other apps.