원클릭으로
cross-device-deployment
Use when deploying pigeon code changes across all machines after merging to main
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when deploying pigeon code changes across all machines after merging to main
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when you need to understand worker architecture, endpoint flow, and command routing behavior before making changes
Use when you need to understand daemon route flow, storage model, worker connectivity, and command injection architecture before making changes
Use when you need to understand the OpenCode plugin event lifecycle, session state transitions, and daemon API contracts
Use when developing or refactoring OpenCode plugin handlers, tests, and daemon integration payloads
Use when you need to understand the swarm IPC subsystem — tables, routes, the per-target arbiter, the session→directory registry, and the wire envelope — before changing it
Use when implementing or testing swarm IPC features (new kinds, channels, plugin tools, or schema changes) with a TDD-first workflow
| name | cross-device-deployment |
| description | Use when deploying pigeon code changes across all machines after merging to main |
After merging code changes to main, deploy across all machines.
One deploy covers all devices. See worker-deployment skill for full details.
cd ~/projects/pigeon
npm run --workspace @pigeon/worker deploy
On each machine, pull latest code and restart the daemon.
cd <project-path>/pigeon
git pull
npm install
| Machine | Command |
|---|---|
| devbox | sudo systemctl restart pigeon-daemon.service |
| cloudbox | sudo systemctl restart pigeon-daemon.service |
| macbook | launchctl stop org.nix-community.home.pigeon-daemon && launchctl start org.nix-community.home.pigeon-daemon |
| chromebook | systemctl --user restart pigeon-daemon.service |
⚠️
opencode-serve.serviceno longer exists on devbox or cloudbox. Both now run a pool of instances (opencode-serve@4096..4099.service) governed byopencode-serve-pool.target, and the instances arePartOf=that target, so restarting the target propagates. The old single-unit command fails outright (Unit opencode-serve.service could not be found). Note the two hosts differ in scope: cloudbox's pool is a system target, devbox's is a user target — so devbox takes no sudo.
| Machine | Command |
|---|---|
| devbox | systemctl --user restart opencode-serve-pool.target — user unit, no sudo |
| cloudbox | sudo systemctl restart opencode-serve-pool.target |
| macbook | Verify the label first: launchctl list | grep opencode |
| chromebook | Verify the label first: systemctl --user list-units '*opencode*' |
Restarting opencode-serve is usually NOT required to deploy pigeon. The daemon and worker carry the routing/notification logic; opencode-serve only needs cycling when the plugin changed and you want that change live immediately. It is not free:
So prefer: deploy worker + daemons, and schedule the pool restart deliberately rather than reflexively as a deploy step.
Verify the pool afterwards by instance, not just the one port:
systemctl --user list-units 'opencode-serve@*' (devbox) /
systemctl list-units 'opencode-serve@*' (cloudbox).
If any command fails because a name doesn't match, discover the real one with
systemctl list-units '*opencode*' / systemctl --user list-units '*opencode*' (Linux) or
launchctl list | grep opencode (macOS) before improvising.
curl -s http://127.0.0.1:4731/health # pigeon-daemon
curl -s http://127.0.0.1:4096/global/health # opencode-serve (ONE pool instance only)
Both should return JSON with "ok":true / "healthy":true.
On the pool hosts (devbox, cloudbox) the :4096 curl proves only that one of four instances
is up. Check them all — a single wedged instance silently degrades a quarter of sessions:
for p in 4096 4097 4098 4099; do
printf '%s: ' "$p"; curl -s --max-time 3 "http://127.0.0.1:$p/global/health" || echo DOWN
echo
done
If service definitions changed (not just application code), rebuild instead of restarting:
| Machine | Command |
|---|---|
| devbox | sudo nixos-rebuild switch --flake .#devbox |
| cloudbox | sudo nixos-rebuild switch --flake .#cloudbox |
| macbook | darwin-rebuild switch --flake .#Y0FMQX93RR-2 |
| chromebook | home-manager switch --flake .#livia |
Service definitions live in ~/projects/workstation.
| Machine | OS | Project path | Service manager | CCR_MACHINE_ID |
|---|---|---|---|---|
| devbox | NixOS | ~/projects/pigeon | systemd (system) | devbox |
| cloudbox | NixOS | ~/projects/pigeon | systemd (system) | cloudbox |
| macbook | macOS | ~/Code/pigeon | launchd (user agent) | macbook |
| chromebook | Crostini | ~/projects/pigeon | systemd (user) | chromebook |
All four machines run both pigeon-daemon and opencode-serve under their service manager.
| Machine | Command |
|---|---|
| devbox/cloudbox | journalctl -u pigeon-daemon.service -n 50 --no-pager |
| macbook | cat ~/Library/Logs/pigeon-daemon.err.log |
| chromebook | journalctl --user -u pigeon-daemon.service -n 50 --no-pager |