| Property | Description |
|---|---|
namespace / name | Unique identifier (e.g., support/ticket-agent) |
llm_provider_id | LLM provider to use (null = system default) |
model | Model override (null = provider’s default) |
system_prompt | Jinja2 template for the system message |
temperature | Sampling temperature (default: 0.7) |
max_tokens | Max token limit for responses |
input_schema | JSON Schema for validating chat input variables |
output_schema | JSON Schema for validating agent output |
initial_messages | Few-shot example messages |
enabled_functions | Functions available as tools (list of namespace/name) |
function_parameters | Default parameter values per function (supports Jinja2) |
enabled_agents | Other agents callable as sub-agents |
enabled_skills | Skills available to the agent |
enabled_queries | Database queries available as tools |
query_parameters | Default query parameter values |
enabled_collections | File collections the agent can access. Plain string (readonly) or {"collection": "namespace/name", "access": "readonly|readwrite"}. Readwrite enables write/edit/delete file tools. |
enabled_stores | Stores the agent can access. List of {"store": "namespace/name", "access": "readonly"} or {"store": "namespace/name", "access": "readwrite"} |
enabled_connectors | Connectors available as tools. List of {"connector": "namespace/name", "operations": [...], "parameters": {"op_name": {"param": "value"}}}. Parameters support Jinja2 templates and are locked (hidden from LLM). |
hooks | Message lifecycle hooks. {"on_user_message": [...], "on_assistant_message": [...]} |
system_tools | Platform capabilities. List of strings or config objects. See System Tools. |
icon | Icon reference (see Icons) |
function: reference to a function (namespace/name)async: if true, fire-and-forget (no impact on latency)on_timeout:block(stop pipeline) orpassthrough(continue) — sync hooks only
{"message": {"role": "...", "content": "..."}, "chat_id": "...", "agent": {"namespace": "...", "name": "..."}, "user_id": "..."} and can return:
{"content": "..."}to mutate the message{"block": true, "reply": "..."}to stop the pipelinenullto pass through unchanged
session_key: Maps an external identifier (Slack channel, Telegram chat, WhatsApp number) to a persistent Sinas chat. One chat per(agent_id, session_key)pair.reset: true: Archives the existing session and starts a new conversation.input: Agent input variables, only used when creating a new chat.- Streams internally, returns assembled reply as a single JSON payload.
- Create a chat linked to an agent (optionally with input variables validated against
input_schema) - Send a message — Sinas builds the conversation context with the system prompt, preloaded skills, message history, and available tools
- The LLM generates a response, possibly calling tools
- If tools are called, Sinas executes them (in parallel where possible) and sends results back to the LLM for a follow-up response
- The final response is streamed to the client via Server-Sent Events
expires_in (seconds) when creating the chat. Expired chats are automatically hard-deleted (with all messages) by a scheduled cleanup job:
PUT /chats/{id} with {"archived": true}. Archived chats are hidden from the default list but can be included with ?include_archived=true.
Agent-to-agent calls go through the Redis queue so sub-agents run in separate workers, avoiding recursive blocking. Results stream back via Redis Streams.
Function parameter defaults pre-fill values when an agent calls a function. Supports Jinja2 templates referencing the agent’s input variables: