{"id":29970519,"url":"https://github.com/psiace/bub","last_synced_at":"2026-02-25T06:52:25.881Z","repository":{"id":305120911,"uuid":"1018830110","full_name":"PsiACE/bub","owner":"PsiACE","description":"Bub it. Build it.","archived":false,"fork":false,"pushed_at":"2026-02-21T11:59:13.000Z","size":2638,"stargazers_count":399,"open_issues_count":7,"forks_count":30,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-21T17:55:56.713Z","etag":null,"topics":["agent","ai","clawdbot","coding-agent","openclaw","python","telegram"],"latest_commit_sha":null,"homepage":"http://bub.build/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PsiACE.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-07-13T06:16:21.000Z","updated_at":"2026-02-21T16:00:22.000Z","dependencies_parsed_at":"2025-07-18T13:04:24.726Z","dependency_job_id":"a5036b5a-026b-4b03-b7a1-97156b93b560","html_url":"https://github.com/PsiACE/bub","commit_stats":null,"previous_names":["psiace/bub"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/PsiACE/bub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsiACE%2Fbub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsiACE%2Fbub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsiACE%2Fbub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsiACE%2Fbub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PsiACE","download_url":"https://codeload.github.com/PsiACE/bub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsiACE%2Fbub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29812747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T05:36:42.804Z","status":"ssl_error","status_checked_at":"2026-02-25T05:36:31.934Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai","clawdbot","coding-agent","openclaw","python","telegram"],"created_at":"2025-08-04T05:39:17.983Z","updated_at":"2026-02-25T06:52:25.869Z","avatar_url":"https://github.com/PsiACE.png","language":"Python","readme":"# Bub\n\n[![Release](https://img.shields.io/github/v/release/psiace/bub)](https://github.com/psiace/bub/releases)\n[![Build status](https://img.shields.io/github/actions/workflow/status/psiace/bub/main.yml?branch=main)](https://github.com/psiace/bub/actions/workflows/main.yml?query=branch%3Amain)\n[![Commit activity](https://img.shields.io/github/commit-activity/m/psiace/bub)](https://github.com/psiace/bub/graphs/commit-activity)\n[![License](https://img.shields.io/github/license/psiace/bub)](LICENSE)\n\n\u003e Bub it. Build it.\n\nBub is a coding agent CLI built on `republic`.\nIt is designed for real engineering workflows where execution must be predictable, inspectable, and recoverable.\n\n## Four Things To Know\n\n1. Command boundary is strict: only lines starting with `,` are treated as commands.\n2. The same routing model is applied to both user input and assistant output.\n3. Successful commands return directly; failed commands fall back to the model with structured context.\n4. Session context is append-only tape with explicit `anchor/handoff` transitions.\n\n## Quick Start\n\n```bash\ngit clone https://github.com/psiace/bub.git\ncd bub\nuv sync\ncp env.example .env\n```\n\nMinimal `.env`:\n\n```bash\nBUB_MODEL=openrouter:qwen/qwen3-coder-next\nOPENROUTER_API_KEY=your_key_here\n```\n\nStart interactive CLI:\n\n```bash\nuv run bub\n```\n\n## Interaction Rules\n\n- `hello`: natural language routed to model.\n- `,help`: internal command.\n- `,git status`: shell command.\n- `, ls -la`: shell command (space after comma is optional).\n\nCommon commands:\n\n```text\n,help\n,tools\n,tool.describe name=fs.read\n,skills.list\n,skills.describe name=friendly-python\n,handoff name=phase-1 summary=\"bootstrap done\"\n,anchors\n,tape.info\n,tape.search query=error\n,tape.reset archive=true\n,quit\n```\n\n## Telegram (Optional)\n\n```bash\nBUB_TELEGRAM_ENABLED=true\nBUB_TELEGRAM_TOKEN=123456:token\nBUB_TELEGRAM_ALLOW_FROM='[\"123456789\",\"your_username\"]'\nuv run bub message\n```\n\n## Discord (Optional)\n\n```bash\nBUB_DISCORD_ENABLED=true\nBUB_DISCORD_TOKEN=discord_bot_token\nBUB_DISCORD_ALLOW_FROM='[\"123456789012345678\",\"your_discord_name\"]'\nBUB_DISCORD_ALLOW_CHANNELS='[\"123456789012345678\"]'\nuv run bub message\n```\n\n## Documentation\n\n- `docs/index.md`: getting started and usage overview\n- `docs/deployment.md`: local + Docker deployment playbook\n- `docs/features.md`: key capabilities and why they matter\n- `docs/cli.md`: interactive CLI workflow and troubleshooting\n- `docs/architecture.md`: agent loop, tape, anchor, and tool/skill design\n- `docs/telegram.md`: Telegram integration and operations\n- `docs/discord.md`: Discord integration and operations\n\n## Development\n\n```bash\nuv run ruff check .\nuv run mypy\nuv run pytest -q\njust docs-test\n```\n\n## License\n\n[Apache 2.0](./LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsiace%2Fbub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsiace%2Fbub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsiace%2Fbub/lists"}