---
name: digest-now
description: Regenerate the vault's auto-generated precursor files (the Action Board + the sweep's auto-safe writes) and produce the daily owner brief now — immediately, off the freshest vault, ahead of the scheduled morning send where one is configured. Use when the owner says things like "send the vault digests now / early", "regenerate the precursors and send a fresh digest", "re-send today's digest", or "refresh the Action Board and email the digest." NOT for editing digest content or the schedule, and NOT the spoken daily debrief (that's its own workflow in AGENTS.md).
served: true
---

# Digest Now — regenerate precursors + send the owner digests early

A thin trigger. The **canonical procedure lives in the vault's `AGENTS.md`** — the section **"Where the automation runs"** and its **"Sending the digest early (on demand)"** subsection. That is the single source of truth; this file points to it and supplies the runner-specific command so nothing drifts.

When this skill fires:

1. **Read `AGENTS.md` → "Where the automation runs" + "Sending the digest early (on demand)"** first, and `Agent/User.md` for which runner this vault uses. They win over anything here.
{% if automation.runner %}2. **Run it through the engine — never re-implement.** The send reuses the exact sweep/digest code (`alexandria_vault.engine.digest_now`, from the installed package): one shared sender, no second send path, no schedule change. It pins the owner's resolved **local date** (correct even when travelling), regenerates the precursor files, sends each configured owner digest as **{{ agent.name }}**, and marks the sweep's once/day flags so the scheduled run **won't send a duplicate**.{% else %}2. **No engine send on this vault.** There is no runner, no configured send, and no once/day schedule to protect — follow the no-runner path below and present the brief in the session.{% endif %}

## Connected to a running brain? Call the tool

If you hold the brain's own tools — the default when you're connected to a running brain, and answered by whether `capabilities()` resolves — call **`digest_now`**. It starts the same engine server-side and hands back a `job_id` to poll with `job_result`, so none of the runner-specific plumbing below applies to you. The commands below are for an operator at a checkout, or when no brain tools are in reach.

## Where this runs depends on the runner

{% if automation.runner == "server-macos" -%}
This vault runs on the **always-on macOS host** (`server-macos`). The secrets env (`digest.env`), the once/day state, and the runtime (the `anthropic` package) live **on that host** — so this **must run over SSH**, not on the laptop. The SSH target and vault path are recorded in `Agent/User.md`; substitute them below.

Headline command — the whole thing in one shot (pull the latest, regenerate precursors, send the digests, sync the regenerated Action Board back):

```sh
ssh <host> 'cd "<vault-path>" && \
  git pull --rebase --autostash && \
  sh Agent/scripts/daily-digest/digest-now.sh && \
  { git add -A && git commit -q -m "digest-now: precursor regen + early send" || true; git push -q || true; }'
```

Preview first with `digest-now.sh --plan` (no writes, no send, no state change) if unsure. If the owner edited the vault locally just now, push those edits before the `git pull` on the host so the digest reflects the freshest vault.
{%- elif automation.runner == "laptop-github-actions" -%}
This vault runs on the **GitHub Actions runner** (`laptop-github-actions`) — there is **no local cron, daemon, or secrets env on the laptop**. The early send is a **manual run of the digest workflow** (the same job the schedule fires), which runs the engine in CI and commits the regenerated Action Board back.

Trigger it (either path):

```sh
gh workflow run alexandria-digest.yml
```

Or, in the browser: the repo's **Actions** tab → **Alexandria Daily Digest** → **Run workflow**. The secrets (`ANTHROPIC_API_KEY`, `SMTP_*`) are already set as GitHub Actions secrets, so nothing local is needed.

The workflow's `workflow_dispatch` run is the laptop replacement for the SSH `digest-now` call — it regenerates the precursors and sends today's digests immediately. Because the engine pins the owner's local date and the scheduled job shares the same once/day flags, an early run won't produce a duplicate at the normal send hour. Watch it with `gh run watch` or the Actions tab.
{%- elif automation.runner -%}
This vault's runner isn't one this skill knows (check `automation.runner` in `Agent/User.md` / `Agent/config.json`). Both supported paths are: an **SSH call to the always-on host** (`server-macos`) running `Agent/scripts/daily-digest/digest-now.sh`, or a **manual run of the GitHub Actions digest workflow** (`laptop-github-actions`, `gh workflow run alexandria-digest.yml`). Confirm the runner, then use the matching path.
{%- else -%}
**No runner is configured — there is no scheduled send to get ahead of, and no once/day flag to mark.** "Send my digest now" here means **write the owner's brief in-session**: collate their day the way the digest would — the [[Action Board]] plus the per-area TODOs, read out as *Today · Tomorrow · This week · On the radar · Needs a date or priority* — and present it in chat. On a served brain, call the **`digest_now`** tool instead (same engine, server-side). Nothing is emailed, and don't offer email delivery — a local brain has no email channel for now (hosted/managed-tier feature).
{%- endif %}

## Scope — owner digests only, by design

It sends **only the owner's configured digests** (the `owner_digests` splits). It does **not** send the roster-driven **team digests** — those are pinned to each member's own timezone and fire on their own schedule, so sending them off the owner's clock would mis-time them. The precursor step is an explicit allowlist (the Action Board + auto-safe cleanups), so this can never trip a team send or an inbound email poll. Don't extend it to send the roster unless the owner explicitly asks.
