signal-cli · git:20260513.275b3fa · 2026-05-13 · sha256 523c8f13575e2a1b

signal-cli git:20260513.275b3faA

Immutable. This exact content never changes and is served at /api/v1/blob/523c8f13575e2a1b.

---
name: signal-cli
description: Use this skill when the user wants to send a Signal message or attachment to a person or group, even if they ask in terms of messaging someone rather than using signal-cli explicitly. It also applies when the user needs to set up or troubleshoot Signal CLI access, link Signal on a computer, or inspect Signal accounts, contacts, or groups.
---

# signal-cli

Use the local `signal-cli` binary to send Signal messages and attachments. Account inspection, syncing, and recipient resolution support that primary workflow.

## Default workflow

1. Check whether `signal-cli` is installed and linked:

```bash
command -v signal-cli
signal-cli listAccounts
```

2. If the binary is missing or `listAccounts` is empty, read `references/onboarding.md` and complete setup before trying to send anything.
3. Before listing contacts, listing groups, or sending, sync the account once:

```bash
signal-cli -u "+15551234567" receive
```

4. Use the bundled scripts for recipient resolution and sending:

```bash
python3 scripts/find_contact.py --account "+15551234567" --query "Alice"
python3 scripts/send_message.py --account "+15551234567" --to "Alice" --text "hello"
python3 scripts/send_message.py --account "+15551234567" --to "Alice" --text "see attachment" --attachment "/path/to/file"
```

5. If the user asks for raw CLI usage patterns beyond the defaults here, read `references/commands.md`.

## Defaults

- Prefer linking `signal-cli` as a secondary device to the user's existing Signal account.
- Prefer the bundled scripts over handwritten `signal-cli` command assembly for contact lookup and person-to-person sends.
- Use E.164 phone numbers (`+15551234567`) for account and direct recipient arguments.
- After first-time setup, send `--note-to-self` before messaging another person or group.

## Safety rules

- Confirm the final recipient and final message text before any send.
- If recipient lookup returns multiple candidates, stop and ask the user which one to use.
- If the message contains sensitive information, ask explicitly before sending it via Signal.
- When sending to a group, confirm the intended group after listing candidate groups or group ids.

## Gotchas

- `signal-cli` can look healthy while no account is linked; `listAccounts` is the real check.
- Contacts, groups, and profile state can be stale until `receive` runs.
- Group sends may report warnings for stale or unregistered members while still delivering successfully. Treat that as sent only when the command exits successfully.
- `listContacts` and `listGroups` are easiest to automate with `-o json`.