# 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` and `shell` 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) ## 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`. - If `telegram`: set `TELEGRAM_BOT_TOKEN`, keep `FEISHU_*` empty. - If `feishu`: set `FEISHU_APP_ID` and `FEISHU_APP_SECRET`, keep `TELEGRAM_BOT_TOKEN` empty. 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: ```bash mkdir -p data workspace ``` 6. Run: ```bash 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`) 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.md` ## Security Notes - `shell` only allows commands listed in `ALLOWED_COMMANDS`. - `file` only allows paths inside `ALLOWED_DIRS`. - 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