AI Agent Development · San Francisco
The hard part of an agent project in the Bay is not picking a framework. The hard part is designing the agent loop so that tool calls stay reliable past a 10-step trajectory, designing the tool schemas so function calling does not drift, designing the memory layer so the agent recovers from a restart, and designing the eval harness so a prompt change does not silently regress a use case you cared about three weeks ago.
We build agents for SaaS, AI infrastructure, and dev tooling companies in the city. LangGraph for the state graph, Claude Sonnet 5 or GPT-5 for the reasoning step, Anthropic tool use or OpenAI Responses API for the action layer, Langfuse for traces, Braintrust for offline evals, pgvector or Pinecone for memory. We pick by benchmark on your workload, not by vendor preference.
Projects run fixed scope. Discovery first, fixed quote after, four to eight weeks of build, weekly demos on Pacific time.
Tell us about the agent you're building.
Most production agents we ship follow a plan-and-execute graph with explicit state. A planner step produces a typed plan (an array of action objects), an executor step runs each action through a tool-use call, and a verifier step checks the result against a schema before transitioning to the next node. We use LangGraph because the state machine is the source of truth, not a hidden prompt convention. A senior engineer on your team can read the graph and know exactly what the agent will do.
We choose ReAct when the tool space is small (under five tools) and the workflow benefits from interleaved reasoning and action. ReAct fits well for code-search agents, internal Q&A bots that hit two or three APIs, and SRE diagnostic agents. We avoid ReAct at higher tool counts because tool-selection error compounds across steps.
Reflection patterns (Reflexion, self-critique) only earn their cost when there is a ground-truth verifier. A test suite, a production database query, an API that returns a status code. Without a verifier, self-critique is the model talking to itself and getting more confident in the wrong answer.
Tool-use design is where most agent projects go sideways. The Anthropic tool-use API and the OpenAI Responses API both expose JSON Schema for arguments, and both models handle flat schemas with primitive types far more reliably than nested unions or discriminated types. Every tool we ship has a flat argument schema, a short positive example in the description, and a forbidden-example callout that names the most common hallucination mode.
Tool outputs are validated with Zod or Pydantic before they go back into the agent context. A 500 error from your internal API becomes a typed error object, not a string the model has to parse. This single discipline removes most of the silent failure modes we see when teams hand-roll tool integrations.
For multi-agent coordination, the orchestrator-worker pattern from the Anthropic research-agent blog post is the most reliable shape we have seen. We use it when the workflow has parallelism (gather from N sources, synthesize one answer) and avoid it when a single agent with the right tools is enough.
Six engineering components that appear in every production agent we ship for SaaS, AI labs, and dev tooling companies.
LangGraph for stateful workflows. Each node has a typed input and output, transitions are deterministic where possible, and the graph is checkpointed so a restart resumes from the last completed step instead of replaying tokens.
Flat argument schemas, positive and forbidden examples in descriptions, Zod or Pydantic validation on every tool output. Tool count per call kept under eight to preserve selection accuracy on Claude Sonnet 5 and GPT-5.
Short-term context in the graph state, long-term in pgvector or Pinecone keyed by tenant and session. We pick session memory, semantic memory, or hybrid based on the access pattern, not because every agent needs all three.
Orchestrator-worker pattern using LangGraph subgraphs or AutoGen group chat. We deploy this only when parallel gathering or genuine specialization beats a single agent with more tools.
Every prompt, tool call, latency number, and token cost is captured. Traces are session-grouped and searchable by user, tenant, and trajectory length. Cost dashboards by feature so the finance team can model unit economics.
Braintrust or Promptfoo against a labeled set we build with you. Task completion rate, hallucination rate, tool-call accuracy, latency p50 and p95. Regression suite runs on every prompt or model change before merge.
San Francisco is the center of the agent industry. Anthropic and OpenAI publish from the city, Salesforce ships Agentforce out of Mission Bay, Stripe runs agents in their dispute-review and support flows, Figma and Notion have shipped agentic features in the last year, and most of the late-stage SaaS companies in the city now have an agents team. The bar is high because every team has read the same papers and tried the same patterns.
The teams we work with in the city tend to have a strong product and ML background but a thin layer of production-agent operating experience. They know the model APIs, they have built prototypes, and they need help shipping something that holds up against an eval set, an observability dashboard, and a real user load. That is where we are useful: the boring parts (graph design, tool validation, eval pipeline, cost monitoring) that decide whether the prototype survives contact with production.
We work remotely with Bay Area clients on Pacific time. Discovery calls fit between 9am and 5pm PT, demos happen weekly, and the codebase ships to a repository you own.
Industries where we see strongest fit: B2B SaaS adding agentic workflows, AI infrastructure companies shipping reference implementations, dev tooling building agentic IDE or CLI features, and Series B+ startups with one agent in production that needs to scale to ten.
Describe what your agent has to do and what is currently breaking about it. We'll reply within one business day with a rough scope, a recommended architecture, and a price range.