Skip to content

Releases: louisho5/picobot

v0.2.0

Choose a tag to compare

@louisho5 louisho5 released this 18 Mar 18:34

What's Changed

  • Feature: add MCP server support (stdio + HTTP transports) (thanks to @Fybre)

New Features

Picobot now supports MCP (Model Context Protocol) servers as agent tools! 🎉

Connect any MCP-compliant server and its tools are automatically registered in the agent at startup — no code changes required.

One-time setup

Add an entry to ~/.picobot/config.json under mcpServers:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"]
    }
  }
}

MCP Tools and Transports

Supported Transports

1. Stdio - Spawns a local process and communicates over stdin/stdout. Works with npx, uvx, plain binaries, and docker run.
{
  "mcpServers": {
    "via-npx":    { "command": "npx",    "args": ["-y", "@some/mcp-server"] },
    "via-uvx":    { "command": "uvx",    "args": ["some-mcp-server"] },
    "via-binary": { "command": "/usr/local/bin/my-mcp-server", "args": [] },
    "via-docker": { "command": "docker", "args": ["run", "--rm", "-i", "mcp/some-image"] }
  }
}

Docker note:
Always include -i in Docker args. Without -i, Docker closes stdin immediately and the MCP handshake fails.

2. HTTP - Connects to a remote MCP server over Streamable HTTP or SSE.
{
  "mcpServers": {
    "via-remote": {
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Transport Fields

Field Description
command Executable to spawn (stdio transport). Name on $PATH or absolute path.
args Arguments passed to the command.
url HTTP endpoint for the MCP server (HTTP transport).
headers HTTP headers attached to every request (e.g. Authorization).

If both command and url are set, command takes precedence.


MCP Tool Behavior

  • Tools are connected when the agent starts (gateway or agent command).
  • If a server fails to connect, picobot logs the error and continues — other tools remain unaffected.
  • All connections are cleanly shut down when the gateway exits.

See CONFIG.md for the full configuration reference.


Full Changelog: v0.1.10...v0.2.0

Thanks to all contributors!

v0.1.10

Choose a tag to compare

@louisho5 louisho5 released this 14 Mar 16:21

What's Changed

  • Feat: add Slack channel with allowlist for users and channels @rickyelopez
  • Docs: add docs/ folder — move docs and images out of the repo root
  • Fix: update Docker entrypoint

New Features

Picobot now works on Slack! 🎉

Uses Socket Mode — no public HTTP endpoint required. Works behind NAT, on a home server, or anywhere picobot already runs.

One-time setup

./picobot channels login

Choose 3 for Slack, then follow the prompts — it will ask for your App Token, Bot Token, and optional allowlists. The config is updated automatically.

Notes: the picobot channels login command also works for Telegram, Discord & WhatsApp too.

Or edit config.json manually

{
  "channels": {
    "slack": {
      "enabled": true,
      "appToken": "xapp-1-AAAAAAAAAAAAAAAAAAAA",
      "botToken": "xoxb-AAAAAAAAAA-AAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAA",
      "allowUsers": ["U0123456789"],
      "allowChannels": ["C0123456789"]
    }
  }
}
Field Description
appToken App-Level Token for Socket Mode (xapp-...)
botToken Bot Token for the Web API (xoxb-...)
allowUsers List of Slack user IDs allowed to chat. Empty [] = anyone
allowChannels List of Slack channel IDs allowed. Empty [] = all. DMs ignore this list

How the bot responds:

  • In channels — when @-mentioned

See HOW_TO_START.md for the full step-by-step Slack setup guide.


For Docker

Or set the variables in your .env file when using Docker Compose.


Full Changelog: v0.1.9...v0.1.10

Thanks for all contributors!

v0.1.9

Choose a tag to compare

@louisho5 louisho5 released this 10 Mar 15:45

What's Changed

  • Fix: llama.cpp compatibility issue
  • Fix: LM Studio compatiblity
  • Update: enhance web search features

Full Changelog: v0.1.8...v0.1.9

v0.1.8

Choose a tag to compare

@louisho5 louisho5 released this 07 Mar 16:57

What's Changed

  • Update: refactor memory management tools and enhance tool call for memory operations
  • Update: improve error handling with golangci-lint

Full Changelog: v0.1.7...v0.1.8

v0.1.7

Choose a tag to compare

@louisho5 louisho5 released this 05 Mar 18:54

What's Changed

  • Feature: Tool execution logging has been added to the agent's tool registry. Every call now logs start, success/failure, duration and result size. Thanks to @Fybre
  • Feature: When the agent invokes a tool in a user-facing session, the bot sends interim status messages back over the same communication channel.

New Features

Picobot now works more transparently and debuggably:

Console logs show exactly which tool was called, with arguments and timings.
In-chat notifications relay "Running…", "done" or "failed" messages to the user during tool execution.

Full Changelog: v0.1.6...v0.1.7

v0.1.6

Choose a tag to compare

@louisho5 louisho5 released this 02 Mar 17:41
973cd38

What's Changed

  • Fix: support Ollama without API key by @Fybre
  • Fix: make file tab space by @louisho5
  • Feat: add env PICOBOT_MAX_TOKENS, PICOBOT_MAX_TOOL_ITERATIONS by @doko89

Full Changelog: v0.1.5...v0.1.6

Thanks to all contributors !

v0.1.5

Choose a tag to compare

@louisho5 louisho5 released this 25 Feb 16:25

What's Changed

  • Feature: add Makefile for local builds
  • Feature: add channel system commands, become simple and have an easier guide for user to login and enable for any of the message channels at first time
  • Feat: add WhatsApp channel with typing indicator and onboard subcommand by @thrapt in #18

New Features

Picobot now works on WhatsApp! 🎉

Uses your personal WhatsApp account via linked device — no business API or extra phone number needed. Just scan a QR code and you're in.

One-time setup

./picobot channels login
  1. Choose 3 for WhatsApp setup
  2. Scan the QR code from your phone (Settings → Linked Devices → Link a Device). The config is updated automatically — no manual editing required.

Notes: the picobot channels login command also works for Telegram, Discord & WhatsApp too.

Or edit config.json manually (First time need to run above command)

{
  "channels": {
    "whatsapp": {
      "enabled": true,
      "dbPath": "~/.picobot/whatsapp.db",
      "allowFrom": ["169032883908635"]
    }
  }
}

Note: allowFrom uses LID numbers, not phone numbers. Run picobot gateway and check the startup log to find your LID:

whatsapp: connected as 85298765432 (LID: 169032883908635)

IMPORTANT If you wants to connect with a new device, remove the whatsapp.db file, and run picobot channels login again

For Docker

docker compose run --rm -it picobot channels login
docker compose down 
docker compose up -d

"Normal" vs "Lite" builds

Since the WhatsApp integration adds approximately 13 MB to the binary, we realized that there may be other heavy packages in the future that are optional for users. Therefore, we now ship two variants:

Variant Command WhatsApp Size
Full (default) go build ./cmd/picobot ~22 MB
Lite go build -tags lite ./cmd/picobot Not included ~9 MB

Use make build to cross-compile all platforms and variants at once. The lite variant is designed for IoT and resource-constrained environments. Future heavy integrations will follow the same pattern.

Full Changelog: v0.1.4-preview...v0.1.5

Thanks to @thrapt !

v0.1.4-preview

Choose a tag to compare

@louisho5 louisho5 released this 22 Feb 15:01

What's Changed

New Features

Picobot now works on Discord! Give it a try below :)

Add discord channel by editing config at config.json:

{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "allowFrom": ["YOUR_DISCORD_USER_ID"]
    }
  }
}

For docker, start discord channel with below

docker run -d --name picobot \
  -e OPENAI_API_KEY="your-key" \
  -e OPENAI_API_BASE="https://openrouter.ai/api/v1" \
  -e PICOBOT_MODEL="google/gemini-2.5-flash" \
  -e DISCORD_BOT_TOKEN="MTIzNDU2..." \
  -e DISCORD_ALLOW_FROM="123456789012345678" \
  -v ./picobot-data:/home/picobot/.picobot \
  louisho5/picobot:latest

Full Changelog: v0.1.3-preview...v0.1.4-preview

Thanks so much to all the contributors!

v0.1.3-preview

Choose a tag to compare

@louisho5 louisho5 released this 16 Feb 06:44

v0.1.2-preview

Choose a tag to compare

@louisho5 louisho5 released this 11 Feb 15:49

Breaking Changes:

  • The attributes ollama and openrouter have been removed.
  • Use the attribute openai instead to configure all OpenAI-compatible API base endpoints such as OpenRouter, Ollama, llama.cpp, LM Studio, etc.

Example configuration:

"providers": {
  "openai": {
    "apiKey": "sk-or-v1-YOUR_KEY",
    "apiBase": "https://openrouter.ai/api/v1"
  }
}

For Docker

Now switched to OPENAI_API_BASE and OPENAI_API_BASE

Docker Run

docker run -d --name picobot \
  -e OPENAI_API_KEY="your-key" \
  -e OPENAI_API_BASE="https://openrouter.ai/api/v1" \
  -e PICOBOT_MODEL="google/gemini-2.5-flash" \
  -e TELEGRAM_BOT_TOKEN="your-telegram-token" \
  -v ./picobot-data:/home/picobot/.picobot \
  --restart unless-stopped \
  louisho5/picobot:latest

All config, memory, and skills are persisted in ./picobot-data on your host.

Docker Compose

Create a docker-compose.yml:

services:
  picobot:
    image: louisho5/picobot:latest
    container_name: picobot
    restart: unless-stopped
    environment:
      - OPENAI_API_KEY=your-key
      - OPENAI_API_BASE=https://openrouter.ai/api/v1
      - PICOBOT_MODEL=google/gemini-2.5-flash
      - TELEGRAM_BOT_TOKEN=your-telegram-token
      - TELEGRAM_ALLOW_FROM=your-user-id
    volumes:
      - ./picobot-data:/home/picobot/.picobot

Then run:

docker compose up -d