San Francisco Bay Area

Hi, I'm Dan Tahir.

Full Stack Agentic AI Engineer

dan@bayarea:~$

I design and ship production agentic AI systems end to end — multi-agent and multitool looping architectures, RAG over structured and unstructured context, cloud-native AWS pipelines, and the React/Next.js frontends that put them in front of people. I wrote all of the agent code for LoomIQ at DAVTEQ, and I built Klenny Code, KlennyBrain and AnyChar myself, from scratch.

Portrait of Dan Tahir
LoomIQ Klenny Code KlennyBrain AnyChar
“I build AI systems that solve real problems.”
TypeScriptPythonClaude on Amazon BedrockAgentic tool loops RAG & vector searchNext.jsReactNode.jsAWS Lambda Step FunctionsDynamoDBAthenaPineconeLangGraph OpenRouterElectronHydraDBPostgreSQLTerraformServer-Sent Events
2+
Years shipping production AI systems
4
Agentic products architected & built
30K+
Lines of TypeScript in Klenny Code's agent
2nd
Place, TechEquity AI company brain hackathon
00About

I build AI systems that solve real problems.

I'm a Full Stack Agentic AI Engineer in the San Francisco Bay Area with 2+ years building production-grade AI — from multi-agent architectures to multitool looping agents to cloud-native AWS pipelines and React/Next.js frontends. At DAVTEQ I've delivered multiple revenue-generating products: an AI invoice processor, a data analysis agent and a building-management report generator. I'm AI-native, experienced with Cursor and Claude Code, and I wrote my own open-source coding harness that I now use to accelerate every phase of development.

July 2024 — Present

DAVTEQ, Inc.

  • LoomIQ — architected and wrote all of the agent code: the original LangGraph multi-agent v1/v2, the v3 multitool looping agent (higher data grounding and answer completeness at ½ the cost of v2), its data-verification and memory tools, and a full Python backend rewrite with feature parity.
  • AI-powered invoice processing — delivered end-to-end automation from development to first paying customer: PDFs in any format → Claude Sonnet + Bedrock Data Automation → structured JSON → Postgres, with a persistent sequential job queue and automatic error correction.
  • Building-management dataset QC — an AI agent system that generates 60-page quality-assessment reports across 17 configurable checks (each running up to 5 SQL queries), orchestrated by 5 Node.js Lambdas and 2 Step Functions.
January 2026 — Present

Personal work · github.com/DanTahir

  • Klenny Code — open-source desktop coding agent for hundreds of models, written from scratch.
  • KlennyBrain — permission-aware company brain on a HydraDB knowledge graph; 2nd place at the TechEquity AI hackathon.
  • AnyChar — multi-user, multi-character AI roleplay platform for Discord, concept to deployment.
Graduated Spring 2024

San Francisco State University

  • B.S. Computer Science · GPA 3.78

AI / ML & architecture

LLM orchestrationMulti-agent systemsMultitool agent loopsRAGPrompt cachingClaude APIAmazon BedrockOpenRouterPrompt engineeringServer-Sent Events

Cloud & infrastructure

AWS LambdaStep FunctionsDynamoDBAthenaRDSS3EventBridgeCloudFrontTerraformGitHub Actions CI/CD

Languages & frameworks

TypeScriptJavaScriptPythonSQLCReactNext.jsNode.jsElectronLangChainLangGraph

Data

PostgreSQLDynamoDBMySQLAmazon AthenaPineconeHydraDB
01Professional work · DAVTEQ, Inc.

An agentic AI data analyst for transportation and infrastructure data.

Agency analysts ask complex, multistep questions in plain English and LoomIQ answers them against multi-gigabyte datasets — California crash records (CCRS), 511 Bay Area transit, Caltrans PeMS freeway traffic and more — with every figure verified in code and every claim grounded in the Highway Capacity Manual (HCM) and the Transit Capacity and Quality of Service Manual (TCQSM).

I wrote all of LoomIQ's agent code myself. I architected the original LangGraph multi-agent design, then the multitool looping agent that powers LoomIQ today, including its data-verification and memory tools.

½
the cost of the previous generation
with higher scores on real-data grounding and answer completeness.
Illustration: a loom of light weaving California transportation data into charts, maps, SQL and cited manual pages

How the LoomIQ agent works

Multitool looping agent

A single-prompt agent built directly on Claude via Amazon Bedrock's streaming Converse API. It thinks, fires up to six tool calls in parallel per round, and loops until the question is fully answered, with time, round and tool budgets that end gracefully.

Live “show your work” streaming

