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

Open-source Claude plugin generates interactive visual tuners with live preview
A developer built an open-source plugin that lets Claude Code generate single HTML pages with sliders and Figma-style infinite canvases for fine-tuning CSS values. The plugin reads source files, reproduces elements on an interactive canvas, and provides controls for precise adjustments with live preview.

SpecLock: Open Source Constraint Engine for AI Coding Agents
SpecLock is an MCP server that actively enforces constraints on AI coding agents like Claude Code. It blocks violations with semantic conflict warnings using synonym expansion, negation detection, and destructive action flagging.

Recall: Local Project Memory for Claude Code — No Tokens Spent on Summaries
Recall gives Claude Code durable, local session memory via classical summarization. No API key, no external model — context.md is ~1-2K tokens, built offline from session hooks.

Exporting AI Agent Memories Using Claude's Import Function
A Reddit user shares a prompt for extracting stored memories from AI agents like ChatGPT and Claude, then importing them into OpenClaw. The prompt requests all stored context including instructions, personal details, projects, tools, and preferences.