<p>Most releases teach the agent something new about <em>code</em>. This one teaches it two different things: what's running on your <em>machine</em>, and how to teach <em>you</em>. Version 0.9.21 ships Grove integration and something we've wanted to build for months — a complete course.</p><h2>Why this release</h2><p>There's a category of debugging that never shows up in the codebase: the 500 that's actually a php-fpm OOM, the <code>.env</code> pointing at a port nothing listens on, the <code>APP_URL</code> that says <code>http://localhost</code> while your dev environment serves <code>https://myapp.test</code>. None of this is in your repository. All of it costs you afternoons.</p><p>Coding agents are blind to this layer by default. They read your code, your config <em>files</em> — but not the actual state of the environment those files are supposed to describe. So they guess. And environment guesses are the worst kind: plausible, confident, wrong.</p><p>Meanwhile, a different kind of question kept arriving from users: <em>"I've installed Elyra. Now what — what's the actual workflow?"</em> A command reference answers "what does <code>/rewind</code> do." It doesn't answer "when in a real project's life do I reach for it." That gap needed more than a docs page.</p><p>0.9.21 answers both.</p><h2>1. <code>@elyracode/grove</code>: the agent reads the environment's own files</h2><p>Grove is a local dev environment manager — PHP and Node runtimes, MySQL/Redis services, TLS, <code>.test</code> domains, all driven by a daemon and a <code>config.toml</code>. No CLI.</p><p>That "no CLI" part shaped the whole design. Most environment integrations shell out to a command-line tool and parse whatever it prints. The Grove extension does something more direct: <strong>it reads Grove's own files</strong> — the config, the service state, the pid files, the logs. No subprocess, no parsing fragile CLI output, no guessing. The agent sees exactly what Grove sees.</p><pre><code class="language-bash">elyra install npm:@elyracode/grove
</code></pre><p>Four tools, three commands. The dashboard:</p><pre><code class="language-text">/grove

# Grove Status

**Daemon (groved)**: running
**TLD**: .test

## Runtimes
- **PHP**: 8.4, 8.5 (default: 8.5)
  - php-fpm 8.5: running
- **Node**: 24

## Services
- **mysql**: autostart, port 3306
- **redis**: autostart

## Current Project
- **Site**: freddy -&gt; https://freddy.test
</code></pre><p>The one that saves afternoons is the <code>.env</code> sync check. Here's the key detail: it doesn't compare your <code>.env</code> against <em>defaults</em> — it compares against Grove's <strong>actual state</strong>. The real MySQL port from Grove's service registry. The site's real domain, including whether Grove serves it over TLS:</p><pre><code class="language-text">/grove-sync

# Grove .env Sync Check

Found 1 issue:
- APP_URL is 'http://localhost' -- Grove serves this site at
  https://freddy.test

Matching:
- DB_HOST matches Grove MySQL
- DB_PORT matches Grove MySQL (3306)
</code></pre><p>And when something breaks, <code>/grove-logs</code> pulls MySQL, Redis, php-fpm, your site's vite/queue dev logs, <em>and</em> the Laravel log into one view — so "the page 500s" becomes "php-fpm hit its memory limit at 14:32" in one command instead of four terminal tabs.</p><p><strong>Bonus: Elyra notices on its own.</strong> Stack detection now recognizes Grove sites. Open a project that's registered in Grove's config — or just sitting in a parked folder — and Elyra offers the integration at startup:</p><pre><code class="language-text">Grove site detected (https://freddy.test).
Install the Grove integration: elyra install npm:@elyracode/grove
</code></pre><p>Quietly skipped if you've already installed it. The same detection principle we use for TALL/SILT/VILT stacks, extended to the environment layer: <em>Elyra should notice what you're working with and come pre-equipped.</em></p><h2>2. The Elyra Course: Freddy the Notetaker</h2><p>The bigger half of this release isn't a package — it's fourteen chapters.</p><p><a target="_blank" rel="noopener noreferrer nofollow" href="https://elyracode.com/course/"><strong>Freddy the Notetaker</strong></a> is a complete course that builds a real product with Elyra: a notes app with fast capture, flat tags, and full-text search, on the SILT stack, from empty directory to deployed. Not a command reference — a journey. Every feature is taught at the exact moment a real project needs it:</p><ul><li><p><strong>Chapter 1</strong> starts in an <em>empty</em> directory, on purpose — an agent with nothing to edit can only think with you. You'll meet the single best prompting pattern we know: <em>"Don't build yet. Interview me."</em></p></li><li><p><strong>Chapter 4</strong> is where most readers have the lightbulb moment: the edit loop that checks its own work, with diagnostics and blast radius arriving in the edit's own result.</p></li><li><p><strong>Chapter 9</strong> hands the biggest feature to a <code>/swarm --worktrees</code> pipeline and reviews one finished diff instead of supervising twenty minutes of edits.</p></li><li><p><strong>Chapter 10</strong> makes experiments cheap: <code>/rewind</code> restores files <em>and</em> conversation together, so a bad idea doesn't just get reverted — the agent forgets it ever suggested it.</p></li><li><p><strong>Chapter 12</strong> is where Grove slots into the daily rhythm, alongside <code>/briefing</code>, <code>/commit</code>, and <code>/pr</code>.</p></li><li><p><strong>Chapter 14</strong> ships Freddy — and reveals what the course was actually teaching: fourteen habits, one per chapter, that transfer to any project you build next.</p></li></ul><p>Every chapter follows the same honest rhythm: <em>the problem → the hard way → the Elyra way → what you learned.</em> We show the failure modes first because you've probably lived them — the 47-file scaffold you didn't ask for, the assertion-free test stubs, the agent that styles by statistics.</p><p>Who it's for: anyone who has installed Elyra and wants to know how to actually <em>work</em> with an agent, day to day. No prior agent experience assumed.</p><h2>Get it</h2><pre><code class="language-bash">npm install -g @elyracode/coding-agent@latest
elyra install npm:@elyracode/grove
</code></pre><p>Then start the course at <a target="_blank" rel="noopener noreferrer nofollow" href="https://elyracode.com/course/">elyracode.com/course</a> — chapter 1 needs nothing but an empty directory and ten minutes.</p>