[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1788":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},1788,"tinybot","SudoJacky\u002Ftinybot","SudoJacky","Tinybot is a lightweight personal AI Agent that is constantly evolving","",null,"Python",246,36,21,1,0,83,4.7,"MIT License",false,"master",true,[24,25,26,27,28,29,30,31,32,33,34],"agent","ai","ai-agent","deepseek","llm","memory","python","qwen","rag","task-scheduler","webui","2026-06-12 02:00:32","# Tinybot\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fwebui\u002Fassets\u002Flogo.svg\" width=\"96\" alt=\"Tinybot logo\">\n\u003C\u002Fp>\n\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.13%2B-blue?logo=python&logoColor=white)](https:\u002F\u002Fwww.python.org\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green?logo=opensourceinitiative&logoColor=white)](LICENSE)\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FSudoJacky\u002Ftinybot?style=social&logo=github)](https:\u002F\u002Fgithub.com\u002FSudoJacky\u002Ftinybot\u002Fstargazers)\n[![GitHub Clones](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?color=success&label=Clone&query=count&url=https:\u002F\u002Fgist.githubusercontent.com\u002FSudoJacky\u002F1ed488e49d2ce0a4af8ce5a63af4396e\u002Fraw\u002Fclone.json&logo=github)](https:\u002F\u002Fgithub.com\u002FMShawon\u002Fgithub-clone-count-badge)\n[![GitHub Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002FSudoJacky\u002Ftinybot?logo=github)](https:\u002F\u002Fgithub.com\u002FSudoJacky\u002Ftinybot\u002Fissues)\n[![GitHub Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FSudoJacky\u002Ftinybot?include_prereleases&logo=github)](https:\u002F\u002Fgithub.com\u002FSudoJacky\u002Ftinybot\u002Freleases)\n[![oosmetrics](https:\u002F\u002Fapi.oosmetrics.com\u002Fapi\u002Fv1\u002Fbadge\u002Fachievement\u002F2a28dc05-c0df-45b8-babd-90411f7c20aa.svg)](https:\u002F\u002Foosmetrics.com\u002Frepo\u002FSudoJacky\u002Ftinybot)\n[![Ask DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002FSudoJacky\u002Ftinybot)\n\n[中文文档](README_ZH.md) | [Quick Start](#quick-start) | [Features](#-core-highlights) | [Commands](#interactive-chat-commands)\n\nA lightweight personal AI assistant framework that integrates Large Language Models with multiple chat platforms, tool systems, and automation mechanisms.\n\n## Change log\n\n\u003Cdetails>\n\u003Csummary>2026.05.24 Event-oriented frontend components inspired by AG-UI, plus A2UI-style form collection when Tinybot needs follow-up information from the user.\u003C\u002Fsummary>\n\n![form](.\u002Fshow\u002Fwebui_form.PNG)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.22 Implemented an efficient, real-time, editable memory system maintained alongside the agent, using memory state labels to handle contradictory memories over time.\u003C\u002Fsummary>\n\n![save](.\u002Fshow\u002Fwebui_memory_save.PNG)\n\n![load](.\u002Fshow\u002Fwebui_memory_load.PNG)\n\n```mermaid\nflowchart TD\n    UserTurn[\"Completed agent turn\"] --> SaveSession[\"SessionHandler.save_turn\"]\n    SaveSession --> CaptureEvidence[\"capture_conversation_evidence\"]\n    CaptureEvidence --> EvidenceFiles[\"memory\u002Fconversations\u002F*.jsonl\"]\n    CaptureEvidence --> Schedule[\"Memory extraction schedule\"]\n\n    Schedule --> DreamRun[\"Dream.run\"]\n    DreamRun --> HasEvidence{\"Pending Conversation Evidence?\"}\n    HasEvidence -->|yes| EvidenceBatch[\"Read evidence after .evidence_cursor\"]\n    HasEvidence -->|no| LegacyBatch[\"Read legacy memory\u002Fhistory.jsonl after .dream_cursor\"]\n\n    EvidenceBatch --> Prompt[\"dream_phase1.md + current notes\u002Fviews\"]\n    LegacyBatch --> Prompt\n    Prompt --> LLMOps[\"LLM JSON Memory Operations\"]\n    LLMOps --> ParseOps[\"parse operations\"]\n\n    ParseOps --> OpType{\"operation\"}\n    OpType -->|save| SaveNote[\"upsert MemoryNote\"]\n    OpType -->|supersede| Supersede[\"create replacement + mark old superseded\"]\n    OpType -->|reject| Reject[\"mark note rejected\"]\n    OpType -->|skip| Noop[\"no durable change\"]\n\n    SaveNote --> Notes[\"memory\u002Fnotes.jsonl\"]\n    Supersede --> Notes\n    Reject --> Notes\n\n    Notes --> RefreshViews[\"refresh_memory_views\"]\n    RefreshViews --> ProjectView[\"memory\u002FMEMORY.md\"]\n    RefreshViews --> UserView[\"USER.md\"]\n    RefreshViews --> SoulView[\"SOUL.md\"]\n\n    Notes --> RecallSelect[\"select_memory_recall\"]\n    RecallSelect --> RecallBlock[\"[MEMORY RECALL] system block\"]\n    RecallBlock --> AgentContext[\"ContextBuilder.build_messages\"]\n\n    Experience[\"ExperienceStore\"] --> ExperienceBlock[\"[RELEVANT WORKFLOWS \u002F RECOVERIES]\"]\n    Knowledge[\"KnowledgeStore \u002F SessionKnowledgeStore\"] --> KnowledgeBlock[\"Knowledge context\"]\n    ExperienceBlock --> AgentContext\n    KnowledgeBlock --> AgentContext\n```\n\n```mermaid\nflowchart LR\n    Notes[\"Memory Notes\\ncanonical JSONL\"] --> Views[\"Memory Views\\nMarkdown projection\"]\n    Notes --> Recall[\"Memory Recall\\nprompt retrieval\"]\n    Evidence[\"Conversation Evidence\\nraw source layer\"] --> Dream[\"Dream\\nbackground extraction\"]\n    Dream --> Notes\n\n    ExplicitTools[\"Explicit memory tools\\nforeground correction\"] --> Notes\n    Legacy[\"Legacy Markdown\u002Fhistory\\nmigration + fallback\"] --> Notes\n\n    Experience[\"Experience\\nhow to act\"] --> AgentPrompt[\"Agent prompt\"]\n    Knowledge[\"Knowledge\\nexternal document evidence\"] --> AgentPrompt\n    Recall --> AgentPrompt\n\n    Views -. \"inspection + compatibility\" .-> AgentPrompt\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.15 Continued Cowork architecture runtime evolution.\u003C\u002Fsummary>\n\nCowork now uses canonical architectures (`adaptive_starter`, `team`, `generator_verifier`, `message_bus`, `shared_state`, `swarm`), branch-aware session snapshots, Agent Step observation detail expansion, architecture-specific projections, and explicit branch result selection or merge controls.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.13 Evolved Cowork into a graph-driven, blueprint-aware agent swarm control plane.\u003C\u002Fsummary>\n\nCowork now exposes versioned graph\u002Ftrace snapshots, reusable JSON blueprints, budget-aware run controls, blocker panels, blueprint validation\u002Fpreview APIs.\n\n![cowork](.\u002Fshow\u002Fwebui_cowork_agent_field_v2.PNG)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.11 It significantly enhances the performance and presentation effect of cowork.\u003C\u002Fsummary>\n\n![cowork](.\u002Fshow\u002Fwebui_cowork_agent_field.PNG)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.08 Added a \"cowork\" capability, enabling the creation of an autonomous, multi-agent team system.\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.05.07 Modified the display logic for tool usage.\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.30 Fixed multiple UI issues, revised the browser control interface demonstration, and added task display functionality.\u003C\u002Fsummary>\n\n![browser_snapshot2](.\u002Fshow\u002Fbrowser_snapshot2.png)\n\n![task_webui1](.\u002Fshow\u002Ftask_webui1.png)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.29 Fixed multiple UI issues and added a browser control interface demonstration。\u003C\u002Fsummary>\n\n![auto_snapshot](.\u002Fshow\u002Fsnapshot.gif)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.28 Add beta RAG relation graph.\u003C\u002Fsummary>\n\n![rag_graph_beta_gif](.\u002Fshow\u002Fwebui_rag_graph_beta1.gif)\n\n![rag_graph_beta](.\u002Fshow\u002Fwebui_rag_graph_beta1.PNG)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.27 Add docs and fix some issue.\u003C\u002Fsummary>\n\n![doc_home](.\u002Fshow\u002Fwebui_doc_home.PNG)\n\n![startup](.\u002Fshow\u002Fwebui_startup.PNG)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.26 add RAG module, support text content for now\u003C\u002Fsummary>\n\n![RAG](.\u002Fshow\u002Fwebui_RAG.PNG)\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>2026.04.24 new webui, human-create-skills, enable\u002Fdisable skills,\u003C\u002Fsummary>\n\nwhite mode\n\n![white](.\u002Fshow\u002Fwebui_1.PNG)\n\ndark mode\n\n![dark](.\u002Fshow\u002Fwebui_2.PNG)\n\u003C\u002Fdetails>\n\n\n\n## ✨ Core Highlights\n\n### Interactive Forms\n\n\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd788bf1f-e70f-47be-869c-db1bf44d2d64\" controls width=\"100%\">\u003C\u002Fvideo>\n\n### Chatbot-agent\n\n\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F6b2e9439-7870-440e-8c49-61d38d46caf9\" controls width=\"100%\">\u003C\u002Fvideo>\n\n\n### Agent cowork!\n\nCowork provides a shared multi-agent session model with architecture runtime policies, branch navigation, architecture-specific projections, observable Agent Steps, and explicit final-result selection.\n\n![cowork](.\u002Fshow\u002Fwebui_cowork_agent_field_content_v3.PNG)\n\n![cowork](.\u002Fshow\u002Fwebui_cowork_agent_field_v3.PNG)\n\n### 🧠 Agentic DAG Task Scheduling\n\n![task](.\u002Fshow\u002Ftask_1.gif)\n\nAutomatically decomposes complex tasks into executable subtask DAGs, supporting:\n\n- **Intelligent Decomposition** — LLM analyzes tasks and generates dependency-based subtask graphs\n- **Automatic Chain Execution** — SubAgent completions automatically trigger dependent tasks\n- **Parallel Execution** — Parallel-safe tasks run simultaneously for maximum efficiency\n- **Dynamic Adjustment** — Add\u002Fremove subtasks during runtime\n\n### WebUI\n\n![webui](.\u002Fshow\u002Fwebui_1.PNG)\n\n### 🔄 Experience Self-Evolution System\n\nA self-learning system that continuously improves from problem-solving experiences:\n\n~~~json\n{\n  \"id\": \"exp_86788c0e\",\n  \"timestamp\": \"2026-04-20T21:19:17\",\n  \"tool_name\": \"exec\",\n  \"error_type\": \"argument error\",\n  \"error_message\": \"\",\n  \"params\": {},\n  \"outcome\": \"resolved\",\n  \"resolution\": \"When using the opencli scroll command, pass exactly one argument to avoid argument-count errors. Check the command call format; valid examples are `scroll(distance)` or `scroll(selector)`, not multiple arguments. Validate argument counts before tool calls, using the opencli documentation or a test command to confirm API requirements.\",\n  \"context_summary\": \"Browser automation: fixed argument errors and JavaScript syntax\u002Ftype errors while using opencli by adjusting commands and adding defensive handling.\",\n  \"confidence\": 0.7,\n  \"session_key\": \"cli:direct\",\n  \"merged_count\": 0,\n  \"last_used_at\": \"2026-04-20T21:19:17\",\n  \"category\": \"api\",\n  \"tags\": [\"opencli\", \"scroll\", \"argument-error\", \"browser-automation\"],\n  \"use_count\": 0,\n  \"success_count\": 0,\n  \"feedback_positive\": 0,\n  \"feedback_negative\": 0\n}\n~~~\n\n- **Semantic Experience Search** — Vector-based search understands problem intent, not just keywords\n- **Auto Context Injection** — Relevant past solutions automatically appear when you need them\n- **Proactive Error Diagnosis** — Tool failures trigger automatic suggestions from resolved experiences\n- **Smart Confidence Model** — Multi-dimensional scoring: usage frequency, success rate, freshness, feedback\n- **Automatic Categorization** — Experiences tagged by category (path, permission, encoding, network, etc.)\n\n### 🤖 SubAgent Asynchronous Execution\n\n- **Non-blocking Execution** — Background tasks don't block main conversation\n- **Concurrency Control** — Configurable max concurrency to prevent overload\n- **Heartbeat Monitoring** — Auto-detects timeout tasks, prevents zombie processes\n- **Auto-notification** — Automatically triggers main Agent to summarize results when complete\n\n### 💭 Dream Memory Processing\n\nTwo-phase autonomous memory consolidation during idle periods:\n\n- **Phase 1: Analysis** — LLM analyzes conversation history, extracts insights\n- **Phase 2: Editing** — AgentRunner makes targeted edits to memory files\n- **Phase 3: Experience Update** — Merges similar experiences, updates strategy documents\n- **Vector Storage Integration** — Semantic search across consolidated memories\n\n### 📊 CLI Real-time Progress Display\n\nTask execution shows real-time progress in CLI without disrupting main conversation\n\n### ⚙️ Integrated Configuration Editor\n\nFull-screen terminal configuration editor accessible directly within the interactive chat:\n\n- Press `Ctrl+O` or type `\u002Fconfig` to open the editor\n- No need to exit the chat session\n- Edit provider settings, model parameters, tool configs, etc.\n- Press `q` to save and return to chat\n\n### 🔌 MCP (Model Context Protocol) Support\n\nConnect to external MCP servers and use their tools seamlessly:\n\n- **Native Tool Wrapping** — MCP tools appear as native tinybot tools\n- **Multiple Server Support** — Connect to multiple MCP servers simultaneously\n- **Auto Tool Discovery** — Automatically discovers and registers available tools\n\n## 🚀 Basic Features\n\n- **Multi-platform Integration** — Built-in WeChat, DingTalk, Feishu channels; plugin extensibility\n- **Rich Tools** — File read\u002Fwrite, shell execution, browser automation, web search, scheduled tasks\n- **Intelligent Memory** — Vector storage-based memory system with session integration and semantic search\n- **Multi-LLM Support** — Compatible with OpenAI, DeepSeek, Zhipu, Qwen, Gemini, and 14+ providers\n- **Skills System** — Define skills via Markdown files, teach Agent specific workflows without coding\n- **Automation** — Cron scheduled tasks + heartbeat service for periodic auto-execution\n- **OpenAI Compatible API** — Run as OpenAI-compatible backend service, integrate with any OpenAI client\n- **Session Management** — Persistent conversation history with checkpoint recovery\n- **Security** — Workspace restriction, command audit, encrypted credential storage\n\n## Quick Start\n\n```bash\n# Install\nuv sync\n\n# Initialize configuration (interactive wizard)\nuv run tinybot onboard\n\n# Interactive chat mode\nuv run tinybot agent\n\n# Send single message\nuv run tinybot agent -m \"Hello\"\n\n# Start gateway (multi-channel + scheduled tasks + heartbeat)\nuv run tinybot gateway\n\n# Run as OpenAI-compatible API server\nuv run tinybot api\n```\n\n## WebUI Usage\n\nTinybot provides a browser-based web interface for chatting with the AI agent.\n\n### Steps to Enable WebUI\n\n#### 1. Enable WebSocket Channel in Config\n\nEdit your `~\u002F.tinybot\u002Fconfig.json` file, add the following under `channels`:\n\n```json\n{\n  \"channels\": {\n    \"websocket\": {\n      \"enabled\": true,\n      \"host\": \"127.0.0.1\",\n      \"port\": 18790\n    }\n  }\n}\n```\n\n#### 2. Start the Gateway\n\n```bash\nuv run tinybot gateway\n```\n\n#### 3. Open Browser\n\nVisit `http:\u002F\u002F127.0.0.1:18790` in your browser.\n\n### Available API Endpoints\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `\u002Fapi\u002Fsessions` | GET | List all chat sessions |\n| `\u002Fapi\u002Fsessions\u002F{key}\u002Fmessages` | GET | Get session messages |\n| `\u002Fapi\u002Fsessions\u002F{key}` | DELETE\u002FPATCH | Delete\u002Fupdate session |\n| `\u002Fapi\u002Fsessions\u002F{key}\u002Fclear` | POST | Clear session history |\n| `\u002Fapi\u002Fsessions\u002F{key}\u002Fprofile` | GET | Get user profile |\n| `\u002Fapi\u002Fconfig` | GET\u002FPATCH | Get\u002Fupdate configuration |\n| `\u002Fapi\u002Fstatus` | GET | Get system status |\n| `\u002Fapi\u002Ftools` | GET | Get available tools |\n| `\u002Fapi\u002Fskills` | GET | Get all skills |\n| `\u002Fapi\u002Fskills\u002F{name}` | GET | Get skill detail |\n| `\u002Fapi\u002Fworkspace\u002Ffiles` | GET | List workspace files |\n| `\u002Fws` | WebSocket | Real-time chat connection |\n\n### WebSocket Events\n\n| Event | Direction | Description |\n|-------|-----------|-------------|\n| `new_chat` | Client → Server | Create new chat |\n| `attach` | Client → Server | Attach to existing chat |\n| `message` | Client → Server | Send message |\n| `interrupt` | Client → Server | Stop AI generation |\n| `ping` | Client → Server | Heartbeat |\n| `delta` | Server → Client | Streaming text chunk |\n| `stream_end` | Server → Client | Stream finished |\n| `message` | Server → Client | Full message |\n| `file_updated` | Server → Client | Workspace file changed |\n\n## Interactive Chat Commands\n\nWhen in interactive mode, the following commands are available:\n\n| Command | Description |\n|---------|-------------|\n| `\u002Fconfig` or `Ctrl+O` | Open configuration editor |\n| `\u002Fhelp` | Show available commands |\n| `\u002Fclear` | Clear conversation history |\n| `\u002Fnew` | Start new conversation session |\n| `\u002Fexit` or `:q` | Exit the chat |\n\n## Skills System\n\nDefine custom skills through simple Markdown files.\n\nSkills are automatically loaded and the Agent follows defined workflows when conditions match.\n\n### Before use browser\n\n#### 1. Install OpenCLI\n\n```bash\nnpm install -g @jackwener\u002Fopencli\n```\n\n#### 2. Install the Browser Bridge Extension\n\nOpenCLI connects to Chrome\u002FChromium through a lightweight Browser Bridge extension plus a small local daemon. The daemon auto-starts when needed.\n\n1. Download the latest `opencli-extension-v{version}.zip` from the GitHub [Releases page](https:\u002F\u002Fgithub.com\u002Fjackwener\u002Fopencli\u002Freleases).\n2. Unzip it, open `chrome:\u002F\u002Fextensions`, and enable **Developer mode**.\n3. Click **Load unpacked** and select the unzipped folder.\n\n#### 3. Verify the setup\n\n```bash\nopencli doctor\n```\n\n## Experience Tools\n\nThe Agent can actively manage its learning experiences:\n\n| Tool | Description |\n|------|-------------|\n| `query_experience` | Search past problem-solving experiences |\n| `save_experience` | Save a new solution for future reference |\n| `feedback_experience` | Mark an experience as helpful or not |\n| `delete_experience` | Remove outdated or incorrect experiences |\n\n## Requirements\n\n- Python >= 3.13\n\n## License\n\n[MIT](LICENSE)\n","Tinybot 是一个轻量级的个人AI助手框架，它将大型语言模型与多个聊天平台、工具系统和自动化机制相结合。其核心功能包括实时可编辑的记忆系统、事件导向的前端组件以及高效的记忆提取计划，支持用户与AI之间更自然流畅的交互。技术上采用Python 3.13+开发，并遵循MIT许可协议开放源代码。适用于需要定制化智能助手场景，如个人事务管理、在线客服或教育辅助等，能够显著提升用户体验和工作效率。",2,"2026-06-11 02:46:02","CREATED_QUERY"]