event_type: claimed

issue_id: rook-bfj

title: Project scaffolding: pyproject.toml, src layout, uv setup

description: Initialize Python project. pyproject.toml with deps (anthropic, elevenlabs, python-telegram-bot, dearpygui). Set up src/rook/ package. Configure uv.

status: open

issue_type: task


event_type: closed

status: closed


title: Core agent loop: asyncio, Claude API, tool dispatch

description: Main agent turn loop. Claude Haiku 4.5 primary, Sonnet 4.6 fallback. Tool call dispatch. Asyncio event loop with background daemon thread support.


title: Policy engine: allowlists, confirm gates, backup-before-edit

description: Core policy module. Allowlists per capability (file, shell, git). confirm_spawn() gate for risky ops. backup_before_edit() helper. Approved working dirs enforcement.


title: Shell capability: safe subprocess execution

description: Run shell commands with policy checks. Allowlist of approved dirs and commands. confirm_spawn() gate. Log all subprocess calls with timestamps.


title: File capability: read/write/edit with backup

description: File operations with backup-before-edit. Allowlist for working dirs. No destructive deletes without confirmation. Type-hinted API.


issue_id: rook-wka

title: Git capability: git ops with policy allowlist

description: Git operations (status, diff, add, commit, log). Allowlist gates on push/reset/force ops. Confirmation required for destructive git commands.


event_type: updated

description: Discord bot daemon thread. Poll for messages and audio attachments. Pass audio through STT. Route transcribed text to agent queue via asyncio.run_coroutine_threadsafe(). Use discord.py (pip: discord.py). Bot token from DISCORD_BOT_TOKEN env var. Listen in a designated channel.

title: Discord integration: polling, audio STT input

title: Telegram integration: polling, audio STT input

description: Telegram bot daemon thread. Poll for messages and audio notes. Pass audio through STT. Route transcribed text to agent queue via asyncio.run_coroutine_threadsafe().


title: CoSy integration: subprocess pipe to CoSy.bat/reva.exe

description: Launch CoSy as persistent subprocess via Popen. stdin/stdout pipe. Send Forth-APL expressions, read results. Backup before redefining words. Only load from personal vocab dir.


issue_id: rook-iwn

description: GUI using imgui-bundle (NOT dearpygui — multi-viewport issues). Dockable panels: agent transcript, TTS status, CoSy output. Dark theme. Runs on main thread; asyncio on background daemon thread. Use imgui_bundle.imgui and imgui_bundle.hello_imgui. No dearpygui anywhere.

title: imgui-bundle GUI: dockable panels for agent transcript and status

title: Dear PyGui GUI: ModernCoSy dockable panels

description: Dear PyGui dark-theme GUI. Dockable panels for agent transcript, TTS status, CoSy output. Runs on main thread; asyncio on background daemon thread.


description: Discord bot daemon thread. Poll for messages and audio attachments. Pass audio through STT. STT backend pluggable via STT_BACKEND env var: 'whisper' uses openai.Audio.transcribe (OPENAI_API_KEY), 'google' uses google.cloud.speech (GOOGLE_STT_KEY). Route transcribed text to agent queue via asyncio.run_coroutine_threadsafe(). Use discord.py. Bot token from DISCORD_BOT_TOKEN env var. Listen in a designated channel.


title: TTS output: ElevenLabs Rook voice + Google TTS fallback

description: Speak agent responses. ElevenLabs TTS with Rook voice ID (scratchy/military). Google TTS fallback. Async playback so it doesn't block the agent loop.