<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Agent Island</title>
    <description>The latest articles on DEV Community by Agent Island (@agentis).</description>
    <link>https://dev.to/agentis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4027807%2F6cf08827-f073-40e0-88e0-f303ffba3e3c.png</url>
      <title>DEV Community: Agent Island</title>
      <link>https://dev.to/agentis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentis"/>
    <language>en</language>
    <item>
      <title>A quiet transcript does not prove a coding agent has stalled</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Fri, 31 Jul 2026 06:44:00 +0000</pubDate>
      <link>https://dev.to/agentis/a-quiet-transcript-does-not-prove-a-coding-agent-has-stalled-5amf</link>
      <guid>https://dev.to/agentis/a-quiet-transcript-does-not-prove-a-coding-agent-has-stalled-5amf</guid>
      <description>&lt;p&gt;A local session monitor has to answer a hard question from incomplete evidence: is the coding agent still working, waiting for the user, or simply quiet?&lt;/p&gt;

&lt;p&gt;I help run Agent Island, a local status companion for Claude Code and Codex. Its state model starts with files the tools already write on the machine. That keeps the transcript private, but it also means every status needs a conservative evidence rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recency is a filter, not a state
&lt;/h2&gt;

&lt;p&gt;Claude Code and Codex can leave many JSONL session files behind. Modification time helps select recent candidates, but a recent timestamp does not tell us what happened inside a turn.&lt;/p&gt;

&lt;p&gt;A launcher, a metadata write, or a stale process can touch a file. Treating every recent write as active work would make old sessions look alive. The scanner therefore combines recency with recent events and whether it observed the file producing output.&lt;/p&gt;

&lt;p&gt;Old files are excluded before classification. This matters after an app restart, when the monitor sees an archive of sessions but has no reason to promote them into the current status surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Completion needs provider-specific evidence
&lt;/h2&gt;

&lt;p&gt;The two providers do not record the end of a turn in the same way.&lt;/p&gt;

&lt;p&gt;For Claude Code, an assistant turn with a terminal stop reason is completion evidence. For Codex, the task completion event ends the active turn. A later start event supersedes an older completion marker and returns that session to working.&lt;/p&gt;

&lt;p&gt;This rule avoids a common mistake: mapping file silence directly to completion. Silence can mean the tool is thinking, blocked on an external process, waiting for input, or already finished. The event that ended the turn is stronger evidence than the absence of a new write.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stalled requires observed history
&lt;/h2&gt;

&lt;p&gt;A quiet file should not turn into a warning just because a timeout expired. The monitor first needs to have observed that exact session working. Only then can a long pause without a completion marker become an attention state.&lt;/p&gt;

&lt;p&gt;That extra memory changes the false-positive profile. An untouched historical transcript stays idle. A session that produced output and then stopped without a terminal event can ask for attention.&lt;/p&gt;

&lt;p&gt;The tradeoff is deliberate. A conservative monitor may take longer to warn about an unusual failure, but it avoids marking an entire archive as stalled after launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  One provider can have several live sessions
&lt;/h2&gt;

&lt;p&gt;Developers often run more than one Claude Code or Codex task. The UI cannot treat the newest file as the only source of truth because an older session may need the user while a newer one is still working.&lt;/p&gt;

&lt;p&gt;Agent Island classifies current candidate sessions separately, then chooses the most urgent state for each provider. The top bar shows one Claude signal and one Codex signal, while the underlying session identity remains specific enough to route the user back to the right work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The privacy boundary stays narrow
&lt;/h2&gt;

&lt;p&gt;Local transcript evidence can support working, your-turn, and attention states. It cannot prove that generated code is correct, that a tool call was useful, or that the task achieved its goal.&lt;/p&gt;

&lt;p&gt;The monitor also does not need to upload transcript content to a hosted state service. File recency, provider events, and observed transition history are enough for the limited question it answers.&lt;/p&gt;

&lt;p&gt;The original engineering note describes the released state model and its limits: &lt;a href="https://agent-island.dev/blog/detecting-session-state/?utm_source=devto&amp;amp;utm_medium=content_distribution&amp;amp;utm_campaign=20260731" rel="noopener noreferrer"&gt;Detecting Session State Locally&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The useful invariant is simple: promote a session only when the evidence supports the transition, and keep quiet when it does not.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>opensource</category>
      <category>softwareengineering</category>
      <category>tooling</category>
    </item>
    <item>
      <title>A macOS updater has two jobs: discover and verify</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Fri, 31 Jul 2026 06:40:47 +0000</pubDate>
      <link>https://dev.to/agentis/a-macos-updater-has-two-jobs-discover-and-verify-55gm</link>
      <guid>https://dev.to/agentis/a-macos-updater-has-two-jobs-discover-and-verify-55gm</guid>
      <description>&lt;p&gt;A desktop updater has two separate jobs: find the new release and reject an untrusted package. Treating those as one step makes failures hard to diagnose.&lt;/p&gt;

&lt;p&gt;I help run Agent Island, a local status companion for Claude Code and Codex. The macOS build exposed this distinction clearly while we worked on its update path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery is only a version lookup
&lt;/h2&gt;

&lt;p&gt;The current app checks GitHub Releases shortly after launch and then every six hours when automatic checks are enabled. The response provides a tag and a public release page. A numeric dotted comparison decides whether the tag is newer than the installed version.&lt;/p&gt;

&lt;p&gt;That mechanism can answer one question: does a newer public release exist?&lt;/p&gt;

&lt;p&gt;It cannot prove that a downloaded application is authentic. A network filter can also block the GitHub API while the installed app continues to run normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification belongs to the installer
&lt;/h2&gt;

&lt;p&gt;The macOS build also includes Sparkle. A release appcast declares the version, package URL, and EdDSA signature. Sparkle verifies that signature against a public key embedded in the installed app before it accepts the update.&lt;/p&gt;

&lt;p&gt;The private signing key stays in the maintainer keychain and the release workflow secret. A changed download URL cannot produce a valid package without that key.&lt;/p&gt;

&lt;p&gt;This gives the update path two explicit boundaries:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitHub release discovery decides which version is current.&lt;/li&gt;
&lt;li&gt;Sparkle signature verification decides whether an update package is trusted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A failure in the first boundary should report a version-check problem. A failure in the second should report a signature or installation problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Old installs need an honest migration path
&lt;/h2&gt;

