Skip to content

Add /fleet-announce command + BOOT.md conversation recovery#40

Merged
TechNickAI merged 5 commits intomainfrom
fleet-announce
Mar 24, 2026
Merged

Add /fleet-announce command + BOOT.md conversation recovery#40
TechNickAI merged 5 commits intomainfrom
fleet-announce

Conversation

@TechNickAI
Copy link
Owner

What

Two additions:

  1. BOOT.md template: Adds conversation recovery on restart. When the gateway restarts within 1 minute of an active direct conversation, reads the last transcript entries and sends a brief recovery message so the user can pick up where they left off.

  2. /fleet-announce command: On-demand command for announcing updates to fleet users. Checks relevance against fleet files, drafts messages in each bot's voice, shows drafts for approval before sending, sends from each person's bot via SSH.

Changes

  • templates/BOOT.md — new Step 2: Conversation Recovery
  • .claude/commands/fleet-announce.md — new command

Nick Sullivan added 4 commits March 24, 2026 00:15
When gateway restarts within 1 minute of an active direct conversation,
read the last transcript entries and send a brief recovery message so
the user can pick up where they left off.
- Single-line description with prettier-ignore
- Remove argument-hint and flags
- Remove all personal data (names, Telegram IDs, SSH hosts)
- Reference fleet files at runtime instead of hardcoding
- Generic examples with [Owner] placeholder
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 05d1b18fc2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

send via SSH:

```bash
ssh <host> "openclaw message send --channel telegram -t <telegram_id> -m '<message>'"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use per-user channel when sending fleet announcements

Step 4 says to read each person’s notification channel from fleet metadata, but the send command is hardcoded to --channel telegram. That will misroute or fail delivery for users configured on other channels (e.g., WhatsApp/Slack), so the new command can skip recipients in mixed-channel fleets. The command template should use channel/target values pulled from each fleet file instead of fixed Telegram flags.

Useful? React with 👍 / 👎.

Comment on lines +11 to +14
- workspace_gid: <your Asana workspace GID>
- project_gid: <your Asana project GID>
- ai_assignee_gid: <GID of this bot's Asana account>
- human_assignee_gid: <GID of the human's Asana account>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove placeholder rules file from task-steward defaults

This commit adds a pre-populated rules.md with placeholder Asana IDs, but workflows/task-steward/AGENT.md gates first-run setup on rules.md not existing, so setup can be skipped while config is still invalid. In that state, task-steward will treat <your Asana workspace GID>-style placeholders as live values and fail task operations. Either don’t ship rules.md by default or make first-run validation detect placeholder/unconfigured values.

Useful? React with 👍 / 👎.

- Fix BOOT.md step label: 'silent start' → 'check for unfinished work' (step 3 is
  unfinished work check; step 4 is silent start)
- Fix fleet-announce.md: use generic <channel>/<recipient_id> in send template
  instead of hardcoded telegram (fleet files may use whatsapp, slack, etc.)
- Remove accidentally-staged task-steward workflow files (QA-PROMPT.md,
  agent_notes.md, rules.md, touched.md) — user-owned state files that don't
  belong upstream; rules.md with placeholder GIDs would break task-steward
  first-run setup on fresh installs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@TechNickAI TechNickAI merged commit 1f3cbf1 into main Mar 24, 2026
6 checks passed
@TechNickAI TechNickAI deleted the fleet-announce branch March 24, 2026 19:43
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.


**If NOT interrupted (> 1 min ago or no recent direct conversation):**

- Skip to step 3 (check for unfinished work)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 1 processing time erodes 1-minute recovery window

Medium Severity

The conversation recovery check in Step 2 compares updatedAt against the current time, but it runs after Step 1 (Orient), which requires reading SOUL.md, USER.md, and memory files. Each file read is a separate tool call that takes real wall-clock time. By the time Step 2 executes, a significant portion of the 1-minute window has already elapsed — making recovery unreliable or impossible if Step 1 takes longer than a minute. The timestamp check or the step ordering needs to account for boot-time overhead.

Additional Locations (1)
Fix in Cursor Fix in Web

send via SSH:

```bash
ssh <host> "openclaw message send --channel <channel> -t <recipient_id> -m '<message>'"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLI flags inconsistent with all other usages

Medium Severity

The SSH command uses -t and -m short flags for openclaw message send, but every other invocation in the codebase (devops/health-check.md, devops/machine-setup-linux.md, devops/machine-setup.md, .claude/commands/update-model.md) consistently uses --target and --message. If the CLI doesn't support these short aliases, the send commands will fail for every fleet announcement.

Fix in Cursor Fix in Web

```

**Important:** Single quotes in the message must be escaped. Messages come FROM their
bot, not from the fleet owner.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SSH double-quote expansion corrupts messages with dollar signs

Low Severity

The SSH command wraps the entire remote command in double quotes, meaning $, backticks, and \ in the message are expanded by the local shell before SSH transmits them. The escaping note only mentions single quotes, missing these double-quote metacharacters entirely. Messages containing common characters like $ or backticks would be silently corrupted.

Fix in Cursor Fix in Web

TechNickAI pushed a commit that referenced this pull request Mar 25, 2026
- BOOT.md: Move conversation recovery check to Step 1 so the 1-minute
  window is measured from actual restart time, not after Orient finishes
  loading SOUL.md/USER.md/memory files
- fleet-announce.md: Use --target/--message long flags for consistency
  with all other openclaw CLI usages in the codebase
- fleet-announce.md: Wrap SSH command in single quotes so $ signs,
  backticks, and backslashes in messages aren't expanded by local shell

Addresses bot feedback from PR #40 review sweep.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant