2026-02-21 23:01:39 +08:00

LaodingBot (MVP)

Go-based personal Telegram Agent with:

  • Telegram polling transport
  • OpenAI-compatible LLM client
  • SQLite conversation memory + simple compression
  • Tool registry with built-in file, shell, and git tools
  • Default-deny security policy via allowlists
  • Soul markdown loading for bot personality
  • Skills markdown loading for capability context
  • ReAct decision loop with automatic tool execution

Now supports mutually exclusive message channels:

  • telegram (long polling)
  • feishu (official SDK websocket long connection)
  • webui (HTTP + SSE, default :8090)

Quick Start

  1. Prepare env variables (see configs/env.sample).
    • The app auto-loads configs/env (or .env) if present.
    • You can also set CONFIG_ENV_FILE=/path/to/env.
    • Process environment variables override file values.
  2. Choose exactly one channel with MESSAGE_CHANNEL=telegram|feishu|webui.
    • If telegram: set TELEGRAM_BOT_TOKEN, keep FEISHU_* empty.
    • If feishu: set FEISHU_APP_ID and FEISHU_APP_SECRET, keep TELEGRAM_BOT_TOKEN empty.
    • If webui: set WEBUI_LISTEN_ADDR (default :8090).
  3. Set log level with LOG_LEVEL=debug|info|warn|error.
    • To inspect full skill/tool execution content and detailed ReAct step traces, use LOG_LEVEL=debug.
  4. Configure knowledge and reasoning:
    • SOUL_PATH for bot personality markdown.
    • SKILLS_DIR for skills markdown directory.
    • REACT_MAX_STEPS for maximum ReAct steps.
  5. Create runtime directories:
mkdir -p data workspace
  1. Run:
go mod tidy
go run ./cmd/bot

Telegram Usage

  • Normal text enters unified agent pipeline:
    1. Receive message and load recent memory context
    2. Match relevant skill(s) from skills/
    3. If no skill matched, respond via direct LLM
    4. If skill matched, run ReAct and call tools (shell / file / git) only when needed
    5. Return final answer
  • No /tool ... command is required for normal use.

Feishu Usage

  • Bot uses Feishu official SDK long connection (ws) to subscribe im.message.receive_v1 text events.
  • Received text is forwarded to the same agent pipeline and replied back to the same chat.

Knowledge Files

  • Soul file default path: bot_context/soul.md
  • Skills directory default path: skills/
  • Skill format uses subdirectories: skills/<skill_name>/skill.md

Docker Build And Run

Required Files And Folders

Before building/running with Docker, ensure these exist:

  • Dockerfile
  • docker-compose.yaml
  • workspace/agent_runtime/configs/env
  • workspace/agent_runtime/bot_context/soul.md
  • workspace/agent_runtime/skills/
  • workspace/agent_runtime/data/
  • workspace/agent_runtime/workspace/

Quick bootstrap command:

mkdir -p workspace/agent_runtime/{configs,bot_context,skills,data,workspace}
cp -n configs/env.sample workspace/agent_runtime/configs/env
cp -n bot_context/soul.md workspace/agent_runtime/bot_context/soul.md
cp -rn skills/* workspace/agent_runtime/skills/

Minimum env config in workspace/agent_runtime/configs/env:

MESSAGE_CHANNEL=webui
WEBUI_LISTEN_ADDR=:8090
LLM_API_KEY=your_api_key

docker-compose.yaml already mounts ./workspace/agent_runtime into the container, so host-side data is persistent.

Build Docker Image

docker build -t laodingbot:latest .

Run With Docker (Single Container)

docker run --rm -d \
	--name laodingbot \
	-p 8090:8090 \
	--env-file ./workspace/agent_runtime/configs/env \
	-e MESSAGE_CHANNEL=webui \
	-e WEBUI_LISTEN_ADDR=:8090 \
	-e AGENT_WORKSPACE_DIR=/app/workspace/agent_runtime \
	-v "$(pwd)/workspace/agent_runtime:/app/workspace/agent_runtime" \
	laodingbot:latest

Run With Docker Compose

Build and start:

docker compose up -d --build

View logs:

docker compose logs -f laodingbot

Stop and remove:

docker compose down

After startup, open WebUI at http://localhost:8090.

Security Notes

  • shell only allows commands listed in ALLOWED_COMMANDS.
  • file only allows paths inside ALLOWED_DIRS.
  • git only allows common git subcommands and runs inside WORK_DIR.
  • Working directory for shell is limited by WORK_DIR.

Next Iteration

  • Add skill runtime (process-level hot-plug via RPC)
  • Add bootstrap pipeline (generate -> vet/test -> sandbox run -> register)
  • Add approval gate for risky commands
Description
No description provided
Readme 13 MiB
Languages
Go 99.4%
Shell 0.3%
Dockerfile 0.3%