# Send a Memo or Update a Storyboard


Your agent team uses a wiki for persistent memory -- summaries, metrics, memos,
storyboards. You need to send a message to a teammate, update the charts in a
storyboard, or make sure the wiki is in sync before a session starts. You do not
need to understand how the wiki is structured internally. `fit-wiki` handles the
plumbing.

This guide covers the two most common wiki operations: sending memos and
refreshing storyboard charts. It also covers syncing and bootstrapping the wiki
for completeness. For a deeper look at how the wiki serves as persistent memory
for your agent team, see the
[Persistent Memory](/docs/libraries/predictable-team/) guide.

## Prerequisites

- Node.js 18+
- A wiki already initialized in your project (see
  [Bootstrapping the wiki](#bootstrapping-the-wiki) if not)

## Sending a memo

You need to notify a teammate about something they should see on their next run.
The `memo` command appends a timestamped message to the teammate's inbox.

```sh
npx fit-wiki memo --from technical-writer --to staff-engineer --message "check baseline"
```

```
wrote wiki/staff-engineer.md
```

The message appears at the top of the teammate's `## Message Inbox` section as a
single markdown bullet:

```markdown
- 2026-05-04 from **technical-writer**: check baseline
```

Newest memos appear first. Multi-line messages are collapsed to a single line.

### Broadcasting to all teammates

To reach every agent except yourself:

```sh
npx fit-wiki memo --from technical-writer --to all --message "new XmR baseline"
```

```
wrote wiki/staff-engineer.md
wrote wiki/security-engineer.md
wrote wiki/improvement-coach.md
```

The sender is automatically excluded from the broadcast.

### Memo options

| Flag          | Required | Description                                                            |
| ------------- | -------- | ---------------------------------------------------------------------- |
| `--from`      | No       | Sender name (falls back to `LIBEVAL_AGENT_PROFILE` env var)            |
| `--to`        | Yes      | Target agent name, or `all` to broadcast                               |
| `--message`   | Yes      | Message text                                                           |
| `--wiki-root` | No       | Override wiki root directory (default: auto-detected from project root) |

If `--from` is omitted and `LIBEVAL_AGENT_PROFILE` is not set, the command exits
with an error.

### The marker contract

Each agent summary file must contain a `<!-- memo:inbox -->` HTML comment
directly under the `## Message Inbox` heading:

```markdown
## Message Inbox

<!-- memo:inbox -->

- 2026-05-04 from **technical-writer**: check baseline
```

The marker is invisible in rendered markdown. If it is missing, the command exits
with code 2 and a diagnostic message. The marker is placed once during wiki
initialization and should not be removed.

## Refreshing storyboard charts

Your storyboard contains XmR chart blocks that visualize metrics over time. When
new metric rows land in the CSV files, the charts need regenerating. The
`refresh` command does that in place.

```sh
npx fit-wiki refresh
```

Without a path argument, this targets the current month's storyboard at
`wiki/storyboard-YYYY-MNN.md`. To refresh a specific file:

```sh
npx fit-wiki refresh wiki/storyboard-2026-M05.md
```

The command scans the file for marker pairs like this:

```markdown
<!-- xmr:findings:wiki/metrics/kata-spec/2026.csv -->
(chart content regenerated here)
<!-- /xmr -->
```

Each block is replaced with the current XmR chart, latest value, status, and
signal descriptions from the referenced CSV. Files without markers are left
unchanged. The operation is idempotent -- running it twice produces the same
output.

## Syncing wiki state

The wiki is a separate git repository cloned into `wiki/` within your project.
Two commands keep it synchronized:

```sh
npx fit-wiki pull
```

```
pull: up to date
```

```sh
npx fit-wiki push
```

```
push: committed and pushed
```

`push` is a no-op when no local changes exist. On conflicts, local state wins.
`pull` exits non-zero with a diagnostic when a conflict is detected.

Both commands are designed for use in Claude Code hooks (e.g., `pull` in
SessionStart, `push` in Stop) and GitHub Actions post-run steps.

## Bootstrapping the wiki

If your project does not have a wiki yet, `init` sets one up:

```sh
npx fit-wiki init
```

```
init: wiki ready at wiki
```

This clones the repository's wiki into `wiki/` and creates
`wiki/metrics/<skill>/` directories for each skill found under
`.claude/skills/`. The wiki URL is derived from your repository's origin remote.

Idempotent -- safe to run on an already-initialized wiki. Authenticates using
ambient GitHub credentials (`GITHUB_TOKEN` or `GH_TOKEN`).

## What's next

<div class="grid">

<a href="../">
<h3>Set Up Persistent Memory and Metrics</h3>
<p>Give your agent team persistent memory and real signal detection — wiki-backed state, XmR control charts, and evidence that agents act on changes, not noise.</p>
</a>
<a href="../xmr-analysis/">
<h3>Chart a Metric and Check Variation</h3>
<p>Know whether a metric has actually changed or just varied — natural process limits and Wheeler's detection rules separate signal from noise.</p>
</a>

</div>
