The composition axes

Every agent here is a composition — these are the parts

Describe an agent in plain language and Calafia assembles it from the axes below. Each one is swappable per agent. This page renders from the live registries, so what it lists is exactly what this deployment can do — including what it can't yet.

Memory

How an agent recalls what it learned. Choose per agent; switching never loses data.

Firestore (keyword)Ranks memories by word overlap with the current message. No external calls; always available.available · default
Firestore (semantic)Ranks memories by embedding similarity to the current message (Gemini text-embedding-004). Falls back to keyword ranking if embeddings are unavailable.available
Firestore (extracted facts)Distills each save into atomic facts with a fast model — mem0-style extraction and same-entity consolidation, on this platform's own store — then ranks semantically at recall. One extra model call per save, on the order of a tenth of a cent; if extraction fails the raw note is stored unchanged, flagged, never lost.available
Mem0Managed memory service (mem0.ai): extraction and consolidation on their side, semantic search at recall. Enabled by adding your Mem0 API key.not configured

Models

Which model runs the agent — chosen per agent, priced per run.

geminiGemini 2.5 Flash · Gemini 2.5 Proavailable
openaiGPT-4o · GPT-4o Miniavailable
anthropicClaude Sonnet 4.5 · Claude Haiku 4.5available

Frameworks

The harness an agent exports to, or runs on.

Claude Agent SDKExport a runnable TypeScript agent project.export
LangGraphExport a Python project — or run hosted on the Calafia runtime.export + run
CrewAIExport a Python project — or run hosted on the Calafia runtime.export + run

Data sources

What an agent can verify first-hand. Verified, structured reads — never guesses.

scout.feedWatch ANY public feed for new items: RSS/Atom/JSON feeds, news sites, blogs, subreddits (use the .json URL), YouTube channel feeds, podcasts, GitHub releases (the releases.atom URL), product changelogs, status pages, job-board RSS. Returns recent items with title, link, date.available
scout.campsitesCheck campsite availability (incl. cancellations/openings) for a US campground by name. Covers recreation.gov (national parks, USFS, BLM, Army Corps) and ReserveCalifornia (California State Parks — e.g. San Elijo, Carlsbad). Returns which sites are Available for the requested month. No login needed.available
scout.permitsCheck availability/cancellations for hard-to-get US outdoor permits on recreation.gov by name — Mt Whitney, Half Dome, the Enchantments, Angels Landing, Coyote Buttes ("The Wave"), Paria Canyon, wilderness permits. Reports which dates have remaining quota, per division (trailhead/entry point/overnight vs day). Alert-only; no login. Havasupai is NOT on recreation.gov.available
scout.recallsCheck official US product recalls/safety: food & drugs (openFDA) and vehicles (NHTSA). Use for 'alert me to recalls for X'. Returns recent matching recalls with dates and reason.available
scout.weatherAlertsActive US National Weather Service alerts (warnings/watches/advisories) for a state or area code. Use for 'alert me to severe weather in X'. Official NWS data.available
scout.researchNew academic preprints on arXiv matching a topic/author/category. Returns recent papers with title, authors, link, and the ABSTRACT — enough to summarize without fetching each PDF. Use for 'watch arXiv for new papers on X and summarize them'.available
scout.jobsNew job postings from a company's PUBLIC applicant-tracking site. Supports Greenhouse, Lever, Ashby, SmartRecruiters (give the company's board slug) and Workday (give the full careers-site URL). Covers most startup + enterprise career pages without login. Use for 'watch <company> for new <role> openings'.available
scout.xPostsRead recent posts from a specific public X/Twitter account to use as a SIGNAL inside a larger task — e.g. an agent answering 'what's happening in San Diego this week' checks a few local-events accounts to surface things generic web search misses. Call it across the handful of knowledgeable accounts relevant to the task, then synthesize with your other sources; do NOT just relay one account's posts as the answer. Single public account per call (no search/hashtags/protected). Best-effort; X may change this surface.available
scout.sportsUpcoming games or latest results for a sports team. Use for 'tell me when <team> plays next' or 'did <team> win'. Public TheSportsDB data.available
scout.marketsLatest stock/ETF/crypto quote(s) for one or more symbols (e.g. NVDA, SPY, BTC-USD): price, prior close, and % change. Use for price watches and market briefings. Public data (Yahoo, Stooq fallback); ~15-min delayed.available
scout.airportStatusCurrent FAA delay/closure status and weather for a US airport by 3-letter code (e.g. SFO, JFK). Use for 'alert me if <airport> has delays'.available
scout.federalRegisterNew US Federal Register documents (rules, proposed rules, notices) matching a term. Use for regulatory/policy watches. Official government data.available
scout.polymarketPrediction-market signal from Polymarket (public, read-only — never places bets). mode='trending': the markets the money is watching now (optionally filtered by a topic keyword) — an excellent selector for 'what consequential, uncertain things should I follow'. mode='topic': a specific subject's current crowd-implied probability and 24h move. Pair with web/news scouts to report what actually moved the odds.available
scout.conditionsOutdoor conditions forecast for any place — temperature, rain chance, wind, UV, cloud cover, sunshine, sunrise/sunset, and (marine:true) wave height/period. The "is it a good day for X" source: beach, surf, stargazing, running, skiing, gardening, golf, sunset-watching. Returns up to 7 days of normalized daily signals; the agent judges what is "good" for its goal.available
scout.issUpcoming VISIBLE International Space Station passes for a place — when to step outside and look up. Returns each pass: local start/peak/end time, max elevation, the path across the sky (e.g. WNW→SE), duration, and a viewability rating (prime = bright & high; faint = dark but ISS likely shadowed; daylight = not visible). Public data (g7vrd + Open-Meteo), no key.available
scout.apiFetch a PUBLIC, read-only JSON or CSV endpoint and extract items — the generic data source for anything without a dedicated scout. Use when the user names a specific public API/endpoint, or a known public API covers the data and no other scout fits. GET only, no auth/keys, SSRF-protected. Prefer over web search when a real public API exists. MARKET / COMMODITY / METALS / FX / EQUITY / INDEX / RATES / INFLATION / any economic time-series — pick by freshness: (1) a DAILY spot/close (most commodities, FX, indices, equities, ETFs) → keyless Stooq snapshot, url `https://stooq.com/q/l/?s=<sym1>+<sym2>&f=sd2t2ohlcv&h&e=csv` format `csv` (one call, today's OHLC for many symbols; copper `hg.f`, gold `gc.f`, silver `si.f`, WTI `cl.f`, natgas `ng.f`, zinc `zi.f`, nickel `ni.f`, FX as `eurusd`, index as `^spx`, US equity/ETF as `aapl.us`; `N/D` = not carried, use (2)); (2) a series Stooq lacks daily — interest rates, inflation, unemployment, macro indices, LME lead/aluminium → keyless FRED CSV, url `https://fred.stlouisfed.org/graph/fredgraph.csv?id=<SERIES_ID>` format `csv` (rows newest-first; MONTHLY, lags ~1-2mo). FRED ids: lead `PLEADUSDM`, copper `PCOPPUSDM`, aluminum `PALUMUSDM`, WTI oil `DCOILWTICO`, natural gas `DHHNGSP`, 10y treasury `DGS10`, CPI `CPIAUCSL`. Never present a monthly/proxy figure as today's — say what it is. EFFICIENCY: narrow server-side via `params`, set `fields` to only what you need, keep `maxItems` small (5–15), use `path` to the results array. Pulling the full unfiltered payload is slow and costly. TIMEZONE: when the API returns ISO 8601 timestamps (launch times, event dates, anything ending in `Z` or with a `+HH:MM` offset), ALWAYS set `timezone` to the user's local IANA timezone (e.g. `America/Los_Angeles`). Every timestamp is then replaced with an object `{raw, local, weekday, date_local, time_local, tz}` — quote the `local` and `weekday` fields verbatim. Do NOT derive weekday or local time yourself; LLMs get it wrong (off-by-one days, missed UTC offsets, stale math when other fields update). The structured fields are the source of truth.available
scout.browseRead a PUBLIC web page that loads its data via JavaScript (an availability calendar, a SPA dashboard, a JS-rendered listing) when no dedicated scout fits. Renders the page in a real browser and returns the data the page itself fetched plus its visible text. No login. Pass the page URL; optionally hint at the data API host/path to capture.available
scout.ticketsLive event tickets via Ticketmaster — concerts, sports and theatre. Search by artist/team/event keyword and/or city; returns upcoming events with date, venue, price range, on-sale status and a direct Ticketmaster purchase link. Use it to find tickets or to watch for an artist/team announcing a show. No login needed.not configured
scout.kalshiRegulated prediction markets via Kalshi (CFTC-regulated, US). Search/filter markets by keyword, series or event; returns each market with title, YES/NO ask in cents, 24h volume, close date and a kalshi.com market link. Read-only, no login. Complements scout.polymarket (crypto-native) — use both to compare prices on the same event across platforms.available
scout.pagewatchWatch ANY public web page for changes — a competitor homepage, a pricing page, a careers page, docs, terms, a status page without a feed. Fetches the page (honoring robots.txt), strips scripts/navigation/chrome, and returns the readable content as numbered stable blocks, each with a content hash, plus an overall blocksHash. Pass prevBlocksHash (the block-hash list you stored last run, e.g. via log.record) to get block-level diff hints: the result then lists ONLY blocks that actually changed, so you report real changes, never guessed ones. LIMITS — state them honestly when relevant: public pages only (no logins, no paywalls); static HTML only (content rendered purely by JavaScript is invisible — scout.browse covers that); pages behind anti-bot challenges are reported as unreadable, never summarized.available
scout.priceExtract the price(s) from a PUBLIC product page — the source for 'email me when the price drops' watches. Prefers schema.org JSON-LD Product/Offer structured data (most retail product pages ship it); when a page has none, falls back to scanning the visible text for currency amounts and returns LABELED CANDIDATES without guessing which one is 'the' price — disambiguate once when setting up the watch (productName narrows to a specific product) and pin the choice. LIMITS — state them honestly when relevant: public pages only (no logins); static HTML only (prices rendered purely by JavaScript are invisible — scout.browse covers that); honors robots.txt; anti-bot/challenge pages are reported as blocked, never parsed.available

Connectors

Your accounts, connected with your own credentials.

salesforcegithubslackjiragooglenotionlinearconfluencehubspotspotifytodoistmicrosoftdiscordstravaredditairtabletrellosmslinkedinzoomservicenowtwittershopifymetastripetelegramwhatsappdatabasetaniumcomputerbrowser

Each connects with your own account (OAuth or per-user key) — an agent only ever holds the scopes you granted.

Evaluation

How an agent is judged — declared per agent, run at build time, and the fixed objective every experiment sweep optimizes.

Goal judge (LLM)An LLM judges the deliverable against the agent's goal — strict on counts, format, verifiability and emptiness.available · default
Deterministic checksExact assertions on the deliverable — required phrases, minimum row counts, real URLs. No LLM, fully reproducible.available
Rubric judge (LLM)Scores each declared criterion separately, 0..1, and reports the weighted sum — a grading sheet instead of one holistic verdict.available

Planning

How the agent is told to approach the goal. A prompt scaffold, chosen per agent — not a framework side effect.

ReAct (reason + act)Reason and act interleaved: the agent thinks, calls a tool, reads the result and re-plans each round. The loop's native behaviour — no extra prompting.available · default
Plan then executeThe agent writes a numbered, tool-aware plan first and then works it step by step in the same run. A prompt scaffold — no extra model round.available
Reflection (draft, self-check, revise once)The agent drafts the deliverable, re-reads it against the goal and revises once before delivering. A prompt scaffold run inside the loop's existing rounds — roughly one extra model round per run, no separate reviewer call.available
Decompose (sub-tasks in one run)Splits the goal into named sub-tasks, works each to completion, then integrates the parts — all inside the same run. A prompt scaffold: no sub-agents are spawned; true delegation is deferred.available

Retrieval

What the agent pulls into context beyond its memories.

No retrievalThe run sees only its goal, its tools and its memories. The default — nothing extra is pulled into context.available · default
Run historyThe agent's own recent runs, ranked against today's goal by word overlap — so it builds on what it already found instead of starting cold.available
DocumentsReference documents added to the agent, chunked and ranked against the run's goal — by embedding similarity when embeddings are configured, by keyword overlap otherwise. The best chunks are injected with their source titles.available

State

What the agent carries from its previous run — a working note to its next self, not curated memory.

StatelessEvery run starts fresh. The default — nothing is carried from the previous run.available · default
Carry forwardThe agent leaves itself one short memo at the end of a run and reads it at the start of the next — so a scheduled agent picks up where it left off.available

Guardrails

The safety posture an agent declares. Only what the runtime really enforces is listed here.

StandardWhat every agent here already runs with: metered tool calls and enforced budget caps. The default.available · default
TracedStandard, plus full trace capture: this agent's governed calls record redacted request and response payloads for later inspection.available

Every posture is enforced by the runtime. Per-call checking, approval and policy live in Agentic Control Plane.

Delivery

How findings reach you.

EmailThe agent's findings, only when there's something to say.available
Daily digestOne email rolling up every agent's day.available
SlackFindings into a channel via the Slack connector.available

Test bench

Compare compositions on one task, judged by one eval — built, with its limits stated.

Test bench (compare mode)Same task, N compositions, one fixed eval — the experiment runner behind each agent's Tuning page. A naive full grid under a hard budget cap, not a search service.live

Build an agent →