---
title: "Blog // Field Notes, Page 9 · FoundrySoft"
description: "Engineering notes from senior practitioners on generative AI, retrieval systems, and the real work of shipping LLM-powered software to production."
image: "https://foundrysoft.co/api/og?type=page&title=Engineering+intelligent+software&st=Production-grade+software+and+AI+systems+for+teams+who+need+more+than+another+demo."
url: "https://foundrysoft.co/blog/page/9"
---

Field Notes, 184 Articles

# Notes from the foundry

Engineering essays on generative AI, retrieval systems, and what it takes to ship intelligent software to production.

[

![Spin Up Sandboxed Subagents with the Antigravity CLI](https://foundrysoft.co/images/blog-cards/antigravity-cli-subagents.png)

gradient-mesh

Tutorial // DevTools #161

## Spin Up Sandboxed Subagents with the Antigravity CLI

Google's Antigravity 2.0 CLI lets you delegate work to sandboxed subagents. A practical walkthrough of wiring it into a real dev workflow.

2026-06-19

Read Note →

](https://foundrysoft.co/blog/antigravity-cli-subagents)[

![Build an MCP Server to Connect Claude to Your Database](https://foundrysoft.co/images/blog-cards/build-mcp-server-claude-database.png)

midnight

Tutorial // MCP #162

## Build an MCP Server to Connect Claude to Your Database

A practical tutorial on the Model Context Protocol: build a TypeScript MCP server that lets Claude query your database safely, with tools and guardrails.

2026-06-19

Read Note →

](https://foundrysoft.co/blog/build-mcp-server-claude-database)[

![Self-Host a Coding LLM with vLLM](https://foundrysoft.co/images/blog-cards/self-host-coding-llm-vllm.png)

gradient-mesh

Tutorial // Infrastructure #163

## Self-Host a Coding LLM with vLLM

Open-weight coding models are good enough to self-host now. A practical guide to serving one with vLLM and calling it through an OpenAI-compatible API.

2026-06-18

Read Note →

](https://foundrysoft.co/blog/self-host-coding-llm-vllm)[

![Build a Semantic Search Engine with Embeddings and Qdrant](https://foundrysoft.co/images/blog-cards/semantic-search-embeddings-qdrant.png)

split

Tutorial // Search #164

## Build a Semantic Search Engine with Embeddings and Qdrant

A Python tutorial: embed your data, store it in Qdrant, and run semantic search that understands meaning, then add keyword hybrid search and reranking.

2026-06-18

Read Note →

](https://foundrysoft.co/blog/semantic-search-embeddings-qdrant)[

![Shipping Generative AI Features Without Breaking Production](https://foundrysoft.co/images/blog-cards/shipping-generative-ai-features.png)

midnight

Engineering // LLMs #165

## Shipping Generative AI Features Without Breaking Production

A field guide to taking LLM-powered features from a flashy demo to a system you can trust on a Friday afternoon.

2026-06-18

Read Note →

](https://foundrysoft.co/blog/shipping-generative-ai-features)[

![Build an AI Voice Agent with Twilio and a Realtime Model](https://foundrysoft.co/images/blog-cards/ai-voice-agent-twilio-realtime.png)

terminal

Tutorial // Voice AI #166

## Build an AI Voice Agent with Twilio and a Realtime Model

Wire a phone number to an AI: a Node tutorial connecting Twilio Media Streams to a realtime speech model so callers can talk to your agent.

2026-06-17

Read Note →

](https://foundrysoft.co/blog/ai-voice-agent-twilio-realtime)[

![Build an OAuth-Secured MCP Server](https://foundrysoft.co/images/blog-cards/oauth-secured-mcp-server.png)

midnight

Tutorial // MCP #167

## Build an OAuth-Secured MCP Server

Secure a Model Context Protocol server with OAuth 2.1. A TypeScript walkthrough of bearer token validation, scopes, and protecting tools.

2026-06-17

Read Note →

](https://foundrysoft.co/blog/oauth-secured-mcp-server)[

![Build a Durable Multi-Step Workflow with Claude Opus 4.8](https://foundrysoft.co/images/blog-cards/durable-workflow-opus-4-8.png)

geometric

Tutorial // Workflows #168

## Build a Durable Multi-Step Workflow with Claude Opus 4.8

Opus 4.8 shipped with a dynamic workflow capability. Here's how to build a crash-safe, multi-step workflow that an LLM drives end to end.

2026-06-16

Read Note →

](https://foundrysoft.co/blog/durable-workflow-opus-4-8)[

![Add an Eval Harness to Your LLM App](https://foundrysoft.co/images/blog-cards/llm-eval-harness-typescript.png)

split

Tutorial // Evals #169

## Add an Eval Harness to Your LLM App

Stop shipping on vibes. A TypeScript tutorial for building a lightweight eval harness: datasets, scorers, an LLM-as-judge, and a CI gate.

2026-06-16

Read Note →

](https://foundrysoft.co/blog/llm-eval-harness-typescript)[

![Build a Code Completion Backend with Codestral](https://foundrysoft.co/images/blog-cards/code-completion-backend-codestral.png)

editorial

Tutorial // DevTools #170

## Build a Code Completion Backend with Codestral

Codestral is Mistral's model built for code. Here's how to stand up a fill-in-the-middle code completion backend you can wire into an editor.

2026-06-15

Read Note →

](https://foundrysoft.co/blog/code-completion-backend-codestral)[

![Build a Multi-Agent Workflow with LangGraph](https://foundrysoft.co/images/blog-cards/multi-agent-workflow-langgraph.png)

prism

Tutorial // Agents #171

## Build a Multi-Agent Workflow with LangGraph

A Python tutorial: model a researcher, writer, and reviewer as a LangGraph state machine, with shared state, conditional edges, and a review loop.

2026-06-15

Read Note →

](https://foundrysoft.co/blog/multi-agent-workflow-langgraph)[

![Build an AI Code Review Bot for Your Pull Requests](https://foundrysoft.co/images/blog-cards/ai-code-review-bot-claude.png)

midnight

Tutorial // DevTools #172

## Build an AI Code Review Bot for Your Pull Requests

A TypeScript tutorial: a GitHub Action that sends your PR diff to Claude and posts a focused, useful review comment, without the noise.

2026-06-14

Read Note →

](https://foundrysoft.co/blog/ai-code-review-bot-claude)[

![RAG Is Not a Silver Bullet · It's a Retrieval Problem](https://foundrysoft.co/images/blog-cards/rag-is-not-a-silver-bullet.png)

terminal

AI // Retrieval #173

## RAG Is Not a Silver Bullet · It's a Retrieval Problem

Why most retrieval-augmented generation systems underperform, and the unglamorous fixes that actually move the needle.

2026-05-29

Read Note →

](https://foundrysoft.co/blog/rag-is-not-a-silver-bullet)[

![How to Evaluate an AI Development Partner](https://foundrysoft.co/images/blog-cards/how-to-evaluate-ai-development-partner.png)

terminal

Insights // Hiring #174

## How to Evaluate an AI Development Partner

A practical checklist for CTOs vetting an AI development agency, covering evals, IP, security, cost, and the questions that separate builders from demo shops.

2026-05-22

Read Note →

](https://foundrysoft.co/blog/how-to-evaluate-ai-development-partner)[

![Vendor Lock-In with LLMs: How to Keep Providers Swappable](https://foundrysoft.co/images/blog-cards/avoid-llm-vendor-lock-in.png)

prism

Insights // Architecture #175

## Vendor Lock-In with LLMs: How to Keep Providers Swappable

Prices change, models get deprecated, and providers face export limits overnight. How to architect LLM features so you can switch providers without a rewrite.

2026-05-15

Read Note →

](https://foundrysoft.co/blog/avoid-llm-vendor-lock-in)[

![Cutting LLM Cost 50% Without Wrecking Quality](https://foundrysoft.co/images/blog-cards/cut-llm-cost-without-wrecking-quality.png)

prism

Insights // Cost #176

## Cutting LLM Cost 50% Without Wrecking Quality

A practical playbook for bringing down LLM spend: model routing, prompt caching, context discipline, and batching, with the quality tradeoffs spelled out.

2026-05-08

Read Note →

](https://foundrysoft.co/blog/cut-llm-cost-without-wrecking-quality)[

![What It Really Costs to Run an LLM Feature in Production](https://foundrysoft.co/images/blog-cards/real-cost-of-llm-feature-in-production.png)

editorial

Insights // Cost #177

## What It Really Costs to Run an LLM Feature in Production

Token bills are only part of it. The true cost of an LLM feature: inference, retrieval infra, evals, monitoring, and the engineering time nobody budgets for.

2026-05-01

Read Note →

](https://foundrysoft.co/blog/real-cost-of-llm-feature-in-production)[

![Should We Self-Host an LLM? A Cost and Control Framework](https://foundrysoft.co/images/blog-cards/should-we-self-host-an-llm.png)

prism

Insights // Infrastructure #178

## Should We Self-Host an LLM? A Cost and Control Framework

Self-hosting an open-weight model can save money or quietly cost more. A CTO's framework for deciding based on volume, privacy, control, and the true total cost.

2026-04-24

Read Note →

](https://foundrysoft.co/blog/should-we-self-host-an-llm)[

![RAG vs Fine-Tuning vs Long Context: Which, and When](https://foundrysoft.co/images/blog-cards/rag-vs-fine-tuning-vs-long-context.png)

midnight

Insights // Architecture #179

## RAG vs Fine-Tuning vs Long Context: Which, and When

Three ways to get a model to use your data, often confused. When retrieval, fine-tuning, or a big context window is the right call, and when to combine them.

2026-04-17

Read Note →

](https://foundrysoft.co/blog/rag-vs-fine-tuning-vs-long-context)[

![When AI Is the Wrong Tool (and Cheaper Options Win)](https://foundrysoft.co/images/blog-cards/when-ai-is-the-wrong-tool.png)

split

Insights // Strategy #180

## When AI Is the Wrong Tool (and Cheaper Options Win)

Not every problem needs an LLM. A candid look at where rules, search, or plain software beat AI, and how to tell before you spend the budget.

2026-04-10

Read Note →

](https://foundrysoft.co/blog/when-ai-is-the-wrong-tool)

[‹ Prev](https://foundrysoft.co/blog/page/8) [1](https://foundrysoft.co/blog) [2](https://foundrysoft.co/blog/page/2) [3](https://foundrysoft.co/blog/page/3) [4](https://foundrysoft.co/blog/page/4) [5](https://foundrysoft.co/blog/page/5) [6](https://foundrysoft.co/blog/page/6) [7](https://foundrysoft.co/blog/page/7) [8](https://foundrysoft.co/blog/page/8) 9 [10](https://foundrysoft.co/blog/page/10) [Next ›](https://foundrysoft.co/blog/page/10)

```json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "FoundrySoft",
  "url": "https://foundrysoft.co",
  "logo": "https://foundrysoft.co/logo.svg",
  "description": "FoundrySoft builds production-grade software and AI systems for US companies, from an India-based team of senior engineers.",
  "sameAs": [
    "https://github.com/foundrysofthq",
    "https://www.linkedin.com/company/foundrysoft",
    "https://www.instagram.com/foundrysoft/"
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "FoundrySoft",
  "url": "https://foundrysoft.co"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "Blog",
  "name": "FoundrySoft Blog",
  "url": "https://foundrysoft.co/blog/page/9",
  "blogPost": [
    {
      "@type": "BlogPosting",
      "headline": "Spin Up Sandboxed Subagents with the Antigravity CLI",
      "url": "https://foundrysoft.co/blog/antigravity-cli-subagents",
      "datePublished": "2026-06-19"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build an MCP Server to Connect Claude to Your Database",
      "url": "https://foundrysoft.co/blog/build-mcp-server-claude-database",
      "datePublished": "2026-06-19"
    },
    {
      "@type": "BlogPosting",
      "headline": "Self-Host a Coding LLM with vLLM",
      "url": "https://foundrysoft.co/blog/self-host-coding-llm-vllm",
      "datePublished": "2026-06-18"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build a Semantic Search Engine with Embeddings and Qdrant",
      "url": "https://foundrysoft.co/blog/semantic-search-embeddings-qdrant",
      "datePublished": "2026-06-18"
    },
    {
      "@type": "BlogPosting",
      "headline": "Shipping Generative AI Features Without Breaking Production",
      "url": "https://foundrysoft.co/blog/shipping-generative-ai-features",
      "datePublished": "2026-06-18"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build an AI Voice Agent with Twilio and a Realtime Model",
      "url": "https://foundrysoft.co/blog/ai-voice-agent-twilio-realtime",
      "datePublished": "2026-06-17"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build an OAuth-Secured MCP Server",
      "url": "https://foundrysoft.co/blog/oauth-secured-mcp-server",
      "datePublished": "2026-06-17"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build a Durable Multi-Step Workflow with Claude Opus 4.8",
      "url": "https://foundrysoft.co/blog/durable-workflow-opus-4-8",
      "datePublished": "2026-06-16"
    },
    {
      "@type": "BlogPosting",
      "headline": "Add an Eval Harness to Your LLM App",
      "url": "https://foundrysoft.co/blog/llm-eval-harness-typescript",
      "datePublished": "2026-06-16"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build a Code Completion Backend with Codestral",
      "url": "https://foundrysoft.co/blog/code-completion-backend-codestral",
      "datePublished": "2026-06-15"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build a Multi-Agent Workflow with LangGraph",
      "url": "https://foundrysoft.co/blog/multi-agent-workflow-langgraph",
      "datePublished": "2026-06-15"
    },
    {
      "@type": "BlogPosting",
      "headline": "Build an AI Code Review Bot for Your Pull Requests",
      "url": "https://foundrysoft.co/blog/ai-code-review-bot-claude",
      "datePublished": "2026-06-14"
    },
    {
      "@type": "BlogPosting",
      "headline": "RAG Is Not a Silver Bullet · It's a Retrieval Problem",
      "url": "https://foundrysoft.co/blog/rag-is-not-a-silver-bullet",
      "datePublished": "2026-05-29"
    },
    {
      "@type": "BlogPosting",
      "headline": "How to Evaluate an AI Development Partner",
      "url": "https://foundrysoft.co/blog/how-to-evaluate-ai-development-partner",
      "datePublished": "2026-05-22"
    },
    {
      "@type": "BlogPosting",
      "headline": "Vendor Lock-In with LLMs: How to Keep Providers Swappable",
      "url": "https://foundrysoft.co/blog/avoid-llm-vendor-lock-in",
      "datePublished": "2026-05-15"
    },
    {
      "@type": "BlogPosting",
      "headline": "Cutting LLM Cost 50% Without Wrecking Quality",
      "url": "https://foundrysoft.co/blog/cut-llm-cost-without-wrecking-quality",
      "datePublished": "2026-05-08"
    },
    {
      "@type": "BlogPosting",
      "headline": "What It Really Costs to Run an LLM Feature in Production",
      "url": "https://foundrysoft.co/blog/real-cost-of-llm-feature-in-production",
      "datePublished": "2026-05-01"
    },
    {
      "@type": "BlogPosting",
      "headline": "Should We Self-Host an LLM? A Cost and Control Framework",
      "url": "https://foundrysoft.co/blog/should-we-self-host-an-llm",
      "datePublished": "2026-04-24"
    },
    {
      "@type": "BlogPosting",
      "headline": "RAG vs Fine-Tuning vs Long Context: Which, and When",
      "url": "https://foundrysoft.co/blog/rag-vs-fine-tuning-vs-long-context",
      "datePublished": "2026-04-17"
    },
    {
      "@type": "BlogPosting",
      "headline": "When AI Is the Wrong Tool (and Cheaper Options Win)",
      "url": "https://foundrysoft.co/blog/when-ai-is-the-wrong-tool",
      "datePublished": "2026-04-10"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://foundrysoft.co/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://foundrysoft.co/blog"
    }
  ]
}
```
