Production infrastructure for AI agents
Website · Documentation · Guides · Core · Template · Discord
systemprompt-client
The outside edge of a systemprompt.io deployment. Every CLI and external service reaches the server through one typed HTTP surface, never a repository or a database. What runs the deployment stays behind the API, and callers hold requests, not internals.
Layer: Shared, foundational types and traits with no dependencies on other layers. Part of the systemprompt-core workspace.
What it does
SystempromptClient wraps a pre-configured reqwest::Client and exposes typed methods for the routes declared in systemprompt-models::ApiPaths. External applications talk to a running deployment without linking against its business logic. Requests carry typed identifiers (ContextId, JwtToken), responses deserialize into shared models, and failures resolve to a single ClientError enum.
RemoteCliExecutor streams remote CLI command output over server-sent events into a caller-supplied OutputSink, so a local shell can drive a command running on the deployment and see its output arrive line by line.
Module map
| Module | Responsibility |
|---|---|
client |
SystempromptClient and every typed API method; client/http.rs holds the internal GET/POST/PUT/DELETE helpers |
error |
ClientError enum and the ClientResult<T> alias |
remote_cli |
RemoteCliExecutor, RemoteCliRequest, and the OutputSink trait for SSE-streamed CLI output |
Error model
| Variant | Meaning |
|---|---|
HttpError |
Network or transport failure (wraps reqwest::Error) |
ApiError |
Server returned a non-2xx response, carrying status, message, details |
JsonError |
Response body failed to deserialize |
AuthError |
Authentication or authorization failure |
NotFound |
Requested resource does not exist |
Timeout |
Request exceeded its time limit |
ServerUnavailable |
Server unreachable |
ConfigError |
Invalid client configuration |
EventStreamSetup |
Failed to open a server-sent event stream |
Io |
Local I/O failure (wraps std::io::Error) |
is_retryable() returns true for Timeout, ServerUnavailable, and HttpError.
Usage
[]
= "0.21"
use ;
use JwtToken;
async
use SystempromptClient;
async
API Operations
| Category | Methods |
|---|---|
| Agents | list_agents, get_agent_card |
| Contexts | list_contexts, get_context, create_context, create_context_auto_name, fetch_or_create_context, update_context_name, delete_context |
| Tasks | list_tasks, delete_task |
| Artifacts | list_artifacts, list_all_artifacts |
| Messages | send_message |
| Admin | list_logs, list_users, get_analytics |
| Health | check_health, verify_token |
Error Handling
All fallible operations return ClientResult<T>. Pattern match on ClientError for specific handling:
use ;
async
Configuration
Timeout
Default timeout is 30 seconds. Custom timeout:
let client = with_timeout?;
Authentication
Token can be set at construction or later:
// At construction (builder pattern)
let client = new?.with_token;
// After construction (mutation)
let mut client = new?;
client.set_token;
Dependencies
| Crate | Purpose |
|---|---|
reqwest |
HTTP client with async support |
reqwest-eventsource |
Server-sent event streams for remote CLI output |
futures |
Async combinator utilities |
serde / serde_json |
JSON serialization |
chrono |
DateTime handling for auto-naming |
thiserror |
Derive macro for error types |
tracing |
Structured logging for error diagnostics |
systemprompt-models |
Shared API types (AgentCard, Task, etc.) |
systemprompt-identifiers |
Typed identifiers (ContextId, JwtToken) |
License
BSL-1.1 (Business Source License). Source-available for evaluation, testing, and non-production use. Production use requires a commercial license. Each version converts to Apache 2.0 four years after publication. See LICENSE.
systemprompt.io · Documentation · Guides · Live Demo · Template · crates.io · docs.rs · Discord
Shared layer · Own how your organization uses AI.