{"generated_at":"2026-09-28T13:46:29Z","blocks":[{"name":"agents","description":"The named-persona roster (Sprite, Herald, Runekeeper, Wayfarer, ...) issues are routed to by label/keyword, each with its own cross-repo memory.","fields":{"enabled":true,"max_memory_lines":50,"memory_dir":"/home/michel/apps/github-agent/agent-memory","roster":[{"fallback":false,"id":"sprite","keywords":["mobile","responsive","ios","android","touch","viewport","breakpoint","small screen","smartphone","tablet","pwa"],"labels":["mobile"],"name":"Sprite","responsibilities":"Mobile and small-screen experience: responsive layouts, touch interactions, viewport and breakpoint behavior, mobile navigation patterns, PWA/native shells, and mobile performance. You hold the line on every screen narrower than a laptop.","role":"Mobile experience specialist"},{"fallback":false,"id":"herald","keywords":["cqrs","command bus","query bus","event","handler","saga","projection","subscriber","dispatch","messaging","domain event"],"labels":["cqrs","events"],"name":"Herald","responsibilities":"Command/query separation and event-driven architecture: command and query bus contracts, handlers, domain events and subscribers, sagas, projections, and the messaging boundaries between modules. You keep commands, queries, and events clean, explicit, and decoupled.","role":"CQRS \u0026 event patterns specialist"},{"fallback":false,"id":"runekeeper","keywords":["database","schema","migration","sql","entity","index","typeorm","relation","data model","dolt","postgres","jsonb"],"labels":["database","db"],"name":"Runekeeper","responsibilities":"Data modeling and storage: schemas, migrations, entities and relations, indexes, query shape and performance, and the integrity rules that keep stored data trustworthy. You guard the shape of everything the platform remembers.","role":"Database modeling specialist"},{"fallback":true,"id":"wayfarer","keywords":[],"labels":[],"name":"Wayfarer","responsibilities":"Everything without a dedicated specialist: general features, fixes, refactors, docs, tooling, and any task that spans several specialties at once. The road decides your work; you are ready for all of it.","role":"Jack-of-all-trades"}]}},{"name":"approval","description":"Lets a human unstick a REVIEW-labeled issue by posting one of a set of approval words as a comment, which re-fires the merge step.","fields":{"enabled":true,"label":"","tokens":{"set":true}}},{"name":"auto_review","description":"Posts an advisory (non-blocking) review comment on opted-in human pull requests; never approves, blocks, or merges anything itself.","fields":{"enabled":false,"label":"auto-review","max_diff_bytes":65536,"model":"","reviewed_label":"agent-reviewed"}},{"name":"ci","description":"Waits for the forge's CI checks after pushing a fix and only merges once they're green, retrying via the CI-fixer prompt on failure.","fields":{"enabled":true,"max_attempts":2,"poll_interval":"30s","required_checks":[],"timeout":"20m0s"}},{"name":"concurrency","description":"How many repos the agent is allowed to work on at the same time in a single sweep.","fields":{"max_parallel":3}},{"name":"core","description":"The always-on basics: which labels to work, how often to poll, and the hard ceilings (attempts, cost, lifetime) that apply to every issue.","fields":{"agent_login":"michelroberge","auto_fix_vulnerabilities":false,"auto_quarantine_target_dirty":false,"blocked_label":"NEED ATTENTION","ignore_dirty_default":[".beads/*","apps/backend/src/generated-module-imports.ts","apps/frontend/src/generated-module-imports.ts"],"ignore_untracked_default":[".DS_Store","*.swp","*.swo","*~","docker-compose.override*.yml"],"in_progress_label":"In progress","labels":["bug","enhancement","documentation"],"lock_file":"/tmp/github-agent.lock","max_attempts":3,"max_cost_per_issue":0,"max_lifetime_attempts":9,"pause_marker":"/tmp/github-agent.pause","poll_interval":"5m0s","prompts_dir":"/home/michel/apps/github-agent/prompts","silent_skip_threshold":6,"status_file":"/tmp/github-agent.status.json","stop_marker":"/tmp/github-agent.stop","update_marker":"/tmp/github-agent.update","work_branch_max_commits":0,"work_branch_stale_after":"24h0m0s"}},{"name":"dashboard","description":"This read-only activity dashboard itself: whether it's on, which port it binds, and how often cached data refreshes.","fields":{"allow_writes":false,"bind_addr":"","enabled":true,"issue_list_limit":100,"issue_refresh":"1m0s","metrics_file":"/home/michel/apps/github-agent/metrics.json","port":8077}},{"name":"escalation","description":"The multi-stage planner/executor/reviewer fallback that kicks in when a normal attempt reports BLOCKED, instead of giving up immediately.","fields":{"enabled":true,"reviewer_model":""}},{"name":"gleaner","description":"Scans recently-closed issues for mentions of deferred work and files them as new backlog issues so they aren't forgotten.","fields":{"enabled":true,"filed_label":"gleaner-bot","interval":"24h0m0s","lookback_days":30,"max_new_per_sweep":1,"max_open_per_repo":5,"max_workers":3,"model":"","reviewed_label":"ai-reviewed"}},{"name":"housekeeping","description":"Periodic Docker disk cleanup (dangling images, stale build cache) that never touches anything currently running.","fields":{"enabled":true,"interval":"1h0m0s","min_age":"1h0m0s"}},{"name":"lessons","description":"The gotcha-memory feature: short lessons the model writes for itself after a rough attempt, replayed into future prompts for the same (or every) repo.","fields":{"enabled":true,"max_lines":50,"path":".agent/lessons.md","shared_path":"/home/michel/.local/share/github-agent/lessons.md"}},{"name":"maintenance","description":"A periodic sweep that scans for code rot (TODOs, doc drift, dead code) and files proposed cleanup issues on its own.","fields":{"enabled":true,"idle_trigger":"30m0s","interval":"24h0m0s","max_new_per_sweep":3,"max_open_self_issues":5}},{"name":"models","description":"Which Claude model runs the main attempt for each label, plus the fallback chain used when the preferred model is rate-limited.","fields":{"by_label":{"bug":"claude-sonnet-5","enhancement":"claude-sonnet-5","epic":"claude-opus-5","feat":"claude-sonnet-5","feature":"claude-sonnet-5","improve":"claude-sonnet-5","refactor":"claude-opus-5"},"decompose":"claude-opus-5","default":"claude-sonnet-5","fable":"","fallback":["claude-opus-4-8","claude-sonnet-4-6","claude-haiku-4-5"],"follow_up":""}},{"name":"oidc","description":"Gates the dashboard's HTTP listener behind an OpenID Connect login and an optional group allow-list. Off by default (dashboard open).","fields":{"allowed_group":"","client_id":"","client_secret":{"set":false},"client_secret_env":{"set":true},"cookie_name":"ga_session","cookie_secure":true,"enabled":false,"groups_claim":"groups","issuer_url":"","post_logout_redirect_url":"","redirect_url":"","scopes":["openid","profile","email","groups"],"session_secret":{"set":false},"session_secret_env":{"set":true},"session_ttl":"12h0m0s","username_claim":"preferred_username"}},{"name":"optimizer","description":"A periodic sweep that reads back its own metrics and lessons and files at most one self-improvement proposal issue.","fields":{"auto_work":false,"enabled":true,"idle_trigger":"8h0m0s","interval":"48h0m0s","max_open_need_attention":0,"max_open_self_issues":3,"model":"claude-haiku-4-5","self_repo":"github-agent","window_days":30}},{"name":"prompt_context","description":"Summarises long comment threads with a small model so chatty issues don't force the main model to re-read the whole history every attempt.","fields":{"enabled":true,"keep_last":3,"model":"claude-haiku-4-5","summarise_threshold":8,"summary_dir":".agent/thread-summaries"}},{"name":"r3_updater","description":"A daily sweep that checks for newer @r3/* platform package versions and, per opted-in repo, opens and auto-merges an update PR when CI is green.","fields":{"enabled":true,"interval":"24h0m0s","packages":["@r3/frontend","@r3/backend","@r3/common"],"registry_url":"https://registry.michel-roberge.com"}},{"name":"rate_limit","description":"Backs off GitHub API calls proactively as the shared rate-limit budget runs low, and reactively pauses on an outright 403/429.","fields":{"enabled":true,"max_pause":"15m0s","min_check_interval":"1m0s","reserve":200}},{"name":"repo_context","description":"A hand-maintained repository map (structure, entry points, build/test commands) injected into every prompt so the model doesn't have to rediscover it.","fields":{"enabled":false,"max_bytes":16384,"model":"claude-sonnet-5","path":".agent/context.md","refresh_min_interval":"6h0m0s","stale_after":"168h0m0s","stale_after_commits":30}},{"name":"repos","description":"The configured repositories themselves: path, forge, labels, and every per-repo override of the global blocks above.","fields":{"repos":[{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":{"enabled":true,"idle_trigger":null,"interval":"12h","max_new_per_sweep":null,"max_open_self_issues":null},"max_cost_by_label":{"bug":30,"enhancement":40},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-quest","path":"/home/michel/apps/r3-quest","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker prune -af","repo_context":{"enabled":true,"max_bytes":null,"path":null},"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{"enhancement":50},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"agiler3","path":"/home/michel/apps/agiler3","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":{"enabled":true,"max_bytes":null,"path":null},"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":{"enabled":true,"idle_trigger":null,"interval":null,"max_new_per_sweep":null,"max_open_self_issues":null},"max_cost_by_label":{"enhancement":60},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":12,"models_by_label":{},"name":"r3-platform","path":"/home/michel/apps/r3-platform","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"brainfolio","path":"/home/michel/apps/brainfolio","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"fermier-de-famille","path":"/home/michel/apps/fermier-de-famille","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-blog","path":"/home/michel/apps/r3-blog","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"https://forge.michel-roberge.com","owner":"","repo":"","token_env":{"set":true},"type":"forgejo"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-home","path":"/home/michel/apps/r3-home","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"https://forge.michel-roberge.com","owner":"","repo":"","token_env":{"set":true},"type":"forgejo"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-lims","path":"/home/michel/apps/r3-lims","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{"enhancement":50},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"github-agent","path":"/home/michel/apps/github-agent","prompts_dir":"","r3_update":null,"rebuild_command":"touch /tmp/github-agent.update \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"gamehub","path":"/home/michel/games/gamehub","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"snakers","path":"/home/michel/games/snakers","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -af","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"TicTacTOllama","path":"/home/michel/games/TicTacTOllama","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"pong-ai","path":"/home/michel/games/pong-ai","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{"enhancement":30},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"endless-rpg-ai","path":"/home/michel/games/endless-rpg-ai","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-skill-matcher","path":"/home/michel/apps/r3-skill-matcher","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"R3-securitar","path":"/home/michel/apps/R3-securitar-","prompts_dir":"","r3_update":null,"rebuild_command":"touch /tmp/r3-securitar.update \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":["web/src/*.js"],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"R3-linker","path":"/home/michel/apps/R3-linker","prompts_dir":"","r3_update":null,"rebuild_command":"touch /tmp/r3-linker.update \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"r3-obnl","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-obnl","path":"/home/michel/apps/r3-obnl","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"stones","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"stones","path":"/home/michel/games/stones","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"fr3gger","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"fr3gger","path":"/home/michel/games/fr3gger","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"r3-teach","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"r3-teach","path":"/home/michel/apps/r3-teach","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"rackanoid","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"rackanoid","path":"/home/michel/games/rackanoid","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -a -f","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"Chainbloom","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"Chainbloom","path":"/home/michel/games/Chainbloom","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -af","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"soapboxrush","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"soapboxrush","path":"/home/michel/games/soapboxrush","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -af","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"main","env_context":"","forge":{"base_url":"","owner":"michelroberge","repo":"cappybuddha","token_env":{"set":false},"type":"github"},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"cappybuddha","path":"/home/michel/games/cappybuddha","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build \u0026\u0026 docker system prune -af","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":null,"branch":"develop","env_context":"No iOS simulator or Xcode available in the agent environment. Cannot build or run mobile UI tests. Verify logic-level changes only; submit with a note for operator to run device tests.","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":4,"models_by_label":{},"name":"gamehub-mobile","path":"/home/michel/games/gamehub-mobile","prompts_dir":"","r3_update":null,"rebuild_command":"","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":{"enabled":true,"idle_trigger":null,"interval":"1h","max_new_per_sweep":null,"max_open_self_issues":null},"max_cost_by_label":{"enhancement":50},"max_cost_per_cycle_by_label":{"enhancement":750},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{"enhancement":"claude-opus-5"},"name":"r3-etl","path":"/home/michel/apps/r3-etl","prompts_dir":"","r3_update":{"enabled":true},"rebuild_command":"docker compose -f docker-compose.override.yml up -d --build \u0026\u0026 docker system prune -af","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"main","env_context":"No iOS/Android build toolchain, simulator, or Xcode in the agent environment. Verify with `npx tsc --noEmit` (nvm use 24 first), jest once present, and `npx expo prebuild --no-install` for config-plugin changes; never attempt device builds. Note in the report when a change needs an operator device test.","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":null,"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"activity-tracker","path":"/home/michel/apps/activity-tracker","prompts_dir":"","r3_update":null,"rebuild_command":"","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""},{"auto_fix_vulnerabilities":null,"auto_review":null,"beads":true,"branch":"develop","env_context":"","forge":{"base_url":"","owner":"","repo":"","token_env":{"set":false},"type":""},"ignore_dirty":[],"ignore_untracked":[],"labels":[],"lessons":null,"maintenance":{"enabled":true,"idle_trigger":null,"interval":"8h","max_new_per_sweep":null,"max_open_self_issues":null},"max_cost_by_label":{},"max_cost_per_cycle_by_label":{},"max_cost_per_issue":null,"max_lifetime_attempts":null,"models_by_label":{},"name":"ghomemish","path":"/home/michel/apps/ghomemish","prompts_dir":"","r3_update":null,"rebuild_command":"docker compose up -d --build","repo_context":null,"work_branch_max_commits":null,"work_branch_stale_after":""}]}},{"name":"review","description":"Gates auto-close behind a deterministic risk check on the diff the model produced; risky commits are labeled and left open instead of merged.","fields":{"enabled":true,"files_threshold":10,"label":"NEED ATTENTION","lines_threshold":300,"raw_risky_paths":["^schema/","^migrations/","(^|/)Dockerfile","^infra/","^terraform/","^k8s/","^auth/","\\.lock$","(^|/)\\.env"],"risky_paths":["^schema/","^migrations/","(^|/)Dockerfile","^infra/","^terraform/","^k8s/","^auth/","\\.lock$","(^|/)\\.env"]}},{"name":"schedule","description":"An optional daily pause window during which the agent stays up but stops picking new work, so it can go quiet outside working hours.","fields":{"enabled":true,"loc":"Local","pause_min":945,"pause_str":"15:45","resume_min":1425,"resume_str":"23:45"}},{"name":"sentinel","description":"Posts a sticky comment to a designated issue whenever a repo is silently skipped repeatedly, so an operator notices without tailing logs.","fields":{"enabled":false,"label":"agent-status"}},{"name":"teamwork","description":"The opt-in parallel-workstream mode: an analyzer splits a large issue into independent slices worked concurrently, then a Round Table quorum reviews the merge.","fields":{"analyzer_model":"","enabled":true,"labels":["enhancement","bug"],"max_workers":3,"round_table":{"knights":3,"model":"","quorum":2}}},{"name":"tools","description":"Which agent CLI (claude or codex) runs the main attempt for each label.","fields":{"by_label":{},"default":""}},{"name":"triage","description":"An optional cheap pre-flight pass that auto-labels unlabeled issues and checks whether a picked issue should be decomposed before the main attempt runs.","fields":{"auto_label":{"enabled":true,"interval":"30m0s","list_limit":100},"enabled":true,"feasibility":{"enabled":true},"model":"claude-haiku-4-5"}},{"name":"webhook","description":"An optional forge webhook receiver that wakes the agent immediately on new or labeled issues instead of waiting for the next poll.","fields":{"enabled":false,"path":"/webhooks/forge","secret":{"set":false},"secret_env":{"set":false},"secret_file":{"set":false}}}]}
