Core Concepts
Agents
Engram ships seven autonomous workers. Scheduled agents run via AsyncIOScheduler inside the FastAPI process — no separate worker container required. On-demand agents are invoked from the shell, editor, or API.
How Agents Work
All agents share the same inference stack: they call POST /api/chat internally, which routes the request to Ollama running on your local hardware. No agent makes an outbound call to an AI API. Third-party integrations (Google, Linear, Jira) communicate directly with their respective APIs from your machine — Engram does not proxy credentials.
Audit trail
audit_writer process is the sole writer — application code appends via a Unix socket, preventing any process from backdating or modifying historical records.All Agents
Calendar Agent
Available⏱ Every 15 minReads your Engram memories for explicit scheduling intent (e.g. 'meet Alex tomorrow at 3pm') and creates Google Calendar events. Does not read back from the calendar.
GOOGLE_CALENDAR_CREDENTIALSEmail Agent
Available⏱ Every 60 minReads unread Gmail threads, drafts context-aware replies using Llama 3.1, and saves them to Drafts. Never sends automatically — always human-in-the-loop.
GMAIL_CREDENTIALSTerminal Genie
Available⏱ On demandShell function that intercepts failed commands and suggests a corrected version from Llama 3.1. Invoked via the `??` alias in Zsh or Bash.
No API keys requiredGit Automator
Available⏱ On demandThree git aliases: `g-commit` generates semantic commit messages from diffs, `g-pr` writes Markdown PR descriptions, `g-check` scans staged files for leaked secrets.
No API keys requiredDocSpider
Available⏱ On demandBFS web crawler that ingests external documentation sites into the local Qdrant `doc_knowledge` collection. Point it at any URL and it builds an offline RAG knowledge base.
No API keys requiredDaily Briefing
Coming Soon⏱ Configurable (default 8 AM)Will synthesise high-priority Linear/Jira tasks, today's calendar events, and recent memories into a structured morning digest inside the dashboard.
LINEAR_API_KEYJIRA_BASE_URLJIRA_EMAILJIRA_API_TOKENJarvis (Voice Mode)
Available⏱ On demandRecords 5-second audio clips, transcribes locally via OpenAI Whisper (no cloud API), sends to /chat, and reads the reply aloud via macOS `say`. Press Enter to speak.
No API keys requiredAdding a Custom Agent
Register a new scheduled agent by adding a job to core/scheduler.py. The function runs in the FastAPI process — it has direct access to the memory client and Ollama without any additional setup.
# core/scheduler.py
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from core.memory import MemoryClient
scheduler = AsyncIOScheduler()
@scheduler.scheduled_job("interval", minutes=30, id="my_custom_agent")
async def my_custom_agent():
client = MemoryClient()
memories = await client.search("relevant context", limit=5)
# ... call Ollama, write result back to memory ...
await client.store({"type": "agent_result", "content": result})Opt-in only