v7: /goal IS autopilot, drop topic emoji, silence allowed, codex goals=true#215
Open
MagMueller wants to merge 1 commit into
Open
v7: /goal IS autopilot, drop topic emoji, silence allowed, codex goals=true#215MagMueller wants to merge 1 commit into
MagMueller wants to merge 1 commit into
Conversation
…ex goals=true, schedule alias Per Magnus's v7 spec: simplify the mode model and drop the visual clutter. **Modes (clarified):** - The whole box is **copilot by default** — every topic, every DM, every interaction. - `/goal <X>` is the ONLY way to engage autopilot. Spawns a fresh topic, agent works end-to-end without approvals until done/blocked/impossible. - /autopilot and /copilot per-topic toggles still exist as fallbacks but aren't doctrinally primary anymore. - Drop the 🛟/🚀 topic-title emoji prefix entirely (no _decorate_topic_title, no editForumTopic on mode switch). Topics aren't visually labeled by mode anymore. **System prompt updates:** - "Silence is allowed" — if a heartbeat fires and nothing's actionable, send nothing. Empty turns are fine. (OpenClaw HEARTBEAT.md pattern.) - "Onboarding a new topic" section — when user creates a topic manually (not via /goal), agent asks one question: "What should I help you with here?" with example goals (Gmail monitoring, distribution, Reddit posting, partner messages, daily brief, GitHub PRs). Saves to private/goals.md and starts a heartbeat. - "Daily summary" doctrine — once per day, generate a shareable image-card of the day's work and ask "share on X?". User taps Yes/Skip. - agency.db is explicitly framed as the user's preference history; agent reads it to learn what they accept vs ignore. - File trimmed to 124 lines (was 161). **Codex config:** - install.sh + bootstrap.sh now write `[features]\ngoals = true` to /home/bux/.codex/config.toml so codex's `/goal` slash command works out of the box. Idempotent — preserves user customization. **agency-report cleanup:** - Dropped legacy --draft / --reasoning / --description / --draft-html / --reasoning-html flags. Only --block (JSON) remains. - Auto-generates a single draft block from --prompt when no --block is given. - Docstring + arg help cleaned up. **Aliases:** - /usr/local/bin/schedule symlinks to tg-schedule. Both names work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
2 issues found across 6 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="agent/telegram_bot.py">
<violation number="1" location="agent/telegram_bot.py:4718">
P2: The hint `/go` references a command that doesn't exist. Since `/goal` is the sole autopilot trigger (per this PR), the hint should say `/goal` so the user re-tries the same command with an argument.</violation>
</file>
<file name="agent/agency-report">
<violation number="1" location="agent/agency-report:711">
P2: Store plain text in `description` instead of rendered `body_html`; current code persists HTML markup that pollutes refine/more context and displays escaped tags.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.
Re-trigger cubic
| ) -> None: | ||
| title = " ".join((title or "").split()).strip() | ||
| if not title: | ||
| cmd_hint = "/go" if mode == "autopilot" else "/goal" |
Contributor
There was a problem hiding this comment.
P2: The hint /go references a command that doesn't exist. Since /goal is the sole autopilot trigger (per this PR), the hint should say /goal so the user re-tries the same command with an argument.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At agent/telegram_bot.py, line 4718:
<comment>The hint `/go` references a command that doesn't exist. Since `/goal` is the sole autopilot trigger (per this PR), the hint should say `/goal` so the user re-tries the same command with an argument.</comment>
<file context>
@@ -4725,12 +4711,14 @@ def _start_agency_goal_from_command(
) -> None:
title = " ".join((title or "").split()).strip()
if not title:
+ cmd_hint = "/go" if mode == "autopilot" else "/goal"
self.send(
chat_id,
</file context>
Suggested change
| cmd_hint = "/go" if mode == "autopilot" else "/goal" | |
| cmd_hint = "/goal" |
| # DB description was historically the legacy --reasoning text. After v7 | ||
| # the blocks fully replace it; we store the concatenated block bodies so | ||
| # search / dedup still see something searchable. | ||
| db_description = "\n\n".join( |
Contributor
There was a problem hiding this comment.
P2: Store plain text in description instead of rendered body_html; current code persists HTML markup that pollutes refine/more context and displays escaped tags.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At agent/agency-report, line 711:
<comment>Store plain text in `description` instead of rendered `body_html`; current code persists HTML markup that pollutes refine/more context and displays escaped tags.</comment>
<file context>
@@ -745,10 +705,16 @@ def main() -> int:
+ # DB description was historically the legacy --reasoning text. After v7
+ # the blocks fully replace it; we store the concatenated block bodies so
+ # search / dedup still see something searchable.
+ db_description = "\n\n".join(
+ (b.get("body_html") or "").strip() for b in blocks
+ ).strip() or (args.prompt or "")
</file context>
5 tasks
MagMueller
added a commit
that referenced
this pull request
May 15, 2026
…omposio for codex Lands 16 stacked PRs reviewed by multiple sub-agents: - v1 (#209) /goal as primitive, per-topic autopilot vs copilot - v2 (#210) drop agency-mode gate, fold doctrine into CLAUDE.md, delete old Mini App UI - v3 (#211) CLAUDE.md → system-prompt.md (source of truth), agent identity = "agency" - v4 (#212) trim system prompt to 87 lines, mode emoji in topic title, extract bot/markdown.py - v5 (#213) heartbeat-by-default plumbing (later removed), copilot voice fix, autopilot security note - v6 (#214) steering semantics, new-topic spawning, 2-option cards, source-aware images - v7 (#215) /goal IS autopilot framing, drop topic emoji prefix, silence allowed, codex goals=true, `schedule` alias - v8 (#216) drop --spawn-topic, --importance, trim agency-report docstring - v9 (#217) new-topic helper — spawn fresh lane synchronously, queue heartbeat - v10 (#218) self-schedule only when waiting on something concrete; drop auto-heartbeats - v11 (#219) /goal is a verbatim CLI passthrough; bot is a dumb pipe - v12 (#220) drop 30-min timeout, kill lingering heartbeat, prompt-injection defenses, seed goals.md - v13 (#221) /goal stays copilot by default; autopilot only on explicit user opt-in - v14 (#222) doctrine fixes from final multi-agent review - v15 (#223) tighten autopilot triggers — drop the loose phrases - v16 (#224) register composio MCP for codex too; simplify autopilot trigger paragraph Tests: 22 pass. Follow-ups (tracked, not in this merge): - P0: install bootstrap.sh as /usr/local/sbin root:root (closes the trivial bux→root) - P1: stuck-lane watchdog (no-stdout-for-30-min SIGTERM) - P1: /invite is a dead command (remove from BotFather menu) - P1: composio tool names wrong-case in system prompt - P1: help text + COMMANDS still reference dropped autopilot trigger phrases - P1: BUX_BOX_TOKEN provenance for OSS self-host installs - P2: button-tap dispatches bypass _enqueue (lane race on rapid taps) - P2: persisted per-topic autopilot flag in state (instead of LLM phrase detection) - P2: agency_db ghost columns (importance, spawn_topic) - P2: mini app teardown decision (1700 LOC for an unreferenced surface) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #214 (v6). Reshapes the mode model per your "/goal IS autopilot, the whole box is copilot otherwise" clarification.
Mode model (final)
/goal <X>is the ONLY autopilot trigger. Spawns a fresh topic, agent works end-to-end without approvals until done/blocked/impossible. No cards, just progress updates + result./autopilotand/copilotper-topic toggles remain as fallbacks but aren't doctrinally primary._decorate_topic_title, noeditForumTopicon mode switch, no rename logic. Topics aren't visually labeled by mode anymore — the mode lives in the agent's behavior, not the title.System prompt — additions you specifically asked for
private/goals.mdand starts a heartbeat.Codex
/goalconfig — enabled by defaultResearch confirmed: it's
[features]\ngoals = truein~/.codex/config.toml(Codex CLI v0.128.0+, experimental).Both
install.shandbootstrap.shnow write this idempotently. If the user has a custom[features]block, we leave it alone with a warning rather than clobber. Codex's native/goalslash command now works out of the box.agency-report — drop legacy
--draft,--reasoning,--description,--draft-title,--draft-emoji,--reasoning-title,--reasoning-emoji,--draft-html,--reasoning-html. Only--block(JSON) remains.--promptwhen no--blockis passed (so the user always sees what'll fire on Yes-tap).schedulealias/usr/local/bin/schedule→tg-schedulesymlink. Both names work — agent + user can use either.Test plan
/goal Xin a forum → verify a new topic spawns with an autopilot-ack message + heartbeat queued (atq)codexafter install/bootstrap → verify/goalis available ([features] goals = trueis set)which schedule→ resolves to tg-schedule🤖 Generated with Claude Code
Summary by cubic
Simplifies modes:
/goalalways launches an autopilot topic, and everything else defaults to copilot. Drops topic-title emojis, allows quiet heartbeats, enables Codex goals by default, streamlinesagency-report, and adds aschedulealias.New Features
/goal <X>opens a new AUTOPILOT topic;/autopilotand/copilotstill toggle a topic as needed.private/goals.mdwith a heartbeat), and a daily shareable summary card;agency.dbtreated as preference history.install.shandbootstrap.shnow set[features] goals = truein~/.codex/config.tomlsocodex/goalworks out of the box (idempotent).scheduleas an alias totg-schedule.Migration
agency-report: removed--draft,--reasoning,--description, and their--*-htmlvariants; use repeatable--blockJSON. If only--promptis provided, a single draft block is auto-generated./goalnow always starts in autopilot; use/copilotif you need to flip a topic back.Written for commit 3392ab6. Summary will update on new commits. Review in cubic