# shelbi send

Inject a follow-up message as keystrokes into a running workspace's tmux pane.

```text
shelbi send [OPTIONS] <ID> <MESSAGE>
```

`shelbi send` injects a follow-up message into a running
[workspace](/docs/concepts/workspaces). The text is typed into the
workspace's live tmux pane as keystrokes, exactly as if you'd typed it there
yourself. Use it to nudge, correct, or add a note to an agent that's already
working, without interrupting or restarting the pane.

Shelbi delivers the text first, sends Enter as a separate key event, and then
waits for evidence that the pane accepted the submission. If the text remains
in the input box, Shelbi retries Enter once. A busy Claude pane may keep the
accepted text visible as queued input until its current turn ends. Every result
is recorded in `~/.shelbi/events.log` as `status=submitted`, `status=queued`,
or `status=stuck`; a stuck result also makes the command fail instead of
silently waiting for a human keypress. Codex and custom runners still receive
the split text/Enter sequence, but Shelbi does not apply Claude's UI parser to
them. Their result is explicit `status=unverified`, which preserves delivery
without claiming runner-specific proof.

`NAME` is resolved against the project YAML's `workspaces:` block.

Because `send` writes keystrokes into a pane, the message content is
**ephemeral**. Shelbi records and verifies the delivery result, but the worker
does not semantically acknowledge or persist the message body. When you need a
message that survives, is logged, and is acked by the workspace, reach for
[`shelbi message`](/docs/cli/message) instead. See the comparison there.

## Arguments

| Argument | Type | Default | Description |
| --- | --- | --- | --- |
| `<ID>` | string | — | Workspace name, resolved against `workspaces:` (required). |
| `<MESSAGE>` | string | — | The message to type into the pane (required). |

## Flags

| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `-p, --project <PROJECT>` | string | env / cwd lookup | Project to operate on. Defaults to `$SHELBI_PROJECT`, or the registered project whose `work_dir` contains the current directory. |

## Examples

Nudge the `alpha` workspace with a follow-up instruction:

```bash
shelbi send alpha "also update the changelog before you commit"
```

## See also

- [`shelbi message`](/docs/cli/message) — the durable, acked counterpart:
  appends a JSON record to a task's message log instead of typing into a pane.
- [Workspaces](/docs/concepts/workspaces) — what a workspace is and how the
  `workspaces:` block names them.
