Jason Ki|AI Studio
Open by design

The patterns underneath the apps.

The apps are very different — trading, support, voice, BI, this site. The agents inside them aren’t. They follow the same contract: trigger, input, execution, eval, ops, output. That standardization is the studio. The app code stays private; the patterns don’t.

What follows is the working set — nine patterns that show up across every product I build. Some of them are running right here on this page.

9 in use7 apps5 live on jasonki.com

Running on this site

The site you’re reading runs the patterns.

Every demo on this site — and the site itself — sits on top of the same standardized layer. The chat agent, the trace logger, the moderation queue, the asset generator: same contract you’d get on retainer. Below, each pattern is named where it shows up, including the parts running on jasonki.com.

  • RouterSage qualifies inbound on /chat and routes to the right service tier
  • RAG AnswererSage answers visitor questions from the studio's own docs + service tiers
  • Trace LoggerCaptures every Sage turn into chat_messages with token + latency metadata
  • GatekeeperEvery blog comment lands as pending until manually approved via PATCH /api/comments/{id}
  • Asset Generatorgen:cover and gen:hero produce every cover image and the hero reel
In use
01

Source Connector

Pull anything in. Normalize. Keep current.

The pattern every app starts with — connect to a third-party data source, pull schemas and rows, normalize into the studio's canonical shape, and keep it incrementally synced. The connector contract is the same whether the source is Shopify, Notion, Gmail, or a brokerage feed.

The contract
Trigger
Schedule (15-min default) + manual backfill
Input
OAuth credentials + last-synced cursor
Execution
Provider client → pagination loop → schema normalizer
Eval
Row-count parity vs. provider, schema-drift assertions
Ops
Per-source error budget, dead-letter queue, on-call alert on drift
Output
Canonical rows in Postgres, indexed for retrieval
Where it runs
  • ClearfraimShopify, Stripe, Meta Ads, Notion, Sheets
  • AtlasNotion, Drive, Slack, Gmail
  • IMPGInstagram, TikTok, X
dataingestioninfra
In use
02

Router

Classify the inbound. Send it to the right place.

A small, fast classifier that reads anything coming in — a question, an email, a call transcript, a ticket — and decides which downstream agent or queue should handle it. Cheap, evaluated, and the same pattern across very different surfaces.

The contract
Trigger
Inbound message, email, call, or ticket
Input
Raw text + metadata (channel, sender, history)
Execution
Small-model classifier → label set → confidence score
Eval
Frozen labeled set, F1 per class, abstain rate
Ops
Confidence threshold gates routing; below threshold falls back to human
Output
Label + confidence + suggested next agent
Where it runs
  • ClearfraimRoutes business questions to the right answerer
  • TriageRoutes inbound to the right human queue
  • ConciergeDecides answer-now vs. open-ticket vs. escalate
  • SajaRoutes calls to the right voice agent or human
  • jasonki.comOn this siteSage qualifies inbound on /chat and routes to the right service tier
routingclassification
In use
03

RAG Answerer

Answer from your data. Cite the source. Refuse when unsure.

The retrieval-grounded agent that powers every answering surface — BI questions, support tickets, knowledge search. Always returns a citation. Always allowed to say it doesn't know. Same harness, same eval shape, same refusal threshold across apps.

The contract
Trigger
User question, ticket, or upstream agent call
Input
Question + retrieval scope (which sources are in-bounds)
Execution
Embed → retrieve → rerank → generate with citations
Eval
Faithfulness, citation correctness, refusal rate on out-of-scope
Ops
Refusal floor enforced; low-confidence answers go to a human
Output
Answer + citations + confidence + sources consulted
Where it runs
  • ClearfraimAnswers business questions from connected sources
  • ConciergeAnswers customer support questions from docs + tickets
  • AtlasAnswers personal-knowledge questions across your stack
  • jasonki.comOn this siteSage answers visitor questions from the studio's own docs + service tiers
ragretrievalanswering
In use
04

Trace Logger

Every decision an agent makes is auditable.

Agents are opaque by default. The trace logger isn't — it captures the reasoning chain, the tools called, the documents retrieved, and the model output for every decision. Same schema across every agent in the studio so the eval and drift surfaces can read from one place.

The contract
Trigger
Wraps every agent call automatically
Input
Agent invocation context
Execution
Captures prompt, retrieved context, tool calls, output, tokens, latency
Eval
Trace completeness assertion in CI
Ops
Hot store for 30 days, cold store for 1 year, redaction for PII
Output
Structured trace row queryable by run_id, agent, app, tenant
Where it runs
  • 67QuantReasoning trail for every trading signal
  • ClearfraimSource-attribution trail for every BI answer
  • ConciergeDecision trail for routing + escalation
  • jasonki.comOn this siteCaptures every Sage turn into chat_messages with token + latency metadata