&lt;p&gt;An updater framework can exist while its feed is empty or its discovery path is incomplete. In that state, telling users to wait for a prompt is wrong. They need a manual comparison against the latest public release, followed by a direct download or package-manager upgrade.&lt;/p&gt;

&lt;p&gt;From Agent Island v1.7.1, the app adds the GitHub-backed version nudge. Builds older than that may need one manual update before they enter the current path.&lt;/p&gt;

&lt;h2&gt;
  
  
  First launch is a different trust decision
&lt;/h2&gt;

&lt;p&gt;Agent Island does not currently use a paid Apple Developer account. The macOS package is ad-hoc signed rather than notarized, so the first launch requires Finder's right-click and Open flow.&lt;/p&gt;

&lt;p&gt;That Gatekeeper decision is separate from Sparkle's update signature. The first controls whether macOS permits the downloaded app to run. The second protects later update packages.&lt;/p&gt;

&lt;p&gt;Disabling Gatekeeper globally would collapse a useful system boundary. A per-app first launch keeps the check narrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to record when an update fails
&lt;/h2&gt;

&lt;p&gt;A useful report needs only a few facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;installed version;&lt;/li&gt;
&lt;li&gt;macOS version;&lt;/li&gt;
&lt;li&gt;direct DMG or Homebrew install;&lt;/li&gt;
&lt;li&gt;result of Check now;&lt;/li&gt;
&lt;li&gt;whether discovery failed or installation failed;&lt;/li&gt;
&lt;li&gt;exact visible error text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not need Claude Code transcripts, provider tokens, OAuth data, or private project paths.&lt;/p&gt;

&lt;p&gt;The full implementation note and current release boundary are documented in the original article: &lt;a href="https://agent-island.dev/blog/secure-macos-updates/?utm_source=devto&amp;amp;utm_medium=content_distribution&amp;amp;utm_campaign=20260731" rel="noopener noreferrer"&gt;Verifiable macOS Updates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The source is MIT licensed, so the release and updater code can be inspected directly.&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>softwareengineering</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Filesystem Events Are Wake-Up Signals, Not a Session Ledger</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Wed, 29 Jul 2026 18:53:21 +0000</pubDate>
      <link>https://dev.to/agentis/filesystem-events-are-wake-up-signals-not-a-session-ledger-51f2</link>
      <guid>https://dev.to/agentis/filesystem-events-are-wake-up-signals-not-a-session-ledger-51f2</guid>
      <description>&lt;p&gt;A filesystem callback can arrive twice, arrive late, or never arrive. Treating each callback as an application-state transition makes a session monitor fast but fragile.&lt;/p&gt;

&lt;p&gt;The safer design uses native events as wake-up signals. A relevant path schedules a bounded rescan. The parser reads current transcript evidence and decides the state. Periodic polling repairs any notification the operating system did not deliver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polling alone sets a latency floor
&lt;/h2&gt;

&lt;p&gt;With a six-second polling interval, a correct your-turn state can appear six seconds late even when parsing takes milliseconds. Lowering the interval reduces the delay but increases idle scans across every known transcript root.&lt;/p&gt;

&lt;p&gt;Native events remove that floor for ordinary writes. They tell the monitor that something changed under a watched root, so it can scan immediately.&lt;/p&gt;

&lt;p&gt;The event does not need to describe the state change. It only needs to wake the classifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  macOS watches roots, then filters paths
&lt;/h2&gt;

&lt;p&gt;The macOS implementation uses one FSEvents stream over the existing Claude project, Codex session, and Claude Desktop metadata roots. It requests file-level events with a short latency.&lt;/p&gt;

&lt;p&gt;The callback filters for transcript &lt;code&gt;.jsonl&lt;/code&gt; files and the relevant Claude Desktop records. A matching path calls one change handler.&lt;/p&gt;

&lt;p&gt;Parsing stays outside the callback. FSEvents may coalesce changes, so the handler asks, "What is true now?" rather than trying to replay an assumed sequence from notification flags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows uses the same rule with different plumbing
&lt;/h2&gt;

&lt;p&gt;Windows creates a &lt;code&gt;FileSystemWatcher&lt;/code&gt; for each existing root and watches recursively. Changed, created, and renamed events can all indicate new session evidence.&lt;/p&gt;

&lt;p&gt;One save may produce several callbacks. Atomic replacement may look like a rename. Each relevant callback therefore schedules the same rescan operation instead of applying a different state mutation.&lt;/p&gt;

&lt;p&gt;The two platforms share the wake-up contract, not watcher syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep polling for repair
&lt;/h2&gt;

&lt;p&gt;Native notification channels are optimized for speed, not durability.&lt;/p&gt;

&lt;p&gt;FSEvents can combine nearby changes. &lt;code&gt;FileSystemWatcher&lt;/code&gt; has a finite buffer that can overflow during a burst. A root may appear after startup, and permissions can prevent a watcher from attaching.&lt;/p&gt;

&lt;p&gt;Periodic polling covers those cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;discover roots that were missing at startup;&lt;/li&gt;
&lt;li&gt;rescan bounded transcript tails;&lt;/li&gt;
&lt;li&gt;restore the correct state after a missed or coalesced event.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fallback should stay bounded. Recovery is not a reason to reread every transcript from byte zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coalesce the work, not the truth
&lt;/h2&gt;

&lt;p&gt;A burst of callbacks should not launch a burst of full refreshes. Coalesce nearby wake-ups, serialize the refresh path, and let another pass run when activity arrives during a scan.&lt;/p&gt;

&lt;p&gt;Only the parser decides session state. Watchers and timers merely request another observation. This keeps retries idempotent and prevents callback count from becoming business logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test recovery separately from latency
&lt;/h2&gt;

&lt;p&gt;An event-triggered scan proves the fast path. It does not prove recovery.&lt;/p&gt;

&lt;p&gt;Test both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;append a completion event and verify the native watcher wakes the classifier;&lt;/li&gt;
&lt;li&gt;disable or bypass the watcher, then verify polling reaches the same state;&lt;/li&gt;
&lt;li&gt;create a transcript root after startup and verify a later sweep discovers it;&lt;/li&gt;
&lt;li&gt;send repeated callbacks and verify they do not duplicate a turn alert.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I help run Agent Island. The public v1.7.1 macOS build uses FSEvents, the Windows build uses &lt;code&gt;FileSystemWatcher&lt;/code&gt;, and both retain periodic scanning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agent-island.dev/guides/filesystem-events-session-monitoring/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=20260730_filesystem_events" rel="noopener noreferrer"&gt;Read the complete watcher and polling design&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>performance</category>
      <category>microsoft</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Your Alert Code Should Not Parse Claude and Codex Logs</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Wed, 29 Jul 2026 18:51:33 +0000</pubDate>
      <link>https://dev.to/agentis/your-alert-code-should-not-parse-claude-and-codex-logs-2ia5</link>
      <guid>https://dev.to/agentis/your-alert-code-should-not-parse-claude-and-codex-logs-2ia5</guid>
      <description>&lt;p&gt;A completion alert becomes unreliable when every consumer interprets raw agent logs for itself.&lt;/p&gt;

&lt;p&gt;Claude Code and Codex both append JSONL records, but they do not use the same event envelope. Claude completion can appear in &lt;code&gt;message.stop_reason&lt;/code&gt;. Codex uses event names such as &lt;code&gt;task_complete&lt;/code&gt; and &lt;code&gt;turn/completed&lt;/code&gt;. If the menu bar, notification code, and session list each parse those details, they will eventually disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put provider details behind three fields
&lt;/h2&gt;

&lt;p&gt;The rest of the application only needs a small result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;isDone       did the newest relevant event hand control back?
key          which turn does this result describe?
activityDate when did the semantic event happen?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Swift implementation calls this &lt;code&gt;SessionTurnStatus&lt;/code&gt;. The Windows port uses the same fields in a C# record struct. Code above that boundary can reason about a completed turn without knowing which provider produced the evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read from the newest evidence backward
&lt;/h2&gt;

&lt;p&gt;An older completion record stops being current as soon as a new user message begins another turn.&lt;/p&gt;

&lt;p&gt;The classifier therefore scans a bounded transcript tail in reverse and stops at the first recognized event. A new user event returns a working state. A provider-specific completion event returns done. Unknown records are skipped instead of being treated as idle.&lt;/p&gt;

&lt;p&gt;This ordering rule matters more than the exact JSON property names. A forward scan that remembers the last completion can report a stale handoff after work has already resumed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exclude valid records with the wrong meaning
&lt;/h2&gt;

&lt;p&gt;A JSON record can be well formed and still be the wrong completion signal.&lt;/p&gt;

&lt;p&gt;Claude Code can emit an assistant envelope with &lt;code&gt;stop_sequence&lt;/code&gt; for an API or rate-limit error. The record also carries &lt;code&gt;isApiErrorMessage: true&lt;/code&gt;. Checking the stop reason alone would fire a false your-turn alert.&lt;/p&gt;

&lt;p&gt;Subagent events need a similar guard. An &lt;code&gt;isSidechain&lt;/code&gt; completion belongs to a background chain, not the parent conversation. Letting it complete the foreground session confuses valid evidence with relevant evidence.&lt;/p&gt;

&lt;p&gt;These exclusions live in both platform classifiers and in the fixture set. Porting the rule without the failure examples would make parity temporary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep one turn identity
&lt;/h2&gt;

&lt;p&gt;Filesystem events and polling can classify the same turn more than once. The result needs a stable key so alert code can deduplicate it.&lt;/p&gt;

&lt;p&gt;The classifier prefers identifiers already present in the record, including &lt;code&gt;uuid&lt;/code&gt;, &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;turn_id&lt;/code&gt;, &lt;code&gt;item_id&lt;/code&gt;, and &lt;code&gt;call_id&lt;/code&gt;. It derives a bounded fallback only when the provider gives no usable identifier.&lt;/p&gt;

&lt;p&gt;Notification code should consume that key. Rebuilding identity from a file path or scan timestamp creates a second, incompatible definition of a turn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test traces instead of isolated helpers
&lt;/h2&gt;

&lt;p&gt;The useful fixtures resemble failures from real transcripts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an old completion followed by a new user event;&lt;/li&gt;
&lt;li&gt;a sidechain completion after a parent event;&lt;/li&gt;
&lt;li&gt;an API-error envelope with a completion-like stop reason;&lt;/li&gt;
&lt;li&gt;old and current Codex completion event names.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the same semantic cases against the Swift and C# adapters. When a provider changes its event format, update the shared truth table first, then each parser.&lt;/p&gt;

&lt;p&gt;The boundary is deliberately narrow. &lt;code&gt;isDone&lt;/code&gt; does not prove that the task succeeded or that generated code is correct. It only says that the newest recognized transcript evidence handed control back to the user.&lt;/p&gt;

&lt;p&gt;I help run Agent Island. The state contract and the platform-specific classifiers described here are in the public v1.7.1 macOS and Windows builds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agent-island.dev/guides/cross-platform-coding-agent-state-contract/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=20260730_state_contract" rel="noopener noreferrer"&gt;Read the full state-contract guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>claude</category>
      <category>openai</category>
      <category>testing</category>
    </item>
    <item>
      <title>Claude Desktop and Claude Code Are Different Windows States</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Wed, 29 Jul 2026 01:14:10 +0000</pubDate>
      <link>https://dev.to/agentis/claude-desktop-and-claude-code-are-different-windows-states-228g</link>
      <guid>https://dev.to/agentis/claude-desktop-and-claude-code-are-different-windows-states-228g</guid>
      <description>&lt;p&gt;On Windows, Claude Desktop, Claude Code, and provider usage are related, but they are not one state machine. A status companion needs to keep three boundaries visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three independent signals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Application state&lt;/strong&gt; describes whether Claude Desktop is running, minimized, hidden, closed to background, or unavailable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code session state&lt;/strong&gt; describes whether an exact coding session is working, waiting, needs input, errored, finished, or stale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage state&lt;/strong&gt; describes the provider-reported quota window and whether the local credential used to read it is valid.&lt;/p&gt;

&lt;p&gt;A valid Claude Desktop subscription does not prove that a Claude Code usage credential is available. A closed window does not prove the desktop process stopped. A stale transcript does not prove that the application cannot be restored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restore the right surface
&lt;/h2&gt;

&lt;p&gt;When a user selects an exact row, retain the provider and session identity that produced it. Restore logic should determine which application surface owns that identity and then use the supported Windows activation path. Sending every Claude-related row to one generic launch command loses context.&lt;/p&gt;

&lt;p&gt;Windows applications can remove their visible window while a process or tray component remains active. A monitor should distinguish no visible window from no process and verify the result after requesting activation. Starting another process repeatedly can create duplicates without restoring the intended conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep usage failures scoped to usage
&lt;/h2&gt;

&lt;p&gt;If a usage request cannot authenticate, report that usage is unavailable. Preserve independently observed session state unless its own evidence changed. This prevents a quota credential failure from making a healthy local coding session look broken.&lt;/p&gt;

&lt;p&gt;A useful test sequence is simple: open Claude Desktop and Claude Code separately, verify exact identity, close Desktop to background, restore it, invalidate only the usage credential, and confirm session state remains intact.&lt;/p&gt;

&lt;p&gt;Agent Island is a free, open-source status companion for Claude Code and Codex on Windows 10/11 and macOS. It uses local session records for status and your-turn alerts, has no Agent Island account, and does not upload session data. I help run Agent Island; the full guide is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agent-island.dev/guides/windows-claude-desktop-claude-code-status/?utm_source=devto&amp;amp;utm_medium=owned&amp;amp;utm_campaign=windows_claude_status_20260729" rel="noopener noreferrer"&gt;Claude Desktop vs Claude Code status on Windows&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stop Rescanning Every Claude Code Transcript</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Wed, 29 Jul 2026 01:12:31 +0000</pubDate>
      <link>https://dev.to/agentis/stop-rescanning-every-claude-code-transcript-1j6j</link>
      <guid>https://dev.to/agentis/stop-rescanning-every-claude-code-transcript-1j6j</guid>
      <description>&lt;p&gt;A transcript monitor can poll frequently without becoming expensive. The problem is not the timer by itself; it is treating the entire archive as the hot path on every tick.&lt;/p&gt;

&lt;p&gt;When a developer has months of Claude Code history, reopening every transcript and parsing a tail from every file makes steady-state work proportional to archive size. It also creates correctness risks: a tail can begin in the middle of a JSON line, older completion evidence can outrank a newer handoff, and multiple sessions can be collapsed into one global answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate discovery from ingestion
&lt;/h2&gt;

&lt;p&gt;Use a lightweight discovery pass to retain file identity, size, and modification time. Only a new or changed file should enter the parsing queue. A known transcript should resume from its last complete byte offset rather than being reread from the beginning.&lt;/p&gt;

&lt;p&gt;An append-aware cursor needs five behaviors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;retain the last complete offset per transcript;&lt;/li&gt;
&lt;li&gt;read only the appended range when the file grows;&lt;/li&gt;
&lt;li&gt;carry an incomplete trailing line into the next read;&lt;/li&gt;
&lt;li&gt;detect truncation or replacement and re-bootstrap safely;&lt;/li&gt;
&lt;li&gt;preserve the newest semantic evidence for the exact session.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The cursor is an optimization only if recovery is correct. A smaller file, changed identity, or invalid continuation should trigger a bounded rebuild instead of silently dropping records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep state semantics independent from I/O savings
&lt;/h2&gt;

&lt;p&gt;Reading fewer bytes does not justify guessing. Keep provider and session identity, compare ordered timestamps, and distinguish working, waiting, your-turn, error, finished, and stale evidence. Silence describes freshness; it does not prove successful completion.&lt;/p&gt;

&lt;p&gt;Measure files inspected, bytes read, parse failures, queue depth, and scan duration. Test with a large archive. Healthy steady-state cost should scale with changed files and appended bytes, not total history.&lt;/p&gt;

&lt;p&gt;Agent Island is a free, open-source status companion for Claude Code and Codex on macOS and Windows. It reads local session records to show status and your-turn alerts, uses no Agent Island account, and does not upload session data to Agent Island. I help run Agent Island; the detailed engineering guide is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agent-island.dev/guides/efficient-claude-code-transcript-monitoring/?utm_source=devto&amp;amp;utm_medium=owned&amp;amp;utm_campaign=efficient_transcript_monitoring_20260729" rel="noopener noreferrer"&gt;Monitor large Claude Code transcript archives efficiently&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Review Multiple Coding Agents as a Queue of Evidence</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Tue, 28 Jul 2026 01:21:00 +0000</pubDate>
      <link>https://dev.to/agentis/review-multiple-coding-agents-as-a-queue-of-evidence-1p62</link>
      <guid>https://dev.to/agentis/review-multiple-coding-agents-as-a-queue-of-evidence-1p62</guid>
      <description>&lt;p&gt;Running several coding agents in parallel creates a review problem before it creates a compute problem.&lt;/p&gt;

&lt;p&gt;The bottleneck is rarely opening another terminal. The bottleneck is deciding which session deserves attention, who owns each change, and what evidence is sufficient to accept the result.&lt;/p&gt;

&lt;p&gt;A wall of chat windows does not answer those questions. A team lead needs a queue of owned artifacts and review decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partition work before parallelism
&lt;/h2&gt;

&lt;p&gt;Every task should have one owner, one requested artifact, and one write scope. If two sessions may edit the same file, decide who integrates the final change or serialize the work.&lt;/p&gt;

&lt;p&gt;This is the first control because parallel execution without ownership only moves conflict resolution into the review phase. The sessions may all finish successfully while the combined change remains impossible to accept.&lt;/p&gt;

&lt;p&gt;A useful task card names:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the requested behavior;&lt;/li&gt;
&lt;li&gt;the permitted files or subsystem;&lt;/li&gt;
&lt;li&gt;the validation command;&lt;/li&gt;
&lt;li&gt;the evidence expected at handoff;&lt;/li&gt;
&lt;li&gt;the observable stop condition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The session identifier should travel with the task card, evidence, and final review decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rank states by required human action
&lt;/h2&gt;

