Bernat Sampera
← Essays

ContextAgora.com

4 min read · Apr 29, 2026

A context layer that gives AI agents the operational context of your product: docs, integration keys, and live data — without leaking any of it across tasks.

ContextAgora.com

A context layer that gives AI agents the operational context of your product: docs, integration keys, and live data — without leaking any of it across tasks.

Role: Founder & lead developer

Timeline: Ongoing

Stack: Python (FastAPI), React (Vite, TanStack), SQLite, Docker, Varlock + Infisical, Claude Code

The problem

Generic AI agents start every chat amnesic about your product. You re-paste schemas, runbooks, and API quirks — and even then, exports go stale, integration keys leak across tasks, and there's no way to tell whether the changes you made to "the prompt" actually helped.

ContextAgora is a Docker container you run on your own infra (or we host). Modules live in your GitHub repo. The agent loads only what each task needs. Secrets resolve per-command via Varlock + Infisical and disappear when the command exits. A benchmark layer measures whether your context changes actually moved the needle.

How it's built

Three-layer file model

Files live in three tiers:

  1. context/ — what the agent sees, populated by symlinks
  2. modules-repo/ — local git working copy
  3. Remote GitHub — durable source of truth

Loading a module is one symlink. Edits the agent makes inside context/ flow back to the local clone and surface as dirty git state in the sync UI. No copies. No merge logic. Pulling from remote is a hard reset — push first if you care about local changes.

code
Remote GitHub              modules-repo/                   context/
 (source of truth)          (local working copy)          (agent view)
       |                           |                            |
       |--------- pull ------------|---------- symlink ---------|
       |                           |
       |<------- push ------------|

Secrets the agent uses but never reads

module.yaml declares which secrets a module needs by name only. At runtime, varlock run -- resolves values from Infisical, injects them into one command's environment, and they're gone on exit. Stdout and stderr are redacted. The agent uses the secret; it can't cat it. There's no .env file on disk to leak, no plaintext in long-lived process state, and printenv from inside the agent won't expose anything between commands.

code
 module.yaml
   secrets:
 [name only]
      |
      v
 varlock run --
 resolve from
   Infisical
      |
      v
  command env
   [INJECTED]
      |
      v
 command executes
      |
      v
 [GONE on exit]

One file per module: module.yaml

A module is a folder with info.md, optional docs/*.md, and a module.yaml declaring secrets: and dependencies:. Tasks are modules with kind: task — same git repo, same editor, same symlink workflow, different scaffold. One storage model, one sync path.

code
my-module/
├── module.yaml   <-- kind, secrets, dependencies
├── info.md       <-- module docs
└── docs/
    └── *.md      <-- optional extra docs

Benchmarks that compare context, not models

A benchmark task is a YAML file with a prompt and a judge prompt. Running it spawns a headless claude -p against the current workspace, parses the session transcript into a phase-by-phase timing + token table, then asks a second claude -p whether the output satisfied the goal. Each run is tagged with a sha256 of the context/ tree, so runs against the same context are recognizable.

code
 benchmark.yaml
    |
    |--> prompt ---> headless claude ---> transcript
    |                                      |
    |                                      v
    |--> judge prompt <------------ parse (timing + tokens)
              |
              v
          pass / fail

Pluggable LLM backend

LLM_API_KEY, LLM_BASE_URL, and LLM_MODEL are mapped at chat-spawn time onto the Claude CLI's env vars. Deployers can route the agent through OpenRouter, LiteLLM, or an internal proxy without forking the backend.

code
LLM_API_KEY    |
LLM_BASE_URL --+--> chat spawn --> claude CLI env
LLM_MODEL      |

Live in production

  • MAAT — SaaS for martial arts gyms. 90% faster support resolution; the agent reaches into the production DB on its own to answer questions ops used to escalate.
  • Soundmurai — live music marketplace. The agent pulls live data from their DB to draft posts for insights.soundmurai.com.

See ContextAgora.com →

· · ·