Skip to content

Add Codex GUI poller bridge#7

Open
ThinkOffApp wants to merge 37 commits intomainfrom
codex/gui-poller-bridge
Open

Add Codex GUI poller bridge#7
ThinkOffApp wants to merge 37 commits intomainfrom
codex/gui-poller-bridge

Conversation

@ThinkOffApp
Copy link
Owner

Summary

  • Adds command-mode room poller for Codex GUI
  • Fixes auth header and strict JSON issues in pollers
  • Adds Gemini timeout wrapper for antfarm bots
  • Adds LICENSE and updated README

Test plan

  • Codex poller verified running and healthy
  • Branch pushed and verified on remote

🤖 Generated with Claude Code

ClaudeMM and others added 30 commits February 23, 2026 02:14
- scripts/room-poll.sh: bash poller with 10s interval, tmux nudge
- scripts/room-poll-check.py: checks rooms, auto-acks messages from
  petrus via direct curl (2s response), then nudges Claude Code for
  full response

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add .gitignore (node_modules, *.jsonl, exec-approvals.json, .env, logs)
- Untrack ide-agent-receipts.jsonl (runtime data)
- Remove hardcoded API key from tools/geminimb_room_autopost.sh (now env-driven)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document the tested configuration: Claude Opus 4.6 (@claudemm),
GPT 5.3 Codex (@AntiGravity), and Gemini 3.1 (@geminiMB) running
concurrently with <10s response times via room pollers. Add env
var reference table, keepalive CLI docs, and agent setup examples.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clarify that the 3-agent setup works across machines over the
internet — no VPN, shared filesystem, or direct networking needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
claudemm = Claude Code CLI on Mac mini, antigravity = Codex macOS
app on MacBook, geminimb = Antigravity macOS app on MacBook.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New IAK_LISTEN_MODE env var with 4 modes:
- all: listen to every message (including bots)
- humans: skip bot messages
- tagged: only when @mentioned
- owner: only from owner (previous behavior)

Default changed to "all" per team requirement for autonomous
bot-to-bot discussion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document all integrations: GitHub webhooks (HMAC verification,
event normalization), OpenClaw bot fleet (gateway, sessions, exec
approvals, hooks, cron), Ant Farm chat rooms, and all other
modules (receipts, emit, memory, keepalive, tmux, watch).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. tools/geminimb_room_autopost.sh: remove re-added hardcoded API
   key, restore env var pattern
2. src/room-poller.mjs: fix undefined BASE_URL in postAck() by
   using full URL inline (matches fetchRoomMessages pattern)
3. schemas/event.normalized.json: add "antfarm" source,
   "antfarm.message.created" kind, and "room" field
4. src/watch.mjs: fix byte vs char indexing bug by reading new
   bytes via Buffer.slice instead of String.slice

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GeminiMB keeps re-adding the literal key. Added explicit warning comment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s and silently ingesting tasks to the GUI queue instead
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Multiple poller processes were spawning on restart, causing race
conditions on the seen-IDs file and duplicate auto-acks. The lock
file ensures only one poller runs at a time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Petrus Pennanen and others added 7 commits February 23, 2026 07:11
geminimb:
- Fix auth header: was "Authorization: Bearer" but Ant Farm API
  requires "X-API-Key" (posts were silently failing)
- Remove hardcoded REDACTED_GEMINIMB_KEY fallback, require env var
- Add PID lock to prevent duplicate pollers

antigravity:
- Add PID lock to prevent duplicate pollers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ant Farm API requires X-API-Key header, not Authorization:Bearer.
Commit e0d2ab1 incorrectly changed claudemm poller to Bearer auth,
and antigravity had the same bug in its fetch calls (lines 70, 415)
while using correct X-API-Key for posting (line 323).

Now all three pollers consistently use X-API-Key everywhere.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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: 0293562ed9

ℹ️ 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".

if not result.stdout.strip():
return []
data = json.loads(result.stdout, strict=False)
return data.get("messages", data if isinstance(data, list) else [])

Choose a reason for hiding this comment

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

P1 Badge Handle list payloads before calling .get

In _fetch_room_messages, the fallback for array responses is unreachable because data.get("messages", ...) is invoked unconditionally; if the API returns a top-level list, this raises AttributeError before the fallback can apply. In this script, that exception is swallowed by main() and converted to NONE, so the poller silently skips new messages for the entire run instead of processing them.

Useful? React with 👍 / 👎.



def _save_id_set(path: str, values: Iterable[str], keep_last: int = 1000) -> None:
tail = list(values)[-keep_last:]

Choose a reason for hiding this comment

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

P2 Badge Preserve recency when trimming seen/acked IDs

_save_id_set trims with list(values)[-keep_last:], but both callers pass set objects, whose iteration order is not recency-based. After the set grows past keep_last, this can evict recently seen IDs and retain arbitrary older ones, which makes duplicate messages eligible for reprocessing/auto-ack after restarts. Use an ordered structure for IDs (or explicit timestamp ordering) before truncation.

Useful? React with 👍 / 👎.

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