observabilityevals
In use
05

Drift Watcher

Catch the moment an agent stops performing.

Agents drift. Models update. Data changes. The drift watcher runs the frozen eval set on a schedule, compares against baseline, and pages when any metric crosses its band. This is what makes the retainer real — it's not human-watching, it's an agent watching the other agents.

The contract
Trigger
Schedule (hourly) + on every model or prompt change
Input
Frozen eval set + current production agent
Execution
Replay eval set → score → compare to baseline bands
Eval
Self-test: does the watcher catch a known regression?
Ops
Page on amber, halt on red, write incident with the failing examples
Output
Drift report + diff vs. baseline + suggested rollback target
Where it runs
  • ClearfraimWatches RAG faithfulness + answer latency
  • 67QuantWatches signal calibration + execution slip
  • SajaWatches transcription accuracy + handoff rate
evalsopsmonitoring
In use
06

Gatekeeper

Human-in-the-loop for the calls that matter.

Not every decision should be automatic. The gatekeeper is the standardized escape hatch — a queue, a review surface, and a feedback loop that turns the human's call into training signal. Same UI, same SLAs, same retraining cadence wherever it shows up.

The contract
Trigger
Confidence below threshold or category flagged for review
Input
Pending decision + agent's reasoning + supporting context
Execution
Reviewer accepts, edits, or rejects; edits become training data
Eval
Reviewer-agreement rate, time-to-decision, escalation accuracy
Ops
On-call rotation, SLA per channel, weekly retrain on edits
Output
Final decision + reviewer rationale + training pair
Where it runs
  • TriageReviews high-stakes routing before it sends
  • ConciergeReviews ambiguous answers before they ship
  • SajaApproves transfers and refund-class calls
  • jasonki.comOn this siteEvery blog comment lands as pending until manually approved via PATCH /api/comments/{id}
hitlopstraining
In use
07

Scheduler

Agents run on triggers, not vibes.

The orchestration layer that fires agents on cron, webhook, or upstream completion. Standardized retries, jitter, dead-letter routing, and idempotency keys — so a missed run is recoverable and a duplicate run is safe.

The contract
Trigger
Cron, webhook, or upstream event
Input
Job spec + idempotency key + payload
Execution
Queue → worker → retry-with-backoff → dead-letter on exhaustion
Eval
Schedule adherence, dead-letter rate, duplicate-run rate
Ops
Dashboard per job, alarm on dead-letter spike
Output
Run record + status + downstream agent invocation
Where it runs
  • 67QuantFires signal generation on market-data ticks
  • IMPGFires content drafting + posting on schedule
  • TriageFires follow-up nudges on stale threads
orchestrationinfra
In use
08

Asset Generator

Brand-coherent visuals on demand, from a single frozen prompt.

A small CLI agent that composes brand prompts and fans out to image and video models. Every demo cover, post cover, and hero reel on this site is generated through it — the prompt prefix is frozen so the look stays coherent across regenerations.

The contract
Trigger
CLI invocation or scheduled brand sweep
Input
Entity (demo / post / service) + frozen brand prompt + motif
Execution
Compose prompt → call Gemini Flash Image or Veo → write to public/ → wire metadata
Eval
Brand-coherence review by the brand-assets agent + visual diff against baseline
Ops
Costs logged per call, regeneration is idempotent on entity slug
Output
Image or video file + auto-wired entry in demos.ts or post frontmatter
Where it runs
  • jasonki.comOn this sitegen:cover and gen:hero produce every cover image and the hero reel
  • IMPGGenerates post imagery for creator brands on schedule
assetsbrandpipeline
In use
09

Eval Runner

Every agent ships with a test set it has to pass.

The harness that runs an agent's frozen examples on every change — prompt edit, model swap, tool addition. Pass-fail gates the deploy. The same runner shape works for a routing classifier, a RAG answerer, or a voice agent transcript.

The contract
Trigger
Pre-deploy hook + on-demand from CLI
Input
Agent under test + frozen example set + scoring rubric
Execution
Replay examples → score → diff vs. baseline → pass/fail report
Eval
Self-test: does the runner correctly fail a known-bad change?
Ops
Block deploy on fail, attach report to PR, archive in eval store
Output
Pass/fail + per-example scores + diff report
Where it runs
  • ClearfraimGates RAG answerer + router deploys
  • 67QuantGates strategy + signal-generator deploys
  • ConciergeGates answerer + escalation deploys
evalsci
See it in product form

The same patterns,
in 7 apps.

Every demo on this site is a different surface for the same underlying machinery. Look at the apps and you’ll see the patterns repeating.

Bring a question

Want one of these
in your stack?

The Automation Studio mode is exactly this — the studio builds the pattern into your product, then keeps it tuned.