Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

GitHub Discussion Sync

cryo-gh bridges a cryochamber project with a GitHub Discussion, enabling remote monitoring and two-way messaging. Discussion comments become inbox messages for the agent; outbox messages from the agent become Discussion comments.

Prerequisites

  • GitHub CLI (gh) installed and authenticated (gh auth login)
  • A GitHub repository where you have write access
  • An initialized cryochamber project (cryo init)

Commands

cryo-gh init --repo owner/repo   # Create a Discussion and write gh-sync.json
cryo-gh sync [--interval N]      # Start background sync daemon (default from cryo.toml or 5s)
cryo-gh unsync                   # Stop the sync daemon
cryo-gh pull                     # One-shot: pull new comments → inbox
cryo-gh push                     # One-shot: push latest session log → Discussion
cryo-gh status                   # Show sync configuration

How Sync Works

cryo-gh sync spawns a background daemon (just like cryo start does). It does two things in a loop:

Discussion → Inbox (pull direction): Polls the GitHub Discussion for new comments every --interval seconds (default: gh_poll_interval in cryo.toml, or 5s). New comments are written to messages/inbox/ where the daemon picks them up on the next session.

Outbox → Discussion (push direction): Watches messages/outbox/ for new files. When the agent sends a message (via cryo-agent send), the sync daemon posts it as a Discussion comment and archives the file to messages/outbox/archive/.

GitHub Discussion                  Local filesystem
─────────────────                  ─────────────────
New comment        ──(pull)──→     messages/inbox/       → agent reads on wake
                   ←─(push)──     messages/outbox/      ← agent writes via cryo-agent send

The sync is managed as a system service (launchd on macOS, systemd on Linux) that survives reboots. Logs go to cryo-gh-sync.log.

1. Initialize the project

cryo init --agent claude
# edit plan.md with your task
cryo-gh init --repo owner/repo

This creates a Discussion in the repository (enabling Discussions automatically if needed) and writes gh-sync.json with the Discussion number and node ID.

3. Start the daemon and sync

cryo start
cryo-gh sync

Both run as background daemons. Monitor with cryo watch.

4. Send messages from GitHub

Post a comment on the Discussion from the GitHub web UI or mobile app. The sync daemon picks it up within 30 seconds and writes it to messages/inbox/. The daemon wakes the agent on the next session (or immediately if watch_inbox = true).

5. Read agent replies on GitHub

When the agent calls cryo-agent send "message", the outbox file is detected immediately by the sync watcher and posted as a Discussion comment.

6. Stop

cryo-gh unsync   # stop sync daemon
cryo cancel      # stop cryo daemon

One-Shot Usage

For manual or scripted use without the sync daemon:

cryo-gh pull    # fetch new Discussion comments into inbox
cryo-gh push    # post the latest session log to the Discussion

Rate Limits

The sync daemon uses the gh CLI which makes authenticated GitHub API requests. At the default 30-second interval, this is ~120 requests/hour — well within GitHub’s 5,000 requests/hour limit for authenticated users.

Files

FilePurpose
gh-sync.jsonSync state: repo, Discussion number/ID, cursor
cryo-gh-sync.logSync daemon log output
messages/inbox/Incoming messages (from Discussion comments)
messages/outbox/Outgoing messages (posted to Discussion)
messages/outbox/archive/Posted outbox messages (archived after sync)