Skip to main content

Terminal-based AI agent — a function-calling loop with minimum harness

Project description

Slife

Terminal-based AI agent — a function-calling loop with minimum harness. Chat with an LLM that calls tools, remembers everything, and orchestrates other agents over MQTT.

┌─────────────────────────────────────────────────────────────┐
│  Terminal UI (Textual)                                      │
│  ────────────────────────────────────────────────────────── │
│  Agent Loop — LLM + Tools + Stream + Memory + A2A + Inbox  │
│  ┌───────────┬──────────┬───────────┬─────────────────────┐ │
│  │ MCP Proxy │ A2A Mesh │ Subagents │ Built-in Plugins    │ │
│  │ (gateway) │ (MQTT)   │ (workers) │ Memory · MCP · WX   │ │
│  └───────────┴──────────┴───────────┴─────────────────────┘ │
│  Permanent Memory — hybrid search (grep + FTS5 + semantic)  │
└─────────────────────────────────────────────────────────────┘

Install

Zero prerequisites. The install script auto-installs uv and Node.js if needed.

Install script (recommended)

macOS / Linux / WSL:

curl -fsSL https://raw.githubusercontent.com/juzcn/slife/main/install.sh | bash

Windows PowerShell:

powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/juzcn/slife/main/install.ps1 | iex"

Try without installing

uvx --from git+https://github.com/juzcn/slife.git slife

Update

Re-run the install script — it auto-preserves optional packages (llama-cpp-python, sentence-transformers) from the previous install.

Uninstall

# macOS / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/juzcn/slife/main/uninstall.sh | bash

# Windows PowerShell
powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/juzcn/slife/main/uninstall.ps1 | iex"

Uninstall removes the binaries. User data (~/.slife/, ~/.credstore/) is listed but not removed — delete manually for a full reset.

Quick Start

credstore set-password              # first time only — encrypted backup
credstore set DEEPSEEK_API_KEY       # store API key (masked input)
slife

The default config ships with pre-configured MCP servers: filesystem + shell, code search, web fetch, search APIs.

How It Works

Slife is a function-calling loop: you type → the LLM decides what tools to call → Slife executes them → the LLM responds → repeat.

You: "Find all TODO comments and create GitHub issues for them"
  → LLM calls search_content("TODO")
  → LLM calls github__create_issue(...) for each one
  → LLM: "Created 7 issues. All linked above."

Every turn is permanently recorded. On restart, recent conversations are restored.

Configuration

Two-layer model — secrets in OS keyring, config in JSON5:

Layer Storage Contents
Secrets OS keyring (credstore) API keys, tokens — encrypted at OS level
Config ~/.slife/slife.json5env: ${VAR} references + non-secret values
env: {
  DEEPSEEK_API_KEY: "${DEEPSEEK_API_KEY}",   // → resolved from keyring at runtime
}

models: {
  providers: {
    deepseek: {
      base_url: "https://api.deepseek.com",
      api_key: "${DEEPSEEK_API_KEY}",
      models: [{ model: "deepseek-v4-pro", name: "DeepSeek V4 Pro", reasoning: true }],
    },
  },
},
active_model: "deepseek/deepseek-v4-pro",

Secrets never reach the LLM context. All tool output is sanitized before reaching the model — API key patterns are auto-masked.

Features

Tools

All unified as OpenAI function definitions. The LLM sees no difference between native, MCP, or A2A tools.

Category Description
Native System info, Python execution, env/config management, skill loading, CLI discovery
MCP / REST Filesystem, shell, code search, web fetch, any MCP server (stdio or HTTP)
Skills On-demand plugins loaded via list_skills / use_skill
CLI Auto-discovered external commands, persisted across restarts
A2A Agent discovery, task routing, subagents, broadcast (13 tools)

Memory — Always On

Every conversation turn is permanently recorded. Hybrid search across four modes:

Mode Best for
grep Exact strings — error messages, file paths, code
fts5 Topic / keyword search with ranked snippets
hybrid Semantic recall (FTS5 + vec0 vector search, RRF merge)
time Browse by date