&lt;p&gt;Not every active session deserves equal attention. A practical queue sorts states by what the lead must do next:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Approval or input required.&lt;/strong&gt; Work cannot continue without a human decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed verification.&lt;/strong&gt; The artifact exists, but tests, build, or runtime checks failed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ready for review.&lt;/strong&gt; A bounded change and evidence packet are available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running.&lt;/strong&gt; The session is making progress and needs no intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idle or stale.&lt;/strong&gt; No current action is required, but ownership may need cleanup.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This ordering prevents a noisy long-running task from hiding a small task that is waiting for one approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Require a review packet
&lt;/h2&gt;

&lt;p&gt;A session's final message is a claim. The review packet is the evidence behind it.&lt;/p&gt;

&lt;p&gt;For code changes, that packet should include the diff scope, diagnostics, build or test result, and a real usage check when the change has a user-facing surface. For research or operations, it should include source URLs, receipts, read-back state, and any unresolved uncertainty.&lt;/p&gt;

&lt;p&gt;The team lead should be able to answer three questions without reopening the whole transcript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What changed?&lt;/li&gt;
&lt;li&gt;What proves it works?&lt;/li&gt;
&lt;li&gt;What could still be wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the packet cannot answer those questions, the item is not ready for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review risk before chronology
&lt;/h2&gt;

&lt;p&gt;The oldest completed task is not always the next one to review. Sort by blast radius and reversibility.&lt;/p&gt;

&lt;p&gt;Authentication, permissions, migrations, deployment configuration, and shared contracts deserve attention before isolated copy changes. An easily reversible local edit can wait behind an externally visible action even if it finished first.&lt;/p&gt;

&lt;p&gt;This is also why session status should remain separate from artifact status. A session can be complete while its change is still unreviewed, rejected, or blocked from integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate only after acceptance
&lt;/h2&gt;

&lt;p&gt;Do not let “agent finished” become “change shipped.” Keep explicit states for ready, under review, accepted, integrated, and verified after integration.&lt;/p&gt;

&lt;p&gt;That sequence protects the team from two common errors: merging a plausible result without evidence, and losing track of a good result because the session that produced it has already closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the dashboard observational
&lt;/h2&gt;

&lt;p&gt;A lead's status companion should make ownership, urgency, and evidence easier to see. It should not silently approve commands, merge changes, or deploy releases. Consequential actions belong in the system that owns them, where permissions and audit history already exist.&lt;/p&gt;

&lt;p&gt;The useful interface is therefore compact: session identity, owner, current state, affected artifact, latest evidence, and the next human decision. More transcript text usually creates more scanning, not more control.&lt;/p&gt;

&lt;p&gt;Parallel coding agents become manageable when the unit of coordination is not the chat session but the reviewable artifact. The lead is operating a queue of decisions, with sessions supplying evidence into that queue.&lt;/p&gt;

&lt;p&gt;A complete implementation checklist is available in &lt;a href="https://agent-island.dev/guides/team-lead-multi-agent-review-workflow/?utm_source=devto&amp;amp;utm_medium=owned&amp;amp;utm_campaign=multi_agent_review_20260728" rel="noopener noreferrer"&gt;the team lead multi-agent review workflow&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Local-First Is a Data Boundary, Not a Safety Guarantee</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Tue, 28 Jul 2026 01:19:02 +0000</pubDate>
      <link>https://dev.to/agentis/local-first-is-a-data-boundary-not-a-safety-guarantee-n82</link>
      <guid>https://dev.to/agentis/local-first-is-a-data-boundary-not-a-safety-guarantee-n82</guid>
      <description>&lt;p&gt;A local AI coding tool can reduce data exposure, but the word &lt;em&gt;local&lt;/em&gt; does not answer the questions a security review actually cares about.&lt;/p&gt;

&lt;p&gt;The useful questions are narrower:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which files can the agent read?&lt;/li&gt;
&lt;li&gt;Which commands can it run?&lt;/li&gt;
&lt;li&gt;Which network destinations can it reach?&lt;/li&gt;
&lt;li&gt;Which credentials can it use?&lt;/li&gt;
&lt;li&gt;What evidence reaches a reviewer before a change ships?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A process can run on a developer laptop and still have broad authority. It may scan an entire home directory, inherit shell credentials, call external services, or modify files outside the intended repository. Local execution is therefore a deployment property. It is not a complete safety model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with four explicit boundaries
&lt;/h2&gt;

&lt;p&gt;Before opening an agent session, write down four things: the readable files, writable files, permitted commands, and allowed external systems.&lt;/p&gt;

&lt;p&gt;This sounds basic, but it changes the review from a vague question about whether a tool is trustworthy into a concrete question about what a particular session may do. A repository checkout plus unrestricted shell access is not a meaningful boundary. It is only local execution with wide authority.&lt;/p&gt;

&lt;p&gt;Secrets deserve their own rule. Keep them out of prompts and transcripts. When a task genuinely requires a credential, use an existing scoped store or environment variable and separate read authority from write authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep observation local and bounded
&lt;/h2&gt;

&lt;p&gt;Monitoring several coding agents does not require copying every transcript into a central service. A local companion can read the same session metadata already present on the machine and derive only the state needed for coordination: which session is active, waiting, blocked, or complete.&lt;/p&gt;

&lt;p&gt;That observation layer still needs limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read only known provider directories;&lt;/li&gt;
&lt;li&gt;cap file and record sizes;&lt;/li&gt;
&lt;li&gt;tolerate partial writes;&lt;/li&gt;
&lt;li&gt;avoid rendering secret-bearing transcript content;&lt;/li&gt;
&lt;li&gt;retain compact derived state instead of duplicating raw logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces both the data surface and the number of places that must be trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate observation from execution
&lt;/h2&gt;

&lt;p&gt;A status surface should not quietly become a remote-control surface. Seeing that a session needs attention does not mean the monitor should be able to type into that terminal, approve a command, merge a pull request, or deploy a release.&lt;/p&gt;

&lt;p&gt;This separation matters because the monitoring process is long-lived. Giving it command authority turns a convenient dashboard into a high-value control plane. A safer design keeps observation read-only and moves every consequential action back to an explicit, reviewable workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat evidence as part of the boundary
&lt;/h2&gt;

