<?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: Dongsheng</title>
    <description>The latest articles on DEV Community by Dongsheng (@blackman99).</description>
    <link>https://dev.to/blackman99</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%2F4118978%2Fe84dadce-5b5c-49ea-9e29-c145a3d2e052.jpg</url>
      <title>DEV Community: Dongsheng</title>
      <link>https://dev.to/blackman99</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blackman99"/>
    <language>en</language>
    <item>
      <title>agent-usage NEW8: agents can torch a 5-hour window with no estimate</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Sun, 20 Sep 2026 03:46:26 +0000</pubDate>
      <link>https://dev.to/blackman99/agent-usage-new8-agents-can-torch-a-5-hour-window-with-no-estimate-2l9c</link>
      <guid>https://dev.to/blackman99/agent-usage-new8-agents-can-torch-a-5-hour-window-with-no-estimate-2l9c</guid>
      <description>&lt;p&gt;Agents that spawn agents can torch a 5-hour window with no estimate and no confirm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Blackman99/agent-usage-all-in-one" rel="noopener noreferrer"&gt;agent-usage&lt;/a&gt; keeps a &lt;strong&gt;local honest dashboard&lt;/strong&gt; — by agent, billing domain, and model.&lt;/p&gt;

&lt;p&gt;Menubar remains &lt;strong&gt;roadmap&lt;/strong&gt; (not shipped).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; agent-usage-all-in-one
agent-usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/Blackman99/agent-usage-all-in-one" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-usage-all-in-one&lt;/a&gt; · MIT · macOS + Node 24+&lt;/p&gt;

&lt;p&gt;Local charts. No auto-switch. Advice only.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>macos</category>
      <category>devtools</category>
    </item>
    <item>
      <title>agent-usage 0.10.0: charts by agent, billing domain, and model</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Fri, 18 Sep 2026 01:15:17 +0000</pubDate>
      <link>https://dev.to/blackman99/agent-usage-0100-charts-by-agent-billing-domain-and-model-3o7a</link>
      <guid>https://dev.to/blackman99/agent-usage-0100-charts-by-agent-billing-domain-and-model-3o7a</guid>
      <description>&lt;p&gt;&lt;strong&gt;agent-usage 0.10.0&lt;/strong&gt; is live on npm — a local multi-agent usage dashboard with charts split by &lt;strong&gt;agent / billing domain / model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Honest local dashboard (vs glance-style menubar tools): see where quota and spend actually go across Codex, Claude Code, OpenCode, Grok, and more. Cursor connector is still experimental. &lt;strong&gt;Menubar remains roadmap&lt;/strong&gt; (not shipped).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; agent-usage-all-in-one
agent-usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/Blackman99/agent-usage-all-in-one" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-usage-all-in-one&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;code&gt;agent-usage-all-in-one&lt;/code&gt; · MIT · macOS + Node 24+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local charts. No auto-switch. Advice only.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>macos</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Real Bot: persistent AI teammates on your Mac (local multi-bot · MIT · BYO)</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 17 Sep 2026 03:53:56 +0000</pubDate>
      <link>https://dev.to/blackman99/real-bot-persistent-ai-teammates-on-your-mac-local-multi-bot-mit-byo-2p87</link>
      <guid>https://dev.to/blackman99/real-bot-persistent-ai-teammates-on-your-mac-local-multi-bot-mit-byo-2p87</guid>
      <description>&lt;p&gt;&lt;strong&gt;Not affiliated with xAI or Grok.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/Blackman99/real-bot" rel="noopener noreferrer"&gt;Real Bot&lt;/a&gt; for &lt;strong&gt;local multi-bot teammates on your Mac&lt;/strong&gt; — named bots with duties, groups, &lt;code&gt;@&lt;/code&gt;mentions and handoffs — that stay on your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local multi-bot&lt;/strong&gt; — one-to-one, groups, hand work between bots; window, daemon, sessions and one shared workspace folder on your Mac&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT + BYO&lt;/strong&gt; — open source (MIT); bring any OpenAI-compatible endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval cards&lt;/strong&gt; — risky actions wait for you; keys go to Keychain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP everywhere&lt;/strong&gt; — stdio or Streamable HTTP, available to every bot&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;Alpha, macOS only. Unsigned &lt;code&gt;.dmg&lt;/code&gt; from &lt;a href="https://github.com/Blackman99/real-bot/releases/latest" rel="noopener noreferrer"&gt;Releases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://blackman99.github.io/real-bot/" rel="noopener noreferrer"&gt;https://blackman99.github.io/real-bot/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT licensed. Again: &lt;strong&gt;not affiliated with xAI / Grok&lt;/strong&gt; — independent open project.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>macos</category>
      <category>productivity</category>
    </item>
    <item>
      <title>codsh 0.23.0 — Mission Contract: `/ship` that won't silently drift</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 17 Sep 2026 01:23:56 +0000</pubDate>
      <link>https://dev.to/blackman99/codsh-0230-mission-contract-ship-that-wont-silently-drift-1ca6</link>
      <guid>https://dev.to/blackman99/codsh-0230-mission-contract-ship-that-wont-silently-drift-1ca6</guid>
      <description>&lt;p&gt;&lt;strong&gt;codsh&lt;/strong&gt; is a DeepSeek-native terminal coding agent on open &lt;a href="https://github.com/deepseek-ai/deepseek-harness" rel="noopener noreferrer"&gt;dsh&lt;/a&gt;. It is &lt;strong&gt;not&lt;/strong&gt; a Claude Code env wrapper.&lt;/p&gt;

