# Troubleshooting

Symptoms first. Each entry says what the state actually is, not just what to type.

Start by getting the daemon's own view:

```bash
saylek status
```

Add `--watch` to live-tail it while something is settling.

## Install and startup

### `saylek: command not found`

The binary installed to `~/.saylek/bin` but that directory is not on your `PATH`. Open a
new shell first, since the installer edits your shell profile and the current session will
not have picked it up. If it still fails, add `~/.saylek/bin` to `PATH` yourself.

### The daemon is not running

```bash
saylek start
```

The installer registers a user-level service, so this is normally only needed after a
manual stop.

## First call

### `model_not_found`

The daemon is up but has no model loaded. A fresh install is expected to be in this state.

```bash
saylek gpu wizard     # guided: pick and fetch a model
saylek model ls       # confirm it was discovered
```

If you dropped a `.gguf` into `~/.saylek/models/` yourself, tell the daemon to look again:

```bash
saylek model rescan
```

### HTTP 503, `no inference backend compiled in`

You are running a binary built with no inference backend. This only happens on a
from-source build: `cargo build --release` without a `--features` flag compiles, but the
result cannot serve.

Rebuild with a backend that matches your hardware: `cpu` (portable), `cuda` (NVIDIA), or
`metal` (Apple Silicon). Released binaries already carry one.

### Requests fail and no Host is available

Your Circle can only answer while a Host in it is online. If none is, calls for models you
cannot serve locally will fail until one comes back. Check with `saylek status`.

### Every request fails after you enabled local-only

This is local-only working as designed, not a bug. Local-only stops Saylek routing your
request to another member: it serves locally or it fails. If your machine cannot serve the
model you asked for, every such request now fails.

(One scope note, since it surprises people in the other direction: local-only governs
Saylek's own routing. It does not override a proxy upstream you configured yourself, which
still receives requests that resolve to it.)

Either load a model you can serve locally, or turn local-only back off in
`~/.saylek/config.toml`:

```toml
[federation]
local_only = false
```

See [Privacy and egress](/docs/privacy-and-egress).

### Nothing egresses even though local-only is off

Check that you still belong to a Circle. With **zero live memberships** the system fails
closed and keeps everything local, by design: leaving your last Circle withdraws the egress
default.

```bash
saylek circles list
```

Remember that this is the offline, device-local view. It reports what this machine holds
credentials for, not every Circle you belong to.

## Connecting an app

### 401 or 403 from the hosted endpoint

Your API key is wrong, revoked, or not being sent. A key's secret is shown **once**, at
creation, so if you did not save it, create a new one rather than hunting for it.

### Claude Code ignores your key

`ANTHROPIC_API_KEY` overrides `ANTHROPIC_AUTH_TOKEN`. Unset it:

```bash
unset ANTHROPIC_API_KEY
```

### 404 on the hosted endpoint

Almost always the `/v1` suffix, which differs by dialect and is easy to cross over:

| Client | Base URL |
|---|---|
| OpenAI-compatible | `https://api.saylek.com/v1` |
| Anthropic clients | `https://api.saylek.com` (the client appends `/v1/messages` itself) |

### The model id is rejected

Saylek carries the Pool-advertised model id verbatim. There are no `claude-*` or `gpt-*`
aliases. List what your Circle is actually serving and use one of those ids:

```bash
curl https://api.saylek.com/v1/models -H "Authorization: Bearer YOUR_API_KEY"
```

### Web search finds nothing, and nothing errors

A tool your client runs on its own machine is fine. A tool the model *provider* runs is
not: a Host serves a model, not a search engine. Claude Code's `WebSearch` and
`WebFetch` are provider-run, so they hand back an empty result set with no error, and the
answer arrives with no sources and no warning.

Replace them with a search tool your client runs itself:
[Web search](/docs/connect-anthropic#web-search).

## Hosting

### You are hosting but your machine shows as offline

Check that the daemon is running and reachable, and that `saylek status` reports it
connected. Hosting is a separate explicit step from consuming: if you never ran
`saylek host`, your machine is not offering capacity and is not supposed to appear as a
Host.

### Your own work feels slow while serving

Your own work keeps priority on your own GPU. If that is not what you are seeing, capture
`saylek status --watch` output and tell us, because that is a defect rather than a setting.

## Still stuck

Reach us from [/support](/support). Include what you ran, what you expected, and what
happened, plus the output of `saylek status`.

## Next steps

- [Quickstart](/docs/quickstart): the first-run path.
- [Privacy and egress](/docs/privacy-and-egress): local-only, in full.
- [CLI reference](/docs/cli-reference): the command tables.