&lt;p&gt;Local-first design does not remove the need for review. It changes what the reviewer should receive.&lt;/p&gt;

&lt;p&gt;A useful handoff includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the requested outcome;&lt;/li&gt;
&lt;li&gt;the files that changed;&lt;/li&gt;
&lt;li&gt;the commands that ran;&lt;/li&gt;
&lt;li&gt;the tests and checks that passed;&lt;/li&gt;
&lt;li&gt;unresolved risks or skipped checks;&lt;/li&gt;
&lt;li&gt;the exact decision still required from a human.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A completion message alone is not evidence. The reviewer needs enough information to reproduce the decision without reading an entire chat transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record incidents without centralizing everything
&lt;/h2&gt;

&lt;p&gt;When something fails, preserve a compact incident record: session identity, time window, affected artifact, command category, observed failure, and recovery action. That is usually enough to diagnose recurring workflow problems without exporting full prompts or source code.&lt;/p&gt;

&lt;p&gt;The goal is not zero telemetry. The goal is telemetry whose scope matches the operational question.&lt;/p&gt;

&lt;p&gt;Local-first security is strongest when three boundaries line up: data stays where it should, authority remains narrow, and review evidence is sufficient. Missing any one of them leaves the workflow dependent on trust instead of controls.&lt;/p&gt;

&lt;p&gt;The complete checklist is in &lt;a href="https://agent-island.dev/guides/local-first-ai-coding-security-workflow/?utm_source=devto&amp;amp;utm_medium=owned&amp;amp;utm_campaign=local_first_security_20260728" rel="noopener noreferrer"&gt;the local-first AI coding security workflow&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your Turn Is a Session Handoff, Not a Completion Claim</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Mon, 27 Jul 2026 01:38:46 +0000</pubDate>
      <link>https://dev.to/agentis/your-turn-is-a-session-handoff-not-a-completion-claim-1ech</link>
      <guid>https://dev.to/agentis/your-turn-is-a-session-handoff-not-a-completion-claim-1ech</guid>
      <description>&lt;p&gt;When a coding agent stops producing output, the next step is not automatically yours. It may be waiting on a tool, calculating, stalled, or actually finished. A useful &lt;strong&gt;your-turn&lt;/strong&gt; state needs stronger evidence than silence.&lt;/p&gt;

&lt;p&gt;The definition I use is narrow: your-turn means a specific Claude Code or Codex session has produced evidence that the next useful action belongs to the developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process state and action ownership are separate
&lt;/h2&gt;

&lt;p&gt;“Stopped” describes activity. “Your turn” describes ownership of the next step.&lt;/p&gt;

&lt;p&gt;A semantic session event can support that handoff: an assistant message that asks a question, a structured approval prompt, or a completion event that explicitly returns control. File modification time, low CPU, and an unchanged process list are freshness clues, not proof of a handoff.&lt;/p&gt;

&lt;p&gt;This distinction prevents two common errors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;calling a slow tool invocation finished;&lt;/li&gt;
&lt;li&gt;calling an inactive but stalled process ready for the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When evidence is stale or ambiguous, the honest state is uncertainty.&lt;/p&gt;

&lt;h2&gt;
  
  
  The event must keep its session identity
&lt;/h2&gt;

&lt;p&gt;Multi-session workflows make generic alerts almost useless. If three Codex sessions are open, “Codex needs you” still leaves the developer searching.&lt;/p&gt;

&lt;p&gt;The handoff record should preserve the provider, project or thread identity, semantic event, and event time. Aggregation can rank a real your-turn state above passive working or stale state, but it must not erase the origin of the event.&lt;/p&gt;

&lt;p&gt;If two sessions need attention, the UI should show both or apply a deterministic priority rule. A single generic badge is not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  An alert does not prove quality
&lt;/h2&gt;

&lt;p&gt;Your-turn does &lt;strong&gt;not&lt;/strong&gt; mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the implementation is correct;&lt;/li&gt;
&lt;li&gt;tests passed;&lt;/li&gt;
&lt;li&gt;the full task is complete;&lt;/li&gt;
&lt;li&gt;the companion may approve or resume work automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are separate verification and authorization questions. A status label should not smuggle them into a convenient notification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suppression and replay protection
&lt;/h2&gt;

&lt;p&gt;Notification policy is part of the state model. When the exact target session is already frontmost, an extra sound may add no value. The visual state can remain while the sound is suppressed. If the developer switches away, the pending handoff must remain eligible for an alert.&lt;/p&gt;

&lt;p&gt;The monitor must also deduplicate events. Re-reading the same local record after an app restart should not produce a second alert. Stable event identity, or a documented replay key, keeps one handoff equal to one notification.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical test
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start two sessions in different projects.&lt;/li&gt;
&lt;li&gt;Leave one working and make the other ask a real question.&lt;/li&gt;
&lt;li&gt;Confirm only the requesting session becomes your-turn.&lt;/li&gt;
&lt;li&gt;Bring that session frontmost and inspect the alert policy.&lt;/li&gt;
&lt;li&gt;Restart the monitor and verify the same event does not fire twice.&lt;/li&gt;
&lt;li&gt;Answer the prompt and confirm new work clears the handoff state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agent Island v1.7.1 applies this model to Claude Code and Codex status on macOS and Windows. It reports the handoff; it does not silently operate the coding agent.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://agent-island.dev/your-turn-state/?utm_source=devto&amp;amp;utm_medium=owned_social&amp;amp;utm_campaign=your_turn_state_20260727" rel="noopener noreferrer"&gt;canonical your-turn guide&lt;/a&gt; contains the full boundary and verification sequence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>An AI Coding Status Companion Should Observe, Not Operate</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Mon, 27 Jul 2026 01:37:42 +0000</pubDate>
      <link>https://dev.to/agentis/an-ai-coding-status-companion-should-observe-not-operate-3407</link>
      <guid>https://dev.to/agentis/an-ai-coding-status-companion-should-observe-not-operate-3407</guid>
      <description>&lt;p&gt;A coding agent can run for minutes without needing anything from you. The practical problem is not how to make it execute more work. It is how to leave the terminal, keep the right context, and return when the next action actually belongs to you.&lt;/p&gt;

