Docs / How-to guides
Read a server's logs
See every call your plan keeps, live, in the terminal or the app.
Every call to a server is kept for as long as your plan keeps logs (7 days on Hobby and pay as you go, 30 on Pro, a year on Scale): when it came in, how it ended, how long it took, and which tool it ran. A call shows up within a few seconds of arriving. Moving to a plan that keeps more days keeps the calls still there for longer; calls already removed don't come back.
In the terminal
From the server's directory:
$ sokie logs 2026-10-19 14:02:51 tool error 200 212ms getTask UPSTREAM 503 Claude 2026-10-19 14:03:10 ok 200 41ms listTasks Claude 2026-10-19 14:03:12 ok 200 38ms listTasks Claude preview #12
The latest 50 calls, oldest first, so the newest is next to your prompt. Each line has:
- when the call came in, in your local time;
- how it ended;
- the HTTP status the client got;
- how long it took;
- the tool it ran.
After those come any labels that apply: a failed tool's error class and the upstream's status, the client that called, and the preview it went to.
To keep watching as calls arrive:
sokie logs --follow
Narrow it down with --errors for calls that didn't end ok, or --tool getTask for one tool's calls. --limit shows up to 200 calls instead of 50. For a server this directory isn't linked to, add --server <slug>. The CLI reference lists every option.
In the app
Open the server's Logs tab. It shows the same calls, newest first, and updates as they arrive. Choose Errors to see only the calls that failed, or a tool's name to see only that tool's calls. Both filters stay in the page's address, so you can share a filtered view. Copy logs copies the calls on screen as tab-separated text, and the commands under the table give the same view in your terminal, with the server filled in: one to print the calls, one with --follow to tail them live. Add --json to pipe them to your agent.
How a call can end
- ok: the tool ran and answered.
- tool error: the tool ran, but answered with an error. The log says which kind:
BINDING_MISUSE: the arguments were wrong;UPSTREAM: your API failed, with the status it answered;POLICY_DENIED: something has to change first, such as a caller's key;INTERNAL: Sokie failed.
- refused: the call had no token, or a token Sokie didn't accept. See How clients sign in.
- paused: the server was paused.
- rate limited: the caller went over its limit, and was told when to try again.
- failed: the server couldn't answer at all.
What a log never holds
Arguments, results, error messages, your API's responses, secrets, callers' keys, tokens and IP addresses are never kept. A log records what happened, not what was said, so it's safe to share. An error's message can carry text from your API, so to see one, run the call again in your client, or with sokie dev.