Embedding backends: local GGUF (BGE-M3, ~300 MB, offline), HuggingFace transformers, or OpenAI-compatible API. Keyword search works without any embedding backend.

Plugins

Three built-in plugins run as independent processes on Streamable HTTP transport:

Plugin Role
slife-mcp Gateway for external MCP servers (stdio + HTTP)
slife-memory Diary database with hybrid search
slife-wechat Bidirectional WeChat via iLink ClawBot

External MCP servers (filesystem, fetch, search, any OpenAPI spec) are configured in slife.json5 and auto-connected at startup. Third-party MCP servers need no Slife SDK — any stdio or HTTP MCP server works.

A2A — Agent-to-Agent

Two transports, one interface:

Transport Use case
MQTT Remote peers over Mosquitto broker
HTTP Streamable Direct agent-to-agent
Subagent Local child processes (always available)

Unified inbox serializes human, WeChat, MQTT, and subagent messages through a single queue.

Progressive Disclosure

Not all tools are in every request. Three categories use lightweight summaries:

Category Browse Load
Memory memory_search memory_open
Skills list_skills use_skill
MCP mcp_list_tools mcp_set_disclosure("eager")

Keyboard Shortcuts

Key Action
Ctrl+C (in input) Quit
Ctrl+C (elsewhere) Copy
Esc Cancel agent loop
Ctrl+L Focus input
Home / End Scroll to top / bottom

CLI

Flag Description
--agent <id> Agent identity — memory isolation key + A2A mesh name (default: slife)

Optional Extras

Extra Enables
slife[gguf] Local GGUF embeddings (~30 MB, offline)
slife[transformer] HuggingFace transformer embeddings (~2 GB)
slife[embeddings] Both of the above
uv tool install "slife[gguf]" --reinstall

Development

git clone https://github.com/juzcn/slife.git
cd slife
uv sync --all-extras

uv run credstore set-password        # first time
uv run credstore set DEEPSEEK_API_KEY
uv run slife

Dev mode auto-detects: data files stay in the project directory. Production installs use ~/.slife/.

# Run tests
uv run pytest

# With coverage
uv run pytest --cov=slife --cov=credstore --cov-report=term-missing

Architecture

Slife is a minimum-harness agent. The harness only does what the LLM physically cannot: execute tools, maintain conversation state, stream responses, persist memory. Everything else — reasoning, planning, tool selection, error recovery — is the LLM's job.

See DESIGN.md for the full architecture: agent loop, tool system, plugin contract, MCP gateway, memory database, A2A mesh, credential security model, and project structure.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slife-0.3.17.tar.gz (234.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slife-0.3.17-py3-none-any.whl (252.2 kB view details)

Uploaded Python 3

File details

Details for the file slife-0.3.17.tar.gz.

File metadata

  • Download URL: slife-0.3.17.tar.gz
  • Upload date:
  • Size: 234.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for slife-0.3.17.tar.gz
Algorithm Hash digest
SHA256 b4dccb9c1c267f7e3608570c43bfff725b1bd7098456270c007da7dc793533de
MD5 210c2bfe5f2d5a873c14c0555f15979f
BLAKE2b-256 9621c75f916e68749fb2b13d49688ba95d470d7df871ad3762f7db44ef221a6e

See more details on using hashes here.

File details

Details for the file slife-0.3.17-py3-none-any.whl.

File metadata

  • Download URL: slife-0.3.17-py3-none-any.whl
  • Upload date:
  • Size: 252.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for slife-0.3.17-py3-none-any.whl
Algorithm Hash digest
SHA256 c8cf67eab34bd72d5c8e86e5babd95ff5b8d18b3af761a4674e3ed5fbbd57fe9
MD5 f3aab6af3481d3183b9d8b18ec3ee1fe
BLAKE2b-256 77aa7c28f4f8ec4a9b002df1f4e1d3f5fc2538a415d582fd702253c901a063b2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page