&lt;p&gt;That is the job of an &lt;strong&gt;AI coding status companion&lt;/strong&gt;: a persistent desktop surface that observes session evidence and reports state without silently operating the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visibility and execution are different products
&lt;/h2&gt;

&lt;p&gt;A runner decides what command or prompt comes next. A retry loop decides when to try again. A status companion has a narrower contract: show whether Claude Code or Codex is working, waiting, finished, or asking for attention.&lt;/p&gt;

&lt;p&gt;That boundary matters. If a monitor also approves prompts or resumes tasks, its risk model changes. A visibility tool can stay useful without receiving authority over the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  A state label needs evidence
&lt;/h2&gt;

&lt;p&gt;A quiet terminal is ambiguous. The process may be calculating, blocked on a tool, stalled, or finished. File modification time and process activity help with freshness, but neither proves that the user owns the next step.&lt;/p&gt;

&lt;p&gt;A stronger state model uses semantic events from the session record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a recent tool event can support &lt;strong&gt;working&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;an assistant message that requests input can support &lt;strong&gt;your turn&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;a completion event can support &lt;strong&gt;finished&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;stale evidence should remain uncertain rather than being promoted to a confident label.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The monitor also has to preserve session identity. “Codex needs you” is not enough when three Codex tasks are open. The alert must remain attached to the project or thread that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notification policy is part of correctness
&lt;/h2&gt;

&lt;p&gt;A your-turn alert is a handoff signal, not a claim that the implementation is correct. It does not prove tests passed or the task is complete.&lt;/p&gt;

&lt;p&gt;It should also avoid duplicate noise. If the exact session is already frontmost, keeping the visual state while suppressing an extra sound can be reasonable. If the developer switches away, the pending handoff must remain visible. Re-reading the same event after an app restart must not fire a second alert.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-first needs an inspectable boundary
&lt;/h2&gt;

&lt;p&gt;A desktop monitor may parse local session records. “Local-first” should mean the product names those records, limits what it reads, and does not upload session data by default. Sharing a report is a separate, explicit action.&lt;/p&gt;

&lt;p&gt;Agent Island follows that boundary: no product account, no product telemetry, and no session-data upload to Agent Island.&lt;/p&gt;

&lt;h2&gt;
  
  
  A six-step evaluation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run two sessions and check that the UI preserves both identities.&lt;/li&gt;
&lt;li&gt;Make one session ask a real question.&lt;/li&gt;
&lt;li&gt;Verify that only that session enters your-turn.&lt;/li&gt;
&lt;li&gt;Leave a tool running and confirm silence is not called finished.&lt;/li&gt;
&lt;li&gt;Restart the companion and check that the same handoff is not announced twice.&lt;/li&gt;
&lt;li&gt;Disconnect the network and confirm local status observation still works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agent Island v1.7.1 is a free, open-source status companion for Claude Code and Codex on macOS and Windows. It provides visible state and your-turn alerts; it does not silently approve, resume, or operate either agent.&lt;/p&gt;

&lt;p&gt;The full definition and verification checklist are available in the &lt;a href="https://agent-island.dev/ai-coding-status-companion/?utm_source=devto&amp;amp;utm_medium=owned_social&amp;amp;utm_campaign=status_companion_20260727" rel="noopener noreferrer"&gt;canonical guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Weekly AI Coding Report Is an Activity Ledger, Not a Productivity Score</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Sat, 25 Jul 2026 23:11:23 +0000</pubDate>
      <link>https://dev.to/agentis/a-weekly-ai-coding-report-is-an-activity-ledger-not-a-productivity-score-43eo</link>
      <guid>https://dev.to/agentis/a-weekly-ai-coding-report-is-an-activity-ledger-not-a-productivity-score-43eo</guid>
      <description>&lt;p&gt;A week of Claude Code and Codex work leaves enough local evidence to answer concrete questions.&lt;/p&gt;

&lt;p&gt;When were sessions active? Which provider produced the activity? Which models appeared? How did the token mix change by day?&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; prove that the code was correct, the week was productive, or an API-value estimate was money spent.&lt;/p&gt;

&lt;p&gt;That boundary is what makes a weekly report useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use local calendar days
&lt;/h2&gt;

&lt;p&gt;A readable report should cover today plus the previous six local calendar days. The headline, daily bars, provider totals, and model rows must use the same boundary.&lt;/p&gt;

&lt;p&gt;If the chart uses calendar days but model rows use a rolling 168-hour window, the parts can disagree. A row may exceed the headline even though every individual calculation looks plausible.&lt;/p&gt;

&lt;p&gt;Timezone and midnight behavior are accounting rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token totals describe activity
&lt;/h2&gt;

&lt;p&gt;Input, output, cache creation, and cache reads describe different work. I find it useful to keep two totals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;wire-token total&lt;/strong&gt; that includes every category recorded locally;&lt;/li&gt;
&lt;li&gt;an &lt;strong&gt;input/output total&lt;/strong&gt; that excludes cache traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither is a productivity score.&lt;/p&gt;

&lt;p&gt;A cache-heavy refactor can move more tokens than a small, high-impact fix. A failed run can be expensive. A quiet session can be waiting for a person instead of doing nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare providers without inventing equivalence
&lt;/h2&gt;

&lt;p&gt;A provider split can show how much recorded activity came from Claude Code and how much came from Codex. It cannot show that one token from each provider represents equal work, latency, quality, or quota pressure.&lt;/p&gt;

&lt;p&gt;Provider quota is reported state. Local token activity is a reconstructed ledger. Displaying both is fine. Using one to fill missing data in the other is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep model context with each event
&lt;/h2&gt;

&lt;p&gt;A session can switch models. A later token event needs the model context active at that time, not whichever model appears at the top of the file.&lt;/p&gt;

&lt;p&gt;Unknown named models should stay visible and unpriced. Guessing a nearby model family makes historical reports impossible to audit.&lt;/p&gt;

&lt;p&gt;Token rank and API-value rank are also different. A model with many inexpensive cache reads can lead by volume while another leads by estimated value.&lt;/p&gt;

&lt;h2&gt;
  
  
  My five-minute weekly review
&lt;/h2&gt;

