Derious Vaughn

Production AI agents · Evals · RAG

Agents that triage, draft, and gate before a human sends.

Production agents with eval gates, grounded retrieval, and event-driven reliability — with demos you can run below.

Case studies

Resumé

Derious Vaughn

310-350-3717 · [email protected]

linkedin.com/in/deriousvaughn · github.com/theHaruspex

Builds production AI agents and tool integrations: evals, guardrails, and ops-grade delivery. Designs agent workflows in Claude, ChatGPT, and Cursor; Python + orchestration for production. Strong with APIs, webhooks, and stakeholder-facing ops.

Portrait of Derious Vaughn

Skills

AI Agents Python Evals Guardrails/Safety RAG LangGraph Reliability/Ops APIs & Webhooks Claude
MCP Prompt Engineering Notion Workflow Automation Documentation AWS SQL Docker CI/CD Linux GitHub Actions

Experience

AI Agents & Ops · Automations and Operations Specialist

04/2025 – present

K2D Law

  • Delivered AI-assisted automations from discovery through production: scoped needs with operations stakeholders, built solutions in Claude and Cursor, and documented runbooks teammates could run without me in the loop.
  • Shipped agent tooling and production delivery for an IT deployment pipeline and helpdesk intake—triage, assignment rollups, requester visibility—with stakeholder ops and runbooks teammates could run without me; Notion as the ops substrate, not the headline.
  • Integrated systems with event-driven webhooks and REST APIs so workflow changes reached reporting in near real time instead of waiting on a lagging scheduled sync.
  • Used MCP-based schema discovery to ground automation design in live Notion schema, and maintained living architecture docs and sandbox prompts for a multi-database workspace redesign.
  • Partnered with engineering, IT, and leadership to find bottlenecks, capture decisions, and simplify a multi-database operations workspace.

Integrations & Ops · Affiliate Specialist

05/2023 – 04/2025

Shades of Color · Carson, CA

  • Automated e-commerce and accounting integrations across WooCommerce, Amazon, and QuickBooks APIs to cut manual steps and improve reporting accuracy.
  • Debugged production integration failures when external systems changed and explained fixes in plain language to business owners.
  • Built ingestion and reporting workflows from messy sales and advertising data so leadership could rely on recurring operational outputs.

Independent engineering projects

2024 – present

Personal projects

  • Built an agent runtime/platform: registry of MCP tool servers, sync, and health checks across ~21 integrations / ~29 agents (private infrastructure).
  • Built AI-assisted outreach and scraping tools for personalized email generation, contact extraction, demographic enrichment, and structured reporting (AIAgentOutreach, CASchoolScraper).
  • Built an idempotent AWS Lambda ETL with Docker and GitHub Actions for batched ingestion (reddit-to-supabase-etl), plus a Python SQL Server hydration toolkit for local and CSV-backed loading (hydrate-sql-server).
  • Built a local MCP server (macos-mcp) that exposes Mail, Calendar, Reminders, Notes, Messages, and Contacts to agent clients, with draft-only email so nothing sends without review.
  • Built a daily environmental justice ELT joining EPA air quality with Census income data for LA County (la-air-equity-elt), plus a cite-first LA City Council research assistant (la-council).

Education

Azusa Pacific University · Azusa, CA
Communication Studies, Honors Humanities

Contact

Get in touch

Reach out by email, phone, or LinkedIn — whichever is easiest.

Phone
310-350-3717

Case study 01 · LangGraph · Agent evals

Triage the Inbox
before a human opens it.

Shades of Color sales and ops mail used to eat a human's morning. The agent plans, calls tools, drafts, then hits a hard quality gate.

LangGraph Agent evals Guardrails MCP
Demo · functions/api/triage.js Production system is private

Interactive demo

Run triage

Paste or edit a sample inbound message. The agent plans, calls tools, drafts a reply, then hits a pass / fail gate with latency, tokens, and cost on the strip. High-blast actions stay human-gated. Runtime from /api/status · real workflow shape.

01

Inbound

Pick a sample email or edit from / subject / body

Sample routes

02

Workflow

LangGraph tool steps as they run

Run triage — the narrated tool trace fills here.

03

Output

Gate verdict, cost strip, and draft reply

Idle
Latency
-
Tokens
-
Est. $
-
vs human
30–60m

Final draft and gate verdict show here when the run finishes.

What was going wrong

At Shades of Color, sales and ops mail mixed affiliate payouts, wholesale asks, and promo noise in one inbox. A human burned 30–60 minutes gathering context, drafting a reply, and guessing blast radius, with no structured quality gate before something looked ready to send.

What I shipped

A LangGraph-shaped pipeline (plan → retrieve → tool calls → draft → eval) with MCP-style tools, live latency/token/$ strips, and a hard pass/fail gate. High-blast actions stay human-gated. The point is guardrails, not unsupervised send.

Same shape as the affiliate-support MAS work: classify the thread, ground the draft, gate it, then a human still owns send.

  • ProblemSales/ops inbox with no quality gate
  • ConstraintNo silent send; high-blast paths stay human-gated
  • StackLangGraph-shaped agent · MCP tools · eval scorecard · cost/latency strip
  • Result~2 min demo path · ~$0.10 · PASS/SKIP explicit · vs 30–60m human

Case study 02 · Reliability · Verified integrations

The dashboard lied
for 47 minutes.

Event-driven reliability: verified webhooks so reporting matches live work — HMAC, Secrets Manager, structured logs.

AWS Lambda Verified webhooks HMAC Notion (substrate)

Interactive demo

Same launch. Two boards.

You’re looking at the stakeholder task board for a client launch. Left is before: the board only refreshes on a two-hour scheduled sync, so leadership steers from stale status. Right is after webhooks — the board updates when the work does. Play or scrub the day and watch who they ping when the board is wrong vs right.

01

Timeline

Play, pause, or scrub the workday

9:00 AM
9:00 5:00
02

Compare

Same launch checklist — stale sync on the left, live webhooks on the right

Before Scheduled sync · every 2 hours
Reporting board

Scheduled sync

Client launch checklist

Assignee · Maya Chen

Intake

Last sync · 47 min ago

launch-status
After Webhooks · live updates
Reporting board live

Webhook events

Client launch checklist

Assignee · Maya Chen

Intake

Last sync · 47 min ago

launch-status

What was going wrong

Ops moved work in Notion all day. The leadership reporting board only refreshed on a two-hour scheduled sync, so Maya still looked "In progress" for ~47 minutes after she had already moved on. Leadership pinged the wrong person because the board was late.

What I shipped

A verified Notion webhook router (HMAC, Secrets Manager, structured logs) so status changes hit reporting in seconds. The board matches the work, not the last batch job.

Event-driven ops with verified webhooks, not a scheduled poll pretending to be live.

  • ProblemBoard called people "stuck" for ~47 min after they had moved
  • ConstraintVerified webhooks only; no unauthenticated writes
  • StackLambda router · HMAC · Secrets Manager · structured logs
  • ResultNear-real-time reporting vs lagging scheduled sync

Case study 03 · Cite-first RAG · Workers AI

Cite the shelf,
or don’t answer.

EduArts needed district and workshop contract language in plain English. The agent only speaks from what it can retrieve and cite.

Cite-only RAG Workers AI Vectorize (when bound)
Demo · functions/api/corpus/ Production system is private

Interactive demo

retrieve mode · keyword_fallback (Vectorize when bound)

Watch the agent retrieve before it advises

Ask what EduArts would ask before signing school or district paper. The agent runs a few real searches against the contracts shelf, shows the hits, then writes a cite-only answer from those hits alone — or says the shelf came up empty and asks for a sharper question. Real retrieval; answer synthesis is live when the key is set, otherwise built from the retrieved hits on-device.

01

Ask

Pick a demo question or type your own

Sample questions

02

Trace

Retrieve → cite steps as they run

Agent · retrieve → cite idle

Pick a question above. Searches and decisions stream here.

03

Shelf hits

Chunks retrieved from the teaching shelf

04

Answer

Cite-only response — or an honest empty shelf

Status: idle. Ask a question to retrieve and answer.

What was going wrong

EduArts PD & Consulting is a small K–12 arts PD vendor still in early diligence: figure out district and workshop contract language before spending counsel time. One path is reading dense law books as a layperson. The other is asking a general chatbot and hoping it isn’t hallucinating. Neither is good enough when the counterparty is a school district.

What I shipped

A subject-scoped teaching shelf the agent queries before it advises. Embed with bge-base-en-v1.5 (768-d), retrieve top-k ≈ 5 clause snippets, and constrain the answer to cite-only hits. The demo reports its live retrieve mode from /api/status. Empty retrieval → honest stop: no invented clause — try a sharper question or keep reading the desk references. This demo is that retrieval step.

Grounded retrieval before the agent advises. Public packaging of a pattern used on private EduArts infrastructure; not a signed client deliverable.

  • ForEduArts · district / workshop agreements
  • ConstraintRetrieve → cite only; empty shelf → no answer
  • Stack~58 teaching chunks · Workers AI embeddings · Vectorize when bound, else keyword fallback
  • ResultPlain-English answers from the shelf, or an honest empty set