opencode: monitor delivery never starts on its own — the rule file is not loaded, and the watcher's owner never matches the actas lock

Aperta
#1,663 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
bash, shell

Direzione di ricerca

Start with scripts/drivers/types/opencode/type.conf, the generated .opencode/rules/agmsg.md, the OpenCode skill at ~/.config/opencode/skills/agmsg/SKILL.md, and the watch.sh and actas-claim.sh owner handling; compare these with OpenCode 1.19's instruction loading and the sentinel launch environment described in the report. Reproduce with the listed opencode run prompt and the minimal steps, then check how the owner tokens differ. Done when monitor instructions load, the claim and watcher agree on the owner, and the role filtered watcher starts for the reproduction.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Environment

  • agmsg v1.5.3-4-ge3a9325 (the first observation was on 2026-10-15, with the install from that day)
  • OpenCode 1.19.0 (V1 TUI), opencode-sentinel 0.1.5
  • Linux (WSL2), herdr terminal driver
  • Model: a local Qwen model behind an OpenAI-compatible endpoint
  • Team: one OpenCode seat (oc-worker, delivery monitor) next to Claude Code and Codex seats

Summary

In monitor mode, a fresh OpenCode session does not start an inbox watcher by itself. When the model does start one with the rule's command, watch.sh refuses the pair, because the watcher and actas-claim.sh end up with different owner tokens. The only way we found to get delivery is to read owner= from the role-session record and pass it to watch.sh by hand.

1. .opencode/rules/agmsg.md is not loaded by OpenCode

delivery.sh set monitor opencode <project> writes <project>/.opencode/rules/agmsg.md (hooks_file in scripts/drivers/types/opencode/type.conf). OpenCode 1.19 does not load that path. Its instruction loader reads AGENTS.md, CLAUDE.md and CONTEXT.md, the global ~/.config/opencode/AGENTS.md, and whatever the config lists under instructions. Nothing in agmsg adds the rule file to instructions.

Check: in the project, opencode run "Do not use any tools. Does your system prompt contain a section titled 'agmsg Integration Rule'? Answer YES or NO." answers NO. The same question about a file listed under instructions answers YES and quotes it.

Effect: the "Real-time inbox watcher" step never reaches the model. The installed ~/.config/opencode/skills/agmsg/SKILL.md does not cover it either. Its actas steps are identities → join → set FROM → report, with no actas-claim.sh and no watcher. In our session the model did not start a watcher after actas, and a reviewer's LWPASS sat unread until someone poked the seat.

2. The watcher's owner token never matches the lock taken by actas-claim.sh

  • The model runs actas-claim.sh through OpenCode's bash tool, where SENTINEL_SESSION_ID is unset (echo "${SENTINEL_SESSION_ID:-(unset)}" prints (unset)). Whether the model passes - or "${SENTINEL_SESSION_ID:--}", agmsg_normalize_instance_id produces -.<opencode pid>, and the lock owner becomes, for example, -.12345.
  • The rule's watcher command is watch.sh "${SENTINEL_SESSION_ID:--}" <project> opencode. opencode-sentinel spawns it with SENTINEL_SESSION_ID set to the OpenCode session id (src/lib/watcher.ts: env: { ...process.env, SENTINEL_SESSION_ID: params.sessionID }), so the watcher's owner is derived from ses_…, not from -.
  • Passing a literal - to watch.sh does not help either: line 60 maps - to empty, and line 111 then mints agmsg-<uuid>.

Observed (sentinel's stderr log, 2026-10-15):

agmsg watch: not serving these pairs (held by another session, or unverified): example-team/oc-worker(-.12345)

Minimal reproduction

  1. Install opencode-sentinel. Join an OpenCode seat to a team, then delivery.sh set monitor opencode <project>.
  2. Start opencode, then $agmsg actas <name>.
  3. Expected: a watcher starts and messages sent to <name> stream in. Actual: no watcher starts (1). If you ask the model to start the rule's command through sentinel_monitor, it exits with "not serving these pairs" (2).

Workaround we use

After actas-claim.sh "$(pwd)" opencode <name> -, read owner= from ~/.agents/skills/agmsg/run/role-session.<team>__<name>. Then start watch.sh '<owner>' <project> opencode <name> through sentinel_monitor. We put this procedure in a file listed under instructions. With it, a test message was answered within 3 seconds.

Possible directions (for discussion)

  • Register the rule file under instructions in the project's OpenCode config, or move its content to a location OpenCode loads.
  • Make actas-claim.sh and the sentinel-launched watch.sh derive the same owner for opencode, for example by not taking SENTINEL_SESSION_ID from the watcher's environment, or by having watch.sh normalize - the way actas-claim.sh does. Add the claim and the role-filtered watcher (4th argument) to the OpenCode skill's actas steps.

Related: #1462 (OpenCode V2 changes; this report is about V1 1.19).


This report was drafted with an AI coding assistant (Claude Code) from our own session logs and the agmsg sources. I checked the observations and quoted output against the logs before filing.

Lingua principale
Shell
Stelle
1.5k
Fork
156
Merge medio
14h 56m
PR unite (30g)
203

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di fujibee/agmsg

Tutte le issue di fujibee/agmsg

Issue simili

Altre issue su Shell/Bash

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.