&lt;p&gt;I use the report as a prompt for one operational decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check that all seven local days are present.&lt;/li&gt;
&lt;li&gt;Look for gaps, replay spikes, or stale provider data.&lt;/li&gt;
&lt;li&gt;Compare provider and model mix without treating either as quality.&lt;/li&gt;
&lt;li&gt;Read estimated API value only under its displayed rate date.&lt;/li&gt;
&lt;li&gt;Write one workflow change for next week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That change might be reducing unattended runs, fixing a recurring authentication failure, or changing when I start a long session.&lt;/p&gt;

&lt;p&gt;The number alone does not improve the workflow. The decision does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing must be a separate action
&lt;/h2&gt;

&lt;p&gt;A local report should stay local by default. Agent Island builds its report from records already stored on the machine; transcript content is not uploaded to an Agent Island service.&lt;/p&gt;

&lt;p&gt;A shareable card is a rendered summary, not an automatic broadcast. Copying or exporting it requires an explicit action. Before sharing, review visible dates, totals, model names, and project context for anything you do not want to disclose.&lt;/p&gt;

&lt;p&gt;A weekly report earns trust by saying what each number means and what it cannot prove.&lt;/p&gt;

&lt;p&gt;The complete workflow and current verified scope are in the canonical guide: &lt;a href="https://agent-island.dev/ai-coding-weekly-report/?utm_source=devto&amp;amp;utm_medium=owned_social&amp;amp;utm_campaign=ai_coding_weekly_report_20260726" rel="noopener noreferrer"&gt;AI coding weekly report&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>analytics</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>An AI Coding Cost Tracker Needs a Measurement Contract</title>
      <dc:creator>Agent Island</dc:creator>
      <pubDate>Sat, 25 Jul 2026 23:08:57 +0000</pubDate>
      <link>https://dev.to/agentis/an-ai-coding-cost-tracker-needs-a-measurement-contract-15pj</link>
      <guid>https://dev.to/agentis/an-ai-coding-cost-tracker-needs-a-measurement-contract-15pj</guid>
      <description>&lt;p&gt;The most dangerous number in an AI coding dashboard is the one labeled &lt;strong&gt;cost&lt;/strong&gt; without a definition.&lt;/p&gt;

&lt;p&gt;A local tool can reconstruct token activity from Claude Code and Codex session records. It can apply a dated model-price table. That produces an estimate with a clear use: comparing periods and understanding the shape of local activity.&lt;/p&gt;

&lt;p&gt;It does not produce an invoice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start at the file-format boundary
&lt;/h2&gt;

&lt;p&gt;Claude Code and Codex do not write identical usage records. Claude can expose input, output, cache creation, and cache-read fields on assistant messages. Codex can separate model context from later token events, and cached input may be included inside total input.&lt;/p&gt;

&lt;p&gt;Normalize those formats before calculating anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider
timestamp
model
input tokens
output tokens
cache creation tokens
cache read tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that boundary exists, the rest of the report does not need to guess what a raw provider field means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cached input is not ordinary input twice
&lt;/h2&gt;

&lt;p&gt;For a Codex event, a safe calculation starts by separating cached input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;non-cached input = max(total input - cached input, 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then price non-cached input, output, cache creation, and cache reads with their own rates. Pricing total input and adding cache reads again creates a precise-looking overcount.&lt;/p&gt;

&lt;p&gt;This is why a generic &lt;code&gt;tokens * price&lt;/code&gt; function is not enough for a multi-provider tracker.&lt;/p&gt;

&lt;h2&gt;
  
  
  A rescan must not create new usage
&lt;/h2&gt;

&lt;p&gt;Session files are read repeatedly. Apps restart. Watchers reconnect. Archived files can reappear. If the same event is counted every time it is observed, the weekly report grows while the underlying work stays unchanged.&lt;/p&gt;

&lt;p&gt;Replay protection is part of accounting. Use stable provider event identifiers when they exist. If a format lacks one, document the fallback and its uncertainty instead of hiding it behind a polished total.&lt;/p&gt;

&lt;h2&gt;
  
  
  Date the price table
&lt;/h2&gt;

&lt;p&gt;New model identifiers can appear before a desktop app knows their rates. API prices can also change.&lt;/p&gt;

&lt;p&gt;A tracker should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ship a dated rate snapshot;&lt;/li&gt;
&lt;li&gt;keep unknown named models visible;&lt;/li&gt;
&lt;li&gt;leave them unpriced rather than guessing a nearby rate;&lt;/li&gt;
&lt;li&gt;preserve the rate date with historical reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Agent Island, the calculated number is labeled &lt;strong&gt;API value&lt;/strong&gt;. It is a counterfactual estimate under the embedded rates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep four answers separate
&lt;/h2&gt;

&lt;p&gt;A useful dashboard should not collapse these into one metric:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Provider quota&lt;/strong&gt;: how close the account is to a reset boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local token volume&lt;/strong&gt;: what the session records contain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estimated API value&lt;/strong&gt;: a dated calculation over those token categories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actual billing&lt;/strong&gt;: receipts, credits, subscriptions, and provider-side adjustments.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only the fourth is a bill. The local records do not contain enough context to recreate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The evaluation checklist
&lt;/h2&gt;

&lt;p&gt;Before trusting an AI coding cost tracker, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which exact local records does it read?&lt;/li&gt;
&lt;li&gt;Does it separate input, output, cache creation, and cache reads?&lt;/li&gt;
&lt;li&gt;How does it prevent replayed events from being counted twice?&lt;/li&gt;
&lt;li&gt;What happens when a model is missing from the rate table?&lt;/li&gt;
&lt;li&gt;Is the price snapshot dated?&lt;/li&gt;
&lt;li&gt;Does the UI say estimate, or does it imply actual spend?&lt;/li&gt;
&lt;li&gt;Is collection local, and is sharing a separate action?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation can be sophisticated, but the contract should be easy to explain. If the number can be mistaken for money paid, the explanation belongs next to the number.&lt;/p&gt;

&lt;p&gt;The full measurement contract and current Agent Island scope are in the canonical guide: &lt;a href="https://agent-island.dev/ai-coding-cost-tracker/?utm_source=devto&amp;amp;utm_medium=owned_social&amp;amp;utm_campaign=ai_coding_cost_tracker_20260726" rel="noopener noreferrer"&gt;AI coding cost tracker&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
