# soothe-client (Rust)
Talk to a running **soothe-daemon** over WebSocket — send prompts, stream agent
turns, run jobs.
```bash
cargo add soothe-client
```
Requires a local daemon (default `ws://127.0.0.1:8765`).
## Quick start
```rust
use soothe_client::appkit::{DaemonSession, SendTurnOptions};
use soothe_client::TEXT_COMPLETION;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let session = DaemonSession::new("ws://127.0.0.1:8765", None);
session.connect(None).await?;
session
.send_turn(
"Summarize this in one sentence: agents need tools.",
Some(SendTurnOptions {
intent_hint: Some(TEXT_COMPLETION.into()),
..Default::default()
}),
)
.await?;
for chunk in session.iter_turn_chunks(None).await? {
println!("{} {:?}", chunk.mode, chunk.data);
}
session.close().await?;
Ok(())
}
```
More patterns: [`examples/`](examples/) (hello → streaming → multi-turn → pool → jobs).
## What you get
| One conversation, stream replies | `appkit::DaemonSession` |
| Jobs / cron (async) | `AsyncCommandClient` |
| Jobs / cron (scripts / sync) | `CommandClient` |
| Raw WebSocket / custom RPCs | `Client` |
| Many users / HTTP backend | `ConnectionPool` + `TurnRunner` |
## Develop
```bash
make check # fmt + clippy + unit tests
make test-integration # live suite (needs soothed)
make test-examples # live 01–06 (needs soothed)
```
## Compatibility
Same protocol-1 WebSocket contract as `soothe-client-python`,
`soothe-client-go`, and `@mirasoth/soothe-client`.
## License
MIT