Operate
Call lifecycle and recovery
Inspect the current attempt before retrying a lost or failed call start.
Foreground and detached calls
| Call | Runs as | End it with |
|---|---|---|
sleeptalk --terminal | Attached to your terminal | q or Ctrl+C |
sleeptalk --web | Attached to your terminal, opened on localhost | Ending the call in the browser, or Ctrl+C |
Agent link (host start-voice) | A detached call with a host-owned call ID | The browser, or sleeptalk host stop |
| Discord | The bot's own runtime or service | /<profile> leave; stop the runtime or service to take the bot offline |
sleeptalk host listUse sleeptalk host stop CALL_ID with the ID of the intended call. On a tailnet call, stopping also removes the tailscale serve entry. Stopping a call is different from cancelling a background agent task or removing an OS service.
Why a call ended
| Reason | What happened | Next step |
|---|---|---|
| Silence | No speech for 90 seconds | Ask for a new link |
| Hosted time limit | The hosted relay's 30-minute limit; the page warns 2 minutes and 30 seconds before | Ask for a new link, or use a tailnet or local call, which have no limit |
| Expired link | The link was not opened within its lifetime (five minutes at most) | Ask for a new link |
| Used link | Someone already opened it | Ask for a new link; treat the old one as spent |
| Relay allowance reached | The hosted service's daily budget refused the call | Try later, or use a tailnet or local call |
Recover a browser start
For automation, give each start a stable request ID and the same profile and workspace. This example asks for a local browser call:
sleeptalk host start-voice web \
--config /path/to/profile.toml \
--workspace /path/to/project \
--caller-context local --request-id call-001 --jsonFor a link delivered through chat, pass that chat integration's name as --caller-context. The receipt's delivery field says how the link travels: local, tailnet, or hosted_relay. The request ID identifies this attempt, not every future call.
sleeptalk host status --config /path/to/profile.toml --request-id call-001If the first response was lost, repeat the exact start arguments and request ID. An unused, still-valid link is recovered without creating a second call. The original expiry stays in effect.
Changed arguments or profile contents produce a conflict. Ended, used, or expired attempts report their state instead of silently launching a duplicate. Use a new request ID for a genuinely new call after reviewing that state.
Recover interrupted setup
Private key entry, phone setup, and call starts use separate request IDs. Check a setup request with sleeptalk host input status --request-id <id>, or block until it finishes with sleeptalk host input wait --request-id <id>.
| Setup result | Next action |
|---|---|
| Waiting | Let the user continue in the open private page. |
| Interrupted local input | Retry the same start once, with the same choices, as its receipt directs. |
| Expired or cancelled input | Start a new request. Matching validated credentials can be reused. |
| Interrupted phone link | Create a new request ID and send the new link. |
| Complete, profile ready | Go on to the call start. This does not prove an audible exchange. |
Cancelling keeps credentials that were already saved. Never retry a rejected key, permission denial, or identity mismatch in a loop. Follow the receipt's next_action.
Tailnet start failures
A tailnet start that cannot publish fails before any link exists, with a code such as tailscale_not_running or tailscale_https_disabled. It never falls back to the hosted relay. Fix the cause and start again. See calls over your tailnet.
Diagnose before retrying
sleeptalk doctor --config /path/to/profile.toml --jsonDoctor's live checks contact configured services and can use provider credit. Add --offline for local checks only. Use the stable check IDs to see which prerequisite failed.
A ready profile, a running process, or a media_playing event does not prove that a person heard the right response. Verify a spoken workspace question, a reply, Stop, and a new call.