&lt;p&gt;The hook stays the same: &lt;strong&gt;&lt;code&gt;/ship&lt;/code&gt; takes one sentence to verified code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0.23.0&lt;/strong&gt; ships the &lt;strong&gt;Mission Contract&lt;/strong&gt; control plane for that loop — so acceptance criteria stay sealed, drift blocks the run instead of rewriting the goal, and delivery needs recorded evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in 0.23.0
&lt;/h2&gt;

&lt;p&gt;When Gate 1 confirms the spec, &lt;code&gt;/ship&lt;/code&gt; compiles a machine-checkable &lt;strong&gt;Mission Contract&lt;/strong&gt; (&lt;code&gt;mission.contract.json&lt;/code&gt;) from the sealed Main Track, Out of Scope, and acceptance criteria.&lt;/p&gt;

&lt;p&gt;After seal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Immutable&lt;/strong&gt; — Main Track, Out of Scope, grill decisions, original wording, acceptance criteria, and the contract JSON. Protected writes are refused; external drift stops the run and stays on disk for inspection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alignment Gate&lt;/strong&gt; — refuses writes that lack requirement mapping or hit immutable memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drift Detector&lt;/strong&gt; — scores plan/action drift against the seal; a rewritten Main Track is a &lt;strong&gt;blocker&lt;/strong&gt;, not an accepted rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verifier&lt;/strong&gt; — matches acceptance criteria to &lt;strong&gt;recorded evidence&lt;/strong&gt;. Delivery does not complete without it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also in this release: &lt;strong&gt;wayfinder&lt;/strong&gt; before the grill interview (destination + open decisions, separate from implementation), and tighter parent/subagent coordination — one parent-owned ticket per turn, fresh-context children for investigation / landing / review, parent keeps questions, gates, and final proofs.&lt;/p&gt;

&lt;p&gt;npm: &lt;code&gt;codsh-cli&lt;/code&gt; + &lt;code&gt;codsh-bundle&lt;/code&gt; &lt;strong&gt;0.23.0&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters vs “just chat a plan”
&lt;/h2&gt;

&lt;p&gt;Ad-hoc agent plans live in conversation memory. They drift. Acceptance becomes vibes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/ship&lt;/code&gt; keeps the human projection in Markdown and the runner-owned contract on disk:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pre-flight → wayfinder → grill
&lt;/li&gt;
&lt;li&gt;Spec (Gate 1) → Tickets (Gate 2)
&lt;/li&gt;
&lt;li&gt;Landing (TDD) → evidence-based Done
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While work is in flight you get a &lt;strong&gt;panorama&lt;/strong&gt;: TTY overlay (&lt;code&gt;Ctrl+G&lt;/code&gt;), a ticket-count teaser with the local Web flowchart URL, and the flowchart itself — &lt;code&gt;/ship&lt;/code&gt; does not auto-open a browser.&lt;/p&gt;

&lt;p&gt;Coming from Claude Code / Codex? Different harness, different product. Redirecting Claude Code at DeepSeek with env vars works; this is the native path on dsh. Map what maps / what’s missing on &lt;a href="https://github.com/Blackman99/codsh/issues/64" rel="noopener noreferrer"&gt;issue #64&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What &lt;code&gt;/ship&lt;/code&gt; builds (gallery)
&lt;/h2&gt;

&lt;p&gt;Every gallery project started from a &lt;strong&gt;one-sentence&lt;/strong&gt; request. Real screenshots and playable results: &lt;a href="https://blackman99.github.io/codsh/gallery.html" rel="noopener noreferrer"&gt;blackman99.github.io/codsh/gallery.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F72mq5vbhqo7cbhubcthw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F72mq5vbhqo7cbhubcthw.webp" alt="Medal of Honor — WWII browser game from one  raw `/ship` endraw  sentence" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqz48gwc8iwvbtifwhck.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqz48gwc8iwvbtifwhck.webp" alt="International mall —  raw `/ship` endraw  gallery still" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Publishing: upload local PNGs from &lt;code&gt;/workspace/codsh-assets/gallery-0.23.0/&lt;/code&gt; as cover + inline if Dev.to prefers hosted uploads.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install (60 seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @deepseek-ai/dsh codsh-cli
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;…   &lt;span class="c"&gt;# or any OpenAI-compatible route via ~/.dsh/settings.yaml&lt;/span&gt;
codsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node &lt;code&gt;≥22.19&lt;/code&gt;. Already on a matching dsh? &lt;code&gt;npm i -g codsh-cli&lt;/code&gt; is enough.&lt;/p&gt;

&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ship let long diffs open in a pager instead of scrolling past
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For tiny edits, plain chat or &lt;code&gt;⇧Tab&lt;/code&gt; plan mode is enough — &lt;code&gt;/ship&lt;/code&gt; is multi-phase and burns tokens on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/Blackman99/codsh" rel="noopener noreferrer"&gt;https://github.com/Blackman99/codsh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Site (real terminal captures): &lt;a href="https://blackman99.github.io/codsh/" rel="noopener noreferrer"&gt;https://blackman99.github.io/codsh/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Gallery: &lt;a href="https://blackman99.github.io/codsh/gallery.html" rel="noopener noreferrer"&gt;https://blackman99.github.io/codsh/gallery.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/codsh-cli" rel="noopener noreferrer"&gt;&lt;code&gt;codsh-cli&lt;/code&gt;&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/codsh-bundle" rel="noopener noreferrer"&gt;&lt;code&gt;codsh-bundle&lt;/code&gt;&lt;/a&gt; (MIT)
&lt;/li&gt;
&lt;li&gt;Claude Code / Codex migrants: &lt;a href="https://github.com/Blackman99/codsh/issues/64" rel="noopener noreferrer"&gt;https://github.com/Blackman99/codsh/issues/64&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Early project. Sharp edges welcome — especially Windows (#62) and third-party endpoints (#63).&lt;/p&gt;

</description>
      <category>deepseek</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Agent Usage: One local dashboard for Codex, Claude Code, OpenCode, Grok &amp; more</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:19:54 +0000</pubDate>
      <link>https://dev.to/blackman99/agent-usage-one-local-dashboard-for-codex-claude-code-opencode-grok-more-1fmk</link>
      <guid>https://dev.to/blackman99/agent-usage-one-local-dashboard-for-codex-claude-code-opencode-grok-more-1fmk</guid>
      <description>&lt;p&gt;Many of us now keep more than one coding agent: Codex for one workflow, Claude Code for another, maybe Grok, OpenCode, dsh, or Antigravity on the side. Usage lives in different UIs — five-hour windows next to weekly caps next to “All models” labels — and cost language mixes subscriptions, client estimates, and API list prices until nothing is comparable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Usage&lt;/strong&gt; is a &lt;strong&gt;macOS-first, fully local&lt;/strong&gt; multi-agent usage center. One command opens a dashboard for native quota windows and reset times, tokens and model rankings, history/diagnostics, and a public &lt;strong&gt;API retail equivalent&lt;/strong&gt; for eligible usage. It offers &lt;strong&gt;advice only&lt;/strong&gt; and &lt;strong&gt;never switches agents automatically&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/Blackman99/agent-usage-all-in-one" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-usage-all-in-one&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Compare docs: &lt;a href="https://github.com/Blackman99/agent-usage-all-in-one/blob/main/docs/comparison.md" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-usage-all-in-one/blob/main/docs/comparison.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;code&gt;agent-usage-all-in-one&lt;/code&gt; · CLI: &lt;code&gt;agent-usage&lt;/code&gt; · MIT&lt;/li&gt;
&lt;li&gt;Requires &lt;strong&gt;macOS&lt;/strong&gt; + &lt;strong&gt;Node.js 24+&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Cursor coverage yet&lt;/strong&gt; · don’t read the package name as “every agent on earth”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx agent-usage-all-in-one
agent-usage The API retail equivalent is &lt;span class="k"&gt;**&lt;/span&gt;not a bill&lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Unknown prices stay &lt;span class="k"&gt;**&lt;/span&gt;unpriced&lt;span class="k"&gt;**&lt;/span&gt; — never guessed as &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="k"&gt;**&lt;/span&gt;Grok Build/SuperGrok&lt;span class="k"&gt;**&lt;/span&gt; and &lt;span class="k"&gt;**&lt;/span&gt;xAI API&lt;span class="k"&gt;**&lt;/span&gt; are independent billing domains and are &lt;span class="k"&gt;**&lt;/span&gt;never summed&lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;### Light comparison&lt;/span&gt;

Peers worth naming honestly &lt;span class="o"&gt;(&lt;/span&gt;see docs/named-competitors.md&lt;span class="o"&gt;)&lt;/span&gt;:

- &lt;span class="k"&gt;**&lt;/span&gt;ccusage&lt;span class="k"&gt;**&lt;/span&gt; — CLI reports&lt;span class="p"&gt;;&lt;/span&gt; we lead with Dashboard + native quotas
- &lt;span class="k"&gt;**&lt;/span&gt;CodeBurn&lt;span class="k"&gt;**&lt;/span&gt; — multi-tool/multi-platform&lt;span class="p"&gt;;&lt;/span&gt; we lean stricter cost semantics + default no telemetry
- &lt;span class="k"&gt;**&lt;/span&gt;tokscale&lt;span class="k"&gt;**&lt;/span&gt; — token/cost scale peer&lt;span class="p"&gt;;&lt;/span&gt; same honesty boundaries apply
- &lt;span class="k"&gt;**&lt;/span&gt;Token Monitor&lt;span class="k"&gt;**&lt;/span&gt; — closest dashboard shape&lt;span class="p"&gt;;&lt;/span&gt; we &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="k"&gt;**&lt;/span&gt;not&lt;span class="k"&gt;**&lt;/span&gt; claim Cursor / multi-machine / menu bar yet

&lt;span class="c"&gt;### Feedback asks&lt;/span&gt;

1. Which connector should deepen first?
2. Does retail-equivalent framing &lt;span class="nb"&gt;help &lt;/span&gt;or confuse?
3. What would make &lt;span class="sb"&gt;`&lt;/span&gt;start-at-login&lt;span class="sb"&gt;`&lt;/span&gt; a habit?

PRs/issues welcome. Don’t &lt;span class="nb"&gt;paste &lt;/span&gt;Keychain secrets or live exports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer &lt;code&gt;npx&lt;/code&gt;; global install optional. Daemon binds &lt;code&gt;127.0.0.1&lt;/code&gt;. Data under &lt;code&gt;~/Library/Application Support/Agent Usage&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost honesty
&lt;/h3&gt;

&lt;p&gt;Actual charges, provider estimates, fixed subscription fees, and API retail equivalents are &lt;strong&gt;separate evidence&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>macos</category>
      <category>devtools</category>
    </item>
    <item>
      <title>svelte5plus-calendar: Zero-dependency full calendar for Svelte 5</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 10 Sep 2026 12:03:39 +0000</pubDate>
      <link>https://dev.to/blackman99/svelte5plus-calendar-zero-dependency-full-calendar-for-svelte-5-4maf</link>
      <guid>https://dev.to/blackman99/svelte5plus-calendar-zero-dependency-full-calendar-for-svelte-5-4maf</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If you’re on &lt;strong&gt;Svelte 5&lt;/strong&gt;, calendar UIs often mean wrapping a React-era library, accepting a heavy dependency tree, or rolling month grids yourself and stopping short of week time-grids, recurrence, and drag-resize. You want one component that feels like Google / Apple / Outlook — without dragging half of npm into the client.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;svelte5plus-calendar&lt;/strong&gt; is a full-featured, &lt;strong&gt;zero-runtime-dependency&lt;/strong&gt; calendar component for Svelte 5: month, week, day, year, and agenda views, drag &amp;amp; drop editing, recurring events, multiple calendars, i18n, and dark mode. TypeScript-first; styles import automatically.&lt;/p&gt;

&lt;p&gt;Docs with live examples: &lt;a href="https://blackman99.github.io/svelte5plus-calendar/" rel="noopener noreferrer"&gt;blackman99.github.io/svelte5plus-calendar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/Blackman99/svelte5plus-calendar" rel="noopener noreferrer"&gt;github.com/Blackman99/svelte5plus-calendar&lt;/a&gt; (MIT)&lt;/p&gt;

&lt;p&gt;npm: &lt;a href="https://www.npmjs.com/package/svelte5plus-calendar" rel="noopener noreferrer"&gt;svelte5plus-calendar&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Six views&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Month (spanning multi-day bars, +N more popovers), week &amp;amp; day time grids, year overview, agenda list, and a &lt;strong&gt;resources&lt;/strong&gt; view (rooms/people columns) for booking-style UIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drag &amp;amp; drop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Move events across days/slots, drag all-day bars, resize from the bottom edge, drag empty space to select/create. Touch: long-press to drag, swipe to scroll.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in popovers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click an event for details (with delete); click/drag empty space for quick-create — zero config. Your callbacks replace them when provided.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recurring events&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Practical RRULE subset (FREQ, INTERVAL, COUNT, UNTIL, BYDAY incl. 2TU/-1FR, BYMONTHDAY) as strings or typed objects, plus exdates. This event and this and following edits; occurrence/series deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theming &amp;amp; i18n&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Light / dark / auto; every color, radius, and font is a CSS custom property; 10-color event palette that adapts to dark mode. Any BCP-47 locale via Intl (no bundles); UI strings for 10 languages; locale-aware week start and clock; timeZone prop with edits converted back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multiple calendar sources with visibility and edit permissions; current-time indicator and business hours; validRange + eventOverlap={false}; ICS parseICS / toICS; custom eventContent snippets; headless exports (layoutDay, expandRecurrence, …); keyboard navigation and aria-live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;svelte5plus-calendar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requires Svelte 5. Styles are imported automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CalendarEvent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte5plus-calendar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Calendar&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte5plus-calendar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$state&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CalendarEvent&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kickoff meeting&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;teal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Standup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="na"&gt;recurrence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"height: 640px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Calendar&lt;/span&gt; &lt;span class="na"&gt;bind:events&lt;/span&gt; &lt;span class="na"&gt;view=&lt;/span&gt;&lt;span class="s"&gt;"week"&lt;/span&gt; &lt;span class="na"&gt;locale=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt; &lt;span class="na"&gt;editable&lt;/span&gt; &lt;span class="na"&gt;selectable&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Handle edits with rollback:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Calendar&lt;/span&gt;
    &lt;span class="na"&gt;bind:events&lt;/span&gt;
    &lt;span class="na"&gt;editable&lt;/span&gt;
    &lt;span class="na"&gt;onEventChange=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;revert&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;catch&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;revert&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;}}&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who it’s for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Svelte 5 apps that need a real calendar, not only a date picker&lt;/li&gt;
&lt;li&gt;Teams that want DnD + recurrence + i18n without a React interop layer&lt;/li&gt;
&lt;li&gt;Authors who prefer CSS-variable theming and headless layout utils&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who it’s not (yet) for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Projects stuck on Svelte 4 (this package requires Svelte 5)&lt;/li&gt;
&lt;li&gt;Apps that need a full RFC5545 / CalDAV server stack (client component + practical RRULE subset)&lt;/li&gt;
&lt;li&gt;Teams standardized on FullCalendar’s plugin ecosystem with sunk cost already paid&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Light comparison (not a roast)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Typical pick&lt;/th&gt;
&lt;th&gt;svelte5plus-calendar angle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Battle-tested React calendar&lt;/td&gt;
&lt;td&gt;FullCalendar&lt;/td&gt;
&lt;td&gt;Svelte 5-native, zero runtime deps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month-only picker&lt;/td&gt;
&lt;td&gt;Lightweight date libs&lt;/td&gt;
&lt;td&gt;Full views + DnD + RRULE + resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stay in Svelte&lt;/td&gt;
&lt;td&gt;DIY grids&lt;/td&gt;
&lt;td&gt;One component + docs site examples&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it / tell us what’s wrong
&lt;/h2&gt;

&lt;p&gt;We’re especially hungry for feedback on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First-hour DX (npm install → editable week view)&lt;/li&gt;
&lt;li&gt;RRULE edit/split edges in real product data&lt;/li&gt;
&lt;li&gt;Gaps vs FullCalendar for your booking / scheduling use case&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 &lt;a href="https://blackman99.github.io/svelte5plus-calendar/" rel="noopener noreferrer"&gt;Live docs&lt;/a&gt; · &lt;a href="https://github.com/Blackman99/svelte5plus-calendar" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/svelte5plus-calendar" rel="noopener noreferrer"&gt;npm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comment with your current Svelte calendar approach and the one feature that would make you switch — we’ll prioritize from real replies.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>svelte-json-discovery: the discovery.js JSON struct view, as a Svelte 5 component</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:48:33 +0000</pubDate>
      <link>https://dev.to/blackman99/svelte-json-discovery-the-discoveryjs-json-struct-view-as-a-svelte-5-component-5233</link>
      <guid>https://dev.to/blackman99/svelte-json-discovery-the-discoveryjs-json-struct-view-as-a-svelte-5-component-5233</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/discoveryjs/discovery" rel="noopener noreferrer"&gt;discovery.js&lt;/a&gt; ships one of the best interactive JSON &lt;strong&gt;struct&lt;/strong&gt; viewers in the wild. If you want that UX inside a &lt;strong&gt;Svelte 5&lt;/strong&gt; app — search, diff, validate, table, accessibility — without hosting the entire Discovery toolkit, &lt;strong&gt;svelte-json-discovery&lt;/strong&gt; is a standalone extraction/reimplementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Blackman99/svelte-json-discovery" rel="noopener noreferrer"&gt;https://github.com/Blackman99/svelte-json-discovery&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs &amp;amp; examples:&lt;/strong&gt; &lt;a href="https://blackman99.github.io/svelte-json-discovery/" rel="noopener noreferrer"&gt;https://blackman99.github.io/svelte-json-discovery/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;svelte-json-discovery&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add svelte-json-discovery
&lt;span class="c"&gt;# or npm / yarn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;JsonViewer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte-json-discovery&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ada&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;JsonViewer&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; expanded=&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Highlights
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Previews&lt;/td&gt;
&lt;td&gt;Type-colored tokens; numbers with visual thousands separators; &lt;code&gt;Date&lt;/code&gt; / &lt;code&gt;RegExp&lt;/code&gt; / &lt;code&gt;Set&lt;/code&gt; / Error / bigint / typed arrays / functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;Windowed large array&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table&lt;/td&gt;
&lt;td&gt;Configurable object-array table with bounded “show more”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diff&lt;/td&gt;
&lt;td&gt;Bounded, entity-aware moves; cycle / hostile-value protection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate&lt;/td&gt;
&lt;td&gt;Async/precomputed issues; optional &lt;strong&gt;Ajv / Zod / Valibot&lt;/strong&gt; adapters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A11y&lt;/td&gt;
&lt;td&gt;ARIA tree, roving tabindex, full keyboard navigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Hover field docs from JSON Schema (title, description, enum, deprecated, …)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Theme&lt;/td&gt;
&lt;td&gt;Light / dark / auto via &lt;code&gt;--discovery-fmt-*&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full prop reference: docs &lt;code&gt;#api&lt;/code&gt; and the package README under &lt;code&gt;packages/svelte-json-discovery&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monorepo layout
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;packages/svelte-json-discovery&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Published library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Docs site consuming the workspace package (examples = shipping code)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Credits &amp;amp; license
&lt;/h2&gt;

&lt;p&gt;All rendering logic, styling, and UX derive from discovery.js &lt;code&gt;src/views/struct/&lt;/code&gt; by Roman Dvornov and contributors. This project re-implements that view as a Svelte 5 component. &lt;strong&gt;MIT.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Call for feedback
&lt;/h2&gt;

&lt;p&gt;Still early. If you build API explorers, admin consoles, or schema-driven UIs on Svelte 5, I’d love sharp edges filed as issues — especially large payloads, diff caps, and validator adapter ergonomics.s/objects; incremental &lt;code&gt;Set&lt;/code&gt;/&lt;code&gt;Map&lt;/code&gt; iterators |&lt;br&gt;
| Strings | Truncation, length badges, escaped vs “as text”, URL auto-link |&lt;br&gt;
| Search | Cancellable key/value walk, capped results, wraparound + reveal |&lt;br&gt;
| Control | Controlled paths + &lt;code&gt;bind:this&lt;/code&gt; controller methods (expand, focus, scroll, select) |&lt;br&gt;
| Inspector | Optional accessible toolbar from &lt;code&gt;svelte-json-discovery/inspector&lt;/code&gt; |&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Bring Claude Code and Codex into Feishu/Lark group chat — with permission cards</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:38:05 +0000</pubDate>
      <link>https://dev.to/blackman99/bring-claude-code-and-codex-into-feishulark-group-chat-with-permission-cards-2pb8</link>
      <guid>https://dev.to/blackman99/bring-claude-code-and-codex-into-feishulark-group-chat-with-permission-cards-2pb8</guid>
      <description>&lt;p&gt;If your team lives in &lt;strong&gt;Feishu / Lark&lt;/strong&gt;, but coding agents live in personal terminals, you get lost context, verbal “is it OK to run that?”, and no shared session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;agent-feishu-channel&lt;/strong&gt; bridges &lt;strong&gt;Claude Code&lt;/strong&gt; and &lt;strong&gt;Codex&lt;/strong&gt; sessions into a Feishu bot — a complete coding-agent workflow inside group chat.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;agent-feishu-channel&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI:&lt;/strong&gt; &lt;code&gt;afc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Blackman99/agent-feishu-channel" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-feishu-channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://blackman99.github.io/agent-feishu-channel/" rel="noopener noreferrer"&gt;https://blackman99.github.io/agent-feishu-channel/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this exists
&lt;/h2&gt;

&lt;p&gt;Chat is where decisions happen. The agent should show up there with local-style controls: approve dangerous tools, keep sessions across restarts, and switch providers without rewiring the bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual providers:&lt;/strong&gt; Claude or Codex; &lt;code&gt;/provider&lt;/code&gt; per session&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission brokering:&lt;/strong&gt; sensitive calls become Feishu approval cards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session persistence:&lt;/strong&gt; survives restarts; auto-resume; &lt;code&gt;/sessions&lt;/code&gt; and &lt;code&gt;/resume&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queue &amp;amp; interrupt:&lt;/strong&gt; messages queue while generating; &lt;code&gt;!&lt;/code&gt; interrupts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive cards:&lt;/strong&gt; streaming status and tool activity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime config:&lt;/strong&gt; &lt;code&gt;/config set&lt;/code&gt; without restart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context mitigation:&lt;/strong&gt; early warnings and a 50MB hard-reset fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;

&lt;p&gt;Needs Node.js ≥ 20, a Feishu bot app at open.feishu.cn, and &lt;code&gt;claude&lt;/code&gt; and/or &lt;code&gt;codex&lt;/code&gt; on &lt;code&gt;$PATH&lt;/code&gt;. Install with &lt;code&gt;npm install -g agent-feishu-channel&lt;/code&gt;, then run &lt;code&gt;afc init&lt;/code&gt; and fill in &lt;code&gt;app_id&lt;/code&gt;, &lt;code&gt;app_secret&lt;/code&gt;, and the access allowlist before running &lt;code&gt;afc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Migrating from &lt;code&gt;claude-feishu-channel&lt;/code&gt;? The command is now &lt;code&gt;afc&lt;/code&gt; (was &lt;code&gt;cfc&lt;/code&gt;); state auto-renames and history is kept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commands and caveats
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/new&lt;/code&gt; &lt;code&gt;/stop&lt;/code&gt; &lt;code&gt;/status&lt;/code&gt; &lt;code&gt;/cost&lt;/code&gt; &lt;code&gt;/context&lt;/code&gt; &lt;code&gt;/compact&lt;/code&gt; &lt;code&gt;/provider&lt;/code&gt; &lt;code&gt;/mode&lt;/code&gt; &lt;code&gt;/model&lt;/code&gt; &lt;code&gt;/config set&lt;/code&gt; &lt;code&gt;/project&lt;/code&gt; &lt;code&gt;/cd&lt;/code&gt; &lt;code&gt;/memory&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Permission modes: &lt;code&gt;default&lt;/code&gt;, &lt;code&gt;acceptEdits&lt;/code&gt;, &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;bypassPermissions&lt;/code&gt;. You own Feishu credentials and the &lt;code&gt;allowed_open_ids&lt;/code&gt; allowlist; don’t default to &lt;code&gt;bypassPermissions&lt;/code&gt; in shared groups.&lt;/p&gt;

&lt;p&gt;MIT. Issues: &lt;a href="https://github.com/Blackman99/agent-feishu-channel/issues" rel="noopener noreferrer"&gt;https://github.com/Blackman99/agent-feishu-channel/issues&lt;/a&gt;&lt;/p&gt;

</description>
      <category>feishu</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SveltePress: Ship docs and blogs with SvelteKit — and Svelte 5 inside Markdown</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:13:59 +0000</pubDate>
      <link>https://dev.to/blackman99/sveltepress-ship-docs-and-blogs-with-sveltekit-and-svelte-5-inside-markdown-4o0i</link>
      <guid>https://dev.to/blackman99/sveltepress-ship-docs-and-blogs-with-sveltekit-and-svelte-5-inside-markdown-4o0i</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If your product is SvelteKit, your docs often… aren’t. You jump to VitePress (Vue) or Docusaurus (React), then maintain a second mental model for layouts, components, and deploy adapters. That’s fine for many teams — until you want interactive examples that are &lt;em&gt;the same&lt;/em&gt; components your app uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SveltePress is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SveltePress&lt;/strong&gt; is a content-centered site builder for &lt;strong&gt;docs and blogs&lt;/strong&gt;, inspired by VitePress and built on &lt;strong&gt;SvelteKit&lt;/strong&gt;. You write Markdown (and Svelte), keep Kit’s full surface area (SSR, SSG, adapters, &lt;code&gt;+page.server.js&lt;/code&gt;, hooks), and get documentation-native features on top.&lt;/p&gt;

&lt;p&gt;Live docs &amp;amp; demos: &lt;a href="https://sveltepress.site" rel="noopener noreferrer"&gt;sveltepress.site&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Source: &lt;a href="https://github.com/SveltePress/sveltepress" rel="noopener noreferrer"&gt;github.com/SveltePress/sveltepress&lt;/a&gt; (~532 stars, MIT)&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Svelte 5 Runes in Markdown&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Embed reactive components and &lt;code&gt;$state&lt;/code&gt; islands directly in &lt;code&gt;.md&lt;/code&gt; — tips/callouts, Twoslash hover types, no separate playground toolchain required for simple demos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immutable document versioning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Keep current docs at clean URLs while publishing frozen historical snapshots, with built-in version navigation and release change catalogs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in i18n&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Serve multiple locales from one site: automatic prefixing, language switcher, navigation that preserves the selected version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search that stays out of your way&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Zero-config &lt;strong&gt;Pagefind&lt;/strong&gt; (client-side, multi-locale filtering, historical index freezing). Algolia DocSearch is also supported if you already live there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Themes you can own&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Default documentation theme, blog theme, or a custom theme — configuration and theme APIs are typed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Still SvelteKit&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Same routing mental model (&lt;code&gt;src/routes/+page.md&lt;/code&gt;, layouts, etc.). Scaffold defaults to &lt;code&gt;adapter-static&lt;/code&gt;; swap adapters when you need SSR or platform-specific deploys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Node.js ^20.19.0 or &amp;gt;=22.12.0; pnpm 10 recommended&lt;/span&gt;
npm create @sveltepress@latest
&lt;span class="c"&gt;# or: pnpm create @sveltepress&lt;/span&gt;

&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docs walk through adding &lt;code&gt;@sveltepress/vite&lt;/code&gt; to an existing SvelteKit app if you’re not starting from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it’s for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Svelte / SvelteKit teams who want docs or a content site without leaving the ecosystem&lt;/li&gt;
&lt;li&gt;Projects that need &lt;strong&gt;versioned&lt;/strong&gt; docs and/or &lt;strong&gt;multi-locale&lt;/strong&gt; sites&lt;/li&gt;
&lt;li&gt;Authors who want interactive Svelte examples next to prose&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who it’s not (yet) for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Teams standardized on Vue/React doc stacks with deep plugin ecosystems already paid for&lt;/li&gt;
&lt;li&gt;Pure “Markdown → HTML with zero JS runtime” pipelines that don’t want a Kit project at all&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Light comparison (not a roast)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Typical pick&lt;/th&gt;
&lt;th&gt;SveltePress angle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vue-native docs SSG&lt;/td&gt;
&lt;td&gt;VitePress&lt;/td&gt;
&lt;td&gt;Same content-first feel, SvelteKit underneath&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Big React docs platform&lt;/td&gt;
&lt;td&gt;Docusaurus&lt;/td&gt;
&lt;td&gt;Lighter Kit-native path; versioning + i18n included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stay in Svelte&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;First-class: Runes in MD, Kit adapters, typed themes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it / tell us what’s wrong
&lt;/h2&gt;

&lt;p&gt;We’re especially hungry for feedback on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First-hour DX (create → first deploy)&lt;/li&gt;
&lt;li&gt;Versioning + i18n edge cases in real multi-product docs&lt;/li&gt;
&lt;li&gt;Gaps vs your current VitePress/Docusaurus setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 &lt;a href="https://sveltepress.site" rel="noopener noreferrer"&gt;sveltepress.site&lt;/a&gt; · ⭐ &lt;a href="https://github.com/SveltePress/sveltepress" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you ship with it, a short “who’s using” note or issue is hugely helpful. Thanks for reading.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>codsh 0.22.1 — /ship grill cards wrap long questions (DeepSeek terminal agent)</title>
      <dc:creator>Dongsheng</dc:creator>
      <pubDate>Thu, 10 Sep 2026 09:40:33 +0000</pubDate>
      <link>https://dev.to/blackman99/codsh-0221-ship-grill-cards-wrap-long-questions-deepseek-terminal-agent-3bp9</link>
      <guid>https://dev.to/blackman99/codsh-0221-ship-grill-cards-wrap-long-questions-deepseek-terminal-agent-3bp9</guid>
      <description>&lt;p&gt;DeepSeek-native terminal coding agent; &lt;code&gt;/ship&lt;/code&gt; one sentence → verified code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0.22.1:&lt;/strong&gt; grill card wraps long questions fully (no 2-line ellipsis clip); sync dsh packages to &lt;code&gt;0.1.5-rc.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npm i -g @deepseek-ai/dsh codsh-cli &amp;amp;&amp;amp; codsh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/Blackman99/codsh" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://blackman99.github.io/codsh/" rel="noopener noreferrer"&gt;Docs&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/codsh-cli" rel="noopener noreferrer"&gt;npm codsh-cli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Not a Claude Code env wrapper.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback and a star are always appreciated.&lt;/p&gt;

</description>
      <category>deepseek</category>
      <category>cli</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
