Adam: An Embeddable Cross-Platform AI Agent Library in C

Adam is an embeddable AI agent library written in C. It offers a full agent loop — tool calling, memory, sessions, voice, streaming, structured output — as a single #include. It supports cloud APIs (Anthropic, OpenAI, Google Gemini, Groq, Together, xAI) and local models via llama.cpp through the same interface. Compiles on macOS, Linux, Windows, iOS, Android, and WASM.
Quick Start
#include "adam.h"
int main(void) {
adam_init();
adam_settings_t *s = adam_create_settings();
adam_settings_set_provider(s, ADAM_API_ANTHROPIC, getenv("ANTHROPIC_API_KEY"), "claude-sonnet-4-20250514");
adam_history_t *h = adam_history_create();
adam_run_result_t r = adam_run(s, h, "What is the capital of France?");
printf("%s\n", r.final_response); // "The capital of France is Paris."
adam_run_result_free(&r);
adam_history_destroy(h);
adam_settings_destroy(s);
adam_cleanup();
}
make deps # build llama.cpp + whisper.cpp
make all # build libadam.a
make test # run 161 tests (ASan + UBSan)
Key Features
- Agent loop – tool calling with automatic iteration until final response
- Three providers – Anthropic, OpenAI, Google Gemini + any compatible API + local GGUF via llama.cpp
- Local vision – multimodal image understanding via llama.cpp + mmproj (Gemma 3, LLaVA, etc.)
- Image generation – native image output via Gemini image models
- Database extensions – SQLite and PostgreSQL extensions that embed Adam as SQL functions
- 13 built-in tools – file I/O, shell, calculator, SQL, web fetch/search, HTTP POST, memory, research, multi-agent
- Long-term memory – hybrid BM25 + vector search via SQLite (sqlite-memory + sqlite-vector)
- Session persistence – save/load conversations with UUIDv7 keys
- Telegram bot – full-featured with text, voice, images, tools, and memory
- Voice – STT (Whisper cloud/local) + TTS (cloud/system) + full audio pipeline
- Streaming – real-time token delivery via callback
- Structured output –
adam_run_json()with validation and retry - Evolution loop – self-improving agent: iterate, score, refine strategy
- Research mode – autonomous multi-iteration info gathering with report synthesis
- Multi-agent – Agent A invokes Agent B as a tool, with independent settings/tools
- Guardrails – pre-send and post-receive validation callbacks
- Response cache – LRU hash table keyed on model + message history
- History management – clone, summarize (LLM-based compression), token estimation
- Thread pool – concurrent agent execution with job queue
- Filesystem sandbox – tools restricted to explicitly allowed directories
- Arena allocator – zero-leak per-iteration memory with automatic cleanup
Build Targets
make deps # Build llama.cpp, whisper.cpp (+ mbedtls/curl on Linux)
make all # Build libadam.a
make test # Build & run unit tests (ASan + UBSan)
make chat # Interactive text chat (cloud API)
make chat GGUF=models/model.gguf # Interactive text chat (local)
make vision GGUF=models/model.gguf MMPROJ=models/mmproj.gguf # Local vision test
make talk # Voice agent (cloud)
make talk LOCAL=1 # Voice agent (fully local)
make memory # Memory system tests
make clean # Remove all build artifacts
Full API documentation is available in API.md with every function, type, and callback.
📖 Read the full source: HN AI Agents
👀 See Also

Building a Local Voice AI Assistant with SwiftUI and CSM-1B on Apple Silicon
A developer built mobiGlas, a SwiftUI app that pairs with OpenClaw to enable hands-free conversations via AirPods, using local voice cloning (CSM-1B on M2 Ultra) and no cloud APIs.

Claude-First Analytics MCP Server: Giving AI Agents Direct Access to Web Analytics Context
A developer rebuilt their web analytics tool as an MCP server, exposing simple web analytics, trackable links, and product insight tools directly to Claude, enabling AI agents to leverage site data alongside code and database context.

Claw Code Agent: Python Reimplementation of Claude Code Architecture for Local Models
Claw Code Agent is a Python reimplementation of the Claude Code agent architecture that runs with local open-source models through OpenAI-compatible backends like vLLM and Ollama, featuring tool calling, slash commands, and tiered permissions.

Claude Code Logs Every Session to Disk — Here's How to Index and Recall Them
Claude Code writes every session turn to ~/.claude/projects/ as JSONL. One user indexed 1026 sessions (57MB, 76K turns) into SQLite+FTS5 with an MCP server for search and thread recall across sessions.