Thinking, tool calls, arguments and results stream to the browser as they happen over Server-Sent Events. Every event is persisted, so a refresh mid-answer rebuilds the exact state, and Stop cancels the running Athena query.

Verified figures & citations

The agent records each number with record_calculation: a formula plus its inputs. Code recomputes every figure as verified, mismatch or unverifiable. Answers cite figures and manual pages inline, and a Figure Check flags anything uncited.

Key-document RAG

Semantic search over the HCM and TCQSM with Pinecone and Cohere Embed v4 returns passages with document IDs and page ranges, fed by a RAG pipeline that indexes 5,000 pages in under an hour.

Metadata-first SQL

Before writing SQL the agent searches table instructions, columns and enumerated values, then pulls schemas and sample rows. Large Athena results are summarized in code (per-column stats over every row plus sampled rows), so context stays small and nothing is hidden.

Visible plans & an answer gate

A live, updatable query plan shows up in the UI as a checklist. A final-answer gate retracts any draft whose plan steps are unfinished, or that skips a chart for chartable data, and sends the agent back to finish the job.

Charts, maps & clarifying questions

Bar, line, area, pie and scatter charts; maps built from latitude/longitude fields; and an ask_question tool that pauses the turn for user input, without that wait counting against the time budget.

Self-improving memory

When the agent fixes a failed query, it can record a reusable lesson, such as a SQL dialect quirk or a canonical value format, but only by citing a verified failed-then-fixed query pair. Memory is versioned, lock-protected and admin-rollbackable.

Cost-aware & tenant-isolated

Prompt-cache breakpoints on the static prefix plus Athena and vector-search result caching keep costs down. Hard tool allowlists, structured retryable errors and org-scoped IAM keep every tenant's data isolated, and a conversation → job → step log view tracks tokens and cost.

LoomIQ answer: a traffic-safety analysis of Contra Costa County with recommendations and an annual trend chart
A LoomIQ analysis: narrative findings and recommendations backed by generated charts.

The agent's toolbelt

10 tools, gated per conversation

  • run_athena_queryRead-only SQL over the data lake
  • search_structured_contextVector search over table metadata
  • get_table_infoColumn types & sample rows
  • search_unstructured_contextHCM & TCQSM passages
  • query_planLive, updatable plan
  • record_calculationCode-verified figures
  • edit_memoryLearned lessons
  • generate_chartFive chart types
  • generate_mapGeospatial points
  • ask_questionPause & clarify
Built with TypeScriptNode.js on AWS LambdaClaude on Amazon BedrockAthena & GlueDynamoDBPineconeCohere Embed v4Next.js & ReactServer-Sent EventsTerraformPython
02Personal project · Open source

Klenny Code

An open-source desktop coding agent that runs on hundreds of models.

Klenny Code is a Windows, macOS and Linux coding harness that brings any OpenRouter model (Claude, GPT, Gemini and hundreds more) into a real agentic workflow: plans, approvals, memory, skills, subagents, a built-in browser and terminal, and a personal-assistant platform. Beneath its cheerful corgi persona sits some seriously rigorous engineering.

I wrote Klenny Code myself, from scratch, from inception to every release: caching, compaction, parallelism, planning, checklists, memory, atomic multi-write tools, skills, subagents, Pawprints and more. It's now my primary development tool, and this site was built with it.

30K+lines of TypeScript
3desktop platforms
100sof models, one key
Illustration: Klenny the corgi mascot in front of a holographic coding workspace

What Klenny can do

Any model, one key

Pick Claude, GPT, Gemini or hundreds of other models through a single OpenRouter key, and switch per tab mid-conversation. A cheaper utility model handles background work like summarization.

Plan mode & diff approvals

Klenny researches read-only and proposes a reviewable plan before touching code. Every edit and command is a diff you can accept or reject, with per-tab Manual, Command or Auto modes, checkpoints you can revert to, and live progress checklists.

Fabrication guard

The harness checks what the agent claims against a verification ledger of tool calls that actually ran, plus the clock, the filesystem and the checklist. Unsupported claims are flagged as disputed and forced into self-correction, with zero extra model calls.

Pawprints

Klenny writes small single-file React apps that run sandboxed in their own desktop windows. Nothing runs until you approve the source, the npm packages and the network domains, and the window gets no API key, shell or filesystem access.

Caching & compaction

Hand-tuned prompt-cache breakpoints and a frozen system prompt cut session costs in half. Compaction that resists summary poisoning, with automatic resume, keeps long autonomous tasks on track.

Parallel everything

Klenny reliably fires 3–10 tool calls from one message, batches edits with atomic all-or-nothing multi_edit/multi_write, and generates independent files concurrently with parallel_write.

Memory, skills & subagents

Project and global memory notes persist across sessions, and other projects can be read for reference. Reusable SKILL.md workflows and subagents run in isolated context windows, and Klenny can write all of them itself.

Personal assistant & scheduler

Assistant tabs read and send Gmail, answer Discord mentions, and run cron-scheduled tasks unattended in the background, sharing one auto-compacting memory pool.

Browser, terminal & media

A Playwright browser Klenny can drive and resize to check mobile layouts, a real PTY terminal it can read back, image and video generation, surgical .docx editing, and optional semantic code search.

Built with TypeScriptElectronReactBunOpenRouterPlaywrightnode-ptyesbuildVector searchGitHub Actions CI/CD
03Personal project · Hackathon
🥈2nd place · TechEquity AI Company Brain Hackathon

KlennyBrain

Your company's brain, with receipts.

KlennyBrain connects Slack, email, docs, meetings, tickets and GitHub issues into a HydraDB knowledge graph. Ask anything and get cited, permission-aware answers, so the CEO and the intern provably see different things. It also reads everything proactively to catch contradictions and stale docs, then has an agent fix them once an owner approves.

I designed and wrote KlennyBrain myself, from scratch, for the TechEquity AI company brain hackathon, where it took second place.

Illustration: a glowing knowledge-graph brain connected to chat, email, docs, tickets, calendars and code

Inside the brain

Ask the Brain

A tool-calling agent (search_knowledge, explore_entity, find_experts and more) streams cited answers with numbered source cards and a live trace of how it found them.

“Why this answer” graph

A force-directed evidence graph built from HydraDB's graph context shows exactly how the sources connect: people, events, concepts and the tickets blocking each other.

Permission-aware by construction

Identity is resolved on the server, and every knowledge search must carry an ACL or it throws. An audited “View as” lets admins confirm what each persona can and can't see.

Insights engine

A two-pass pipeline extracts decisions and action items, groups claims across sources and verifies conflicts with a stronger model. The result is contradiction and stale-doc insights that cite both sides.

Approval-gated, self-correcting

“Fix it” proposes a corrected doc, a Slack message and a GitHub issue. Nothing runs until an owner or admin approves. Then the brain files the issue, posts the update, rewrites the doc and resolves the insight.

Slack-native, with redaction

A Slack bot answers @Brain mentions, DMs and /brain with the same permissions as the web app. Live ingestion strips credentials, card numbers, SSNs and phone numbers before anything is indexed.

Built with TypeScriptHydraDB knowledge graphNestJSNext.js & ReactPrisma & PostgreSQLOpenRouter (Claude)Slack BoltGitHub APITurborepo
04Personal project · Live

AnyChar

Discord roleplay, reimagined.

AnyChar is a multi-user, multi-character AI roleplay platform for Discord. Design rich character personas on a web dashboard and drop them into any server or DM. They stay in character, remember your history, recognize the people they talk to, and can even see the images you share.

I designed and wrote AnyChar myself, from scratch, from concept to production deployment: the Python Discord bot, the Next.js dashboard and the AWS infrastructure.

Illustration: a knight, an android, a sorceress and a detective rising as holograms from Discord chat bubbles

Characters that feel alive

Rich character profiles

A name, a description, “should do” and “should never do” rules, and four reply styles, from one-liners to 500-word novella replies, all edited on the web dashboard.

Prunable two-tier memory

Short-term summaries are written after every exchange and automatically compacted into long-term memories within a token budget. Users can browse and prune them from the dashboard.

Known Users

Teach a character about up to five specific people, each with a description and optional photo, so it recognizes them and treats them consistently.

Vision & auto-appearance

Upload a portrait and a vision model writes a detailed appearance description. Characters can also see and react to images posted in chat.

Multi-character scenes

Up to three characters can be active in a server at once, replying in turn. Each knows who else is in the scene, and the bot's nickname syncs to match.

Per-server, per-DM & metered

Each server can have a different active character, and each user has a personal DM character. Admin approval provisions an encrypted per-user OpenRouter key with usage and cost tracking.

anychar.bot home page
anychar.bot: sign in with Discord and start building characters.
AnyChar major features grid
Profiles, reply styles, memory, Known Users, vision and per-server setup.
Built with Pythondiscord.pyTypeScriptNext.js & ReactAuth.js (Discord OAuth)DynamoDBS3EC2OpenRouter
05Contact

Let's build something agentic.

I'm always happy to talk about agent architectures, LLM tooling, RAG, or whatever you're building. The best way to reach me is on LinkedIn.