Chapter 12 of 14

Daily Rhythm

Not every hour on Freddy is feature work. There's the work between the work — remembering where you were, writing commit messages, debugging the dev environment. This chapter hands all of it to the agent.

The problem

You sit down with coffee and the first twenty minutes go to archaeology: what was I doing? Which branch is this? Did I commit yesterday's tag-filter work or is it still sitting in the working tree? Then, at the end of a slice, more friction: a commit message to compose, a PR description to write, and — on the bad days — a 500 error that turns out to be the environment, not the code. Each of these is small. Together they're an hour a day, every day.

The hard way

You alt-tab through git log and git status reconstructing yesterday from tea leaves. You write "fix stuff" commits because the real message would take five minutes you don't have. And when the environment misbehaves, you debug it by vibes: restart everything, clear some caches, hope. None of this is engineering — it's overhead wearing engineering's clothes.

The Elyra way, morning edition: /briefing

Install @elyracode/git-intel via /ext. Now the day starts with one command:

/briefing

  Git briefing — freddy (branch: feature/archive-view)
  Since your last session (yesterday, 17:42):
  - 3 commits on this branch, latest:
    "feat: archive list page with restore action"
  - Uncommitted: resources/js/pages/Archive.svelte (modified),
    tests/Feature/ArchiveTest.php (new, untracked)
  You appear to be mid-way through archive tests.

That last line is yesterday's context, recovered in two seconds instead of twenty minutes. The briefing reads the repository — branch, recent commits, uncommitted state — and tells you where you actually stood, not where you remember standing.

The environment: Grove

Freddy is served at https://freddy.test by Grove, the local dev environment manager. Grove has no CLI — and that's fine, because the @elyracode/grove extension doesn't need one: it reads Grove's own config, state, and log files directly. Install it and three commands arrive.

/grove is the dashboard:

/grove

  Grove — daemon running
  PHP 8.4.1 (default) · Node 22.11
  Services: mysql :3307 (running), redis :6379 (running)
  This project → site "freddy" → https://freddy.test (TLS)

/grove-logs pulls the recent tail of every log that matters — mysql, redis, php-fpm, the per-site vite and queue logs, plus Freddy's own Laravel log. The day it earns its keep: Browse starts throwing 500s with nothing in the Laravel log. You ask, and the agent looks where you wouldn't have:

> Browse is 500ing but laravel.log is clean. Check the
  environment.

  /grove-logs
  php-fpm: [23-Jul 09:14] WARNING: [pool freddy] child 4821
  exited on signal 9 (SIGKILL) — memory limit exceeded
  Diagnosis: php-fpm is OOM-killing workers. The N+1 in the
  Browse tag eager-load is inflating memory; the request dies
  before Laravel can log anything.

A 500 with a clean application log is the classic environment ghost — visible only in the layer below, which the agent can now read.

/grove-sync closes the last gap: your .env versus the environment's actual state. Not what the docs say Grove uses — what Grove's own service state files say right now:

/grove-sync

  Checking .env against Grove state...
  - DB_PORT=3306 in .env, but Grove runs mysql on 3307
  - APP_URL=http://localhost, but Grove serves this site at
    https://freddy.test (TLS enabled)
  2 mismatches. Apply fixes? [y/n]

The APP_URL mismatch is the sneaky one — asset URLs and redirects half-work until they don't. One keystroke and the file matches reality.

Shipping slices: /commit and /pr

At the end of a slice, git-intel finishes the job it started at breakfast. /commit reads the staged changes and writes the message:

git add -A && git status
/commit

  feat: archive view with restore

  Add Archive page listing soft-deleted notes with a restore
  action. Excludes archived notes from search per SPEC.
  Feature test covers archive → restore → reappears in browse.

And /pr does the same for the branch as a whole — a PR description generated from the actual commits and diff, not from your memory of them. "Fix stuff" retires, not because you got more disciplined, but because the disciplined version became the cheap version.

Session hygiene

The rhythm within a session matters too, and by now the habits are familiar — Chapter 1 planted most of them:

  • /compact when context gets heavy — or rely on auto-compaction and let Elyra pick the moment.
  • /cost to see what the session has spent so far. (Chapter 13 makes a whole practice of this.)
  • /new per feature. Sessions are cheap; context confusion isn't.
  • /resume to pick up an old session — which only works well because…
  • /name every session, like Chapter 1 said. "freddy: archive view" beats "Session 47".

What you learned

  • Start the day with /briefing. Two seconds of git archaeology instead of twenty minutes.
  • Let the agent read the environment's own files instead of guessing — /grove, /grove-logs, and /grove-sync see the layer below the application.
  • Commit messages and PR prose are agent work. /commit and /pr write them from the diff, which is more honest than memory anyway.
  • Sessions are cheap — start fresh per feature, name them, compact them, and resume them by name.
Next: in Chapter 13 we watch the meters — /cost, smart routing that automates the Ctrl+P habit, budget-aware /goal loops, and a local ledger that grades your models on their actual track record.