liate.json — The 5-Pillar Spec
Complete reference for the liate.json sovereign agent specification format. One file defines your entire agent.
liate.json is the universal declarative specification for a Liate sovereign AI agent. It uses 5 top-level keys — one per pillar — to describe everything an agent needs to run: its model, identity, tools, memory, and environment.
The same liate.json runs identically locally via npx liate run and on the Liate Cloud (Cloudflare / Vercel Edge). Write once. Execute anywhere.
Complete Example
{
"L": "sarvam/sarvam-105b-conversations",
"I": {
"memory": "sessions/time-agent-india-v4"
},
"A": {
"name": "time-agent",
"version": "1.0.0",
"intent": "You are a time analyst. When asked about time in India or IST, you MUST pass timezone='Asia/Kolkata' to get_current_time.",
"skills": "./skills.md"
},
"T": {
"time": {
"command": "uvx",
"args": ["mcp-server-time"],
"tools": ["get_current_time"]
},
"search": {
"command": "websearch.exe",
"tools": ["*"]
}
},
"E": {
"SARVAM_API_KEY": "$SARVAM_API_KEY",
"MAX_TURNS": "5",
"REQUIRE_APPROVAL": "false"
}
}L — Language Model
Specifies which AI model and provider to use. Format is always "provider/model-id".
{ "L": "sarvam/sarvam-105b-conversations" }
{ "L": "openai/gpt-4o" }
{ "L": "anthropic/claude-sonnet-4-5" }
{ "L": "google/gemini-2.5-pro" }
{ "L": "groq/llama-3.3-70b-versatile" }
{ "L": "deepseek/deepseek-chat" }
{ "L": "openrouter/meta-llama/llama-3.1-405b" }I — Intelligence (Memory)
Configures the agent's persistent memory and session continuity. Memory is stored as a JSON file in ~/.liate/sessions/.
{
"I": {
"memory": "sessions/my-agent-memory"
}
}| Field | Type | Description |
|---|---|---|
memory | string | Session ID. Stored at ~/.liate/sessions/<id>.json. Conversation history persists across runs. |
A — Agent Identity
Defines the agent's name, system prompt (intent), and procedural skills loaded from Markdown files.
{
"A": {
"name": "researcher",
"version": "2.1.0",
"intent": "You are a deep research analyst. You search the web, extract facts, and produce structured reports.",
"skills": "./skills.md"
}
}| Field | Type | Description |
|---|---|---|
name | string | Agent identifier — used in logs, UI, and MCP client metadata. |
version | string | Optional semantic version of this agent. |
intent | string | System prompt injected at the start of every LLM call. |
skills | string | Path to a skills.md Markdown file with procedural rules. Comma-separated for multiple skill files. |
T — Tools (MCP Servers)
Connects external MCP tool servers. Each key in T is an arbitrary server name. Liate supports 3 transport types.
{
"T": {
"time": {
"command": "uvx",
"args": ["mcp-server-time"],
"tools": ["get_current_time"]
},
"email": {
"command": "sse",
"url": "https://mcp.agentmail.to/sse?apiKey=your_key",
"tools": ["*"]
},
"search": {
"url": "https://mcp.search-engine.com/mcp",
"tools": ["web_search", "news_search"]
}
}
}| Field | Type | Description |
|---|---|---|
command | string | Binary to execute: uvx, npx, node, python, an .exe path, sse, or http. |
url | string | For remote MCP servers (SSE or Streamable HTTP). |
args | string[] | Arguments passed to the command (e.g. ["mcp-server-time"]). |
tools | string[] | Whitelist of tool names to expose to the LLM. Use ["*"] for all tools. |
Transport Resolution Logic:
command="uvx"or any binary path → StdioClientTransport (spawns child process)command="sse"or URL contains/sse→ SSEClientTransport (HTTP event stream)- HTTPS URL without
/sse→ StreamableHttpClientTransport (JSON-RPC over HTTP)
E — Environment
Injects API keys and runtime control flags into the agent's execution environment. Values starting with $ are resolved from the system environment or ~/.liate/.env.
{
"E": {
"SARVAM_API_KEY": "$SARVAM_API_KEY",
"OPENAI_API_KEY": "sk-hardcoded-key",
"MAX_TURNS": "5",
"REQUIRE_APPROVAL": "false",
"AUTO_APPROVE_TOOLS": "get_current_time,web_search"
}
}| Key | Values | Description |
|---|---|---|
SARVAM_API_KEY / OPENAI_API_KEY etc. | "$VAR" or literal | API key for the provider specified in L-pillar. |
MAX_TURNS | "1" – "20" | Maximum ReAct loop iterations. Default: 5. |
REQUIRE_APPROVAL | "true" / "false" | If true, every tool call requires user approval via WebSocket before executing. |
AUTO_APPROVE_TOOLS | Comma-separated tool names | Tools listed here are auto-approved. All others require approval. |
skills.md — Procedural Instructions
A skills.md file is a plain Markdown document containing procedural rules for your agent. It is injected verbatim into the system prompt as a [PROCEDURAL SKILL] block before every agent run.
# time-agent skills
- When user asks for time, ALWAYS call `get_current_time` with `timezone="Asia/Kolkata"` for India.
- Include a time-of-day greeting: "Good Morning" (5am–12pm), "Good Afternoon" (12pm–5pm), "Good Evening" (5pm–9pm), "Good Night" (9pm–5am).
- Always end your response with an inspiring daily quote.