CLAUDE LABJP
CODE — Claude Code adds Trusted Devices, verifying a machine before remote admin sessions beginCODE — CPU use drops about 37% during streaming, keeping long always-on automation steadierCODE — Fullscreen mouse-click controls, voice dictation fixes, and better Linux voice detection landAUTH — Static API keys can now be replaced with short-lived, scoped WIF credentialsTEAM — You can tag Claude directly in Slack and delegate tasks while you focus elsewhereWORKFLOW — Dynamic workflows arrive in research preview, breaking complex work into steps on their ownCODE — Claude Code adds Trusted Devices, verifying a machine before remote admin sessions beginCODE — CPU use drops about 37% during streaming, keeping long always-on automation steadierCODE — Fullscreen mouse-click controls, voice dictation fixes, and better Linux voice detection landAUTH — Static API keys can now be replaced with short-lived, scoped WIF credentialsTEAM — You can tag Claude directly in Slack and delegate tasks while you focus elsewhereWORKFLOW — Dynamic workflows arrive in research preview, breaking complex work into steps on their own
Articles/Cowork
Cowork/2026-06-28Advanced

When Your Cowork × GitHub MCP Triage Quietly Drifts Each Run — Field Notes on Idempotency and Label Boundaries

Cowork + GitHub MCP issue triage looks perfect on the first run, then quietly breaks when left unattended: duplicate comments, reclassification churn, rate exhaustion. Field notes on idempotent prompts, label-boundary self-audits, and request budgets that keep weekly triage stable.

Cowork28GitHub MCPIssue ManagementIdempotencyScheduled Tasks6Indie Dev18

Premium Article

Two weeks into running automated triage, the Monday-morning report stopped me. An old issue I had already left a "checking in" comment on the week before had received a second, nearly identical comment. To the person subscribed to that issue, a bot had simply said the same thing twice. A few other issues that had been type: feature last week were now type: improvement — even though nothing about them had changed.

The first, manual run had gone beautifully. It cleared a pile of unlabeled issues and handed me a prioritized backlog. The trouble was that I had designed triage as a one-time cleanup, not as something that runs again every week. Unattended automation has to be judged less on first-run accuracy and more on whether the hundredth run produces the same result. Otherwise it erodes trust without you noticing.

As an indie developer running several apps and four technical blogs solo, my GitHub backlog is permanently the thing I get to last. That is exactly why unattended automation is worth it — but unattended work fails in a specific way. These are field notes on the three sources of that quiet drift and the implementation that closes each one. They assume you already have GitHub MCP connected and want to put triage on a schedule.

The three drift sources that break unattended triage

There is a clear taxonomy to how triage that works by hand falls apart once it runs unattended. If you lump it all under "the accuracy is bad," no amount of prompt polishing will fix it.

Drift sourceSymptomRoot cause
Non-idempotent stateComments pile up on the same issue; labels get reappliedEach run decides from scratch without reading its own prior output
Label-boundary driftClassification wobbles week to week with no change in contentThe criteria are not written down, so the week's wording decides
Rate cascadeLater issues go unprocessed; the run stops silently mid-wayCombined fetch/update/comment requests hit the hourly ceiling

Each is solved not by issuing stronger instructions but by observing state before acting.

Drift source 1: non-idempotent work double-posts comments

Idempotency — the property that repeating an operation does not change the result — is the foundation of unattended work. By hand, you remember "I already did this one last week." A scheduled session starts blank every time. Unless you record what you did and read it back on every run, double-processing is guaranteed.

The real damage shows up in comments, because they notify people. Relabeling is silent; a comment rings someone's inbox. The fix is to embed a machine-readable marker in the comments you author, and check for it next time.

Before commenting on Issue #<n> in [owner/repo],
fetch its existing comments with get_issue.

Skip condition (if met, add no comment and record "skipped: already-marked"):
- A comment already contains the string "<!-- cowork-triage:stale-check -->"

Only if not met, add this comment with add_issue_comment.
Keep the trailing HTML comment — it is the marker.

---
This issue hasn't been updated in a while, so this is a status check.
If it still reproduces on the current version, let us know. If not, feel free to close.
<!-- cowork-triage:stale-check -->
---

The point is using an invisible <!-- ... --> as the identifier. GitHub does not render HTML comments, so readers see only the natural sentence while the machine reliably detects "already handled." Do not match on the visible text — change a word and the dedup breaks and you double-post again. Always match a fixed marker.

Make label updates idempotent the same way: scope the target with a predicate over current state — "only the unlabeled ones," "only those without status: triage yet." "Reclassify every open issue" looks powerful but touches everything each run, which is the breeding ground for wobble.

In [owner/repo], target only open issues with no label starting with "type:"
(do not touch already-classified ones).

If you have wrestled with the same idempotency problem on the topic-generation side of an unattended pipeline, the predicate-over-state pattern will feel familiar (Designing a duplicate-topic detection gate for unattended Cowork pipelines).

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
A marker-based idempotent triage prompt that runs weekly unattended without duplicate comments or reclassification churn
A weekly self-audit that catches label-boundary drift (feature vs improvement) and proposes fixes instead of silently overwriting
A request budget that prevents GitHub API rate cascades, plus a defensive auth posture moving from static PATs toward short-lived credentials
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Cowork2026-05-03
Honest 6-Month Review of Claude Cowork — What Actually Worked for an Indie Developer
A candid 6-month review of Claude Cowork from an indie developer's perspective. Covers scheduled tasks, skills, and the memory system — what exceeded expectations, what was genuinely painful, and the hard-won lessons that changed how I use AI automation.
Cowork2026-06-25
My Unattended Task Was Overwriting the Previous Day's Log — the Container's date Was Returning UTC
A Cowork scheduled task that wrote date-stamped logs was silently overwriting the prior day's file. The culprit was the container's date returning UTC. Here is how I isolated it and the permanent fix: pin the timezone, append instead of overwrite, and detect the failure.
Cowork2026-06-13
Running Cowork Scheduled Tasks in Practice — From a Morning Digest to Unattended Weekly Reports
How to set up recurring runs, reminders, and automated reports with Claude Cowork's scheduled tasks — covering cron basics, prompt design that survives unattended execution, and how to schedule multiple tasks so they stay reliable.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →