<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct" -->

---
title: How we built ten custom agents to tame our giant codebase
description: Metabase&#x27;s 500K-line Clojure backend is divided into distinct subsystems, each with its own idioms and complexity. To avoid burning Claude Code&#x27;s context...
canonical: https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How we built ten custom agents to tame our giant codebase | daily.dev
og:description: Metabase&#x27;s 500K-line Clojure backend is divided into distinct subsystems, each with its own idioms and complexity. To avoid burning Claude Code&#x27;s context...
og:url: https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct
og:image: https://api.daily.dev/og/posts/GkeI4nWCT.png
og:image:alt: How we built ten custom agents to tame our giant codebase
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How we built ten custom agents to tame our giant codebase

**[Metabase](https://daily.dev/sources/metabase)** · 7 min read · 1 upvotes · 0 comments

## Summary

Metabase's 500K-line Clojure backend is divided into distinct subsystems, each with its own idioms and complexity. To avoid burning Claude Code's context window on repeated domain exploration, the author built ten specialized subagents — each a markdown file with YAML frontmatter, domain knowledge, codebase locations, investigation patterns, caveats, and testing strategies. Agents cover areas like the MBQL query processor, permissions, notifications, search, and more. Key tips include using Claude itself to draft agent descriptions, writing precise routing descriptions (not vague job titles), and focusing on durable investigation patterns over directory paths. Agents can be invoked naturally in conversation or @-mentioned explicitly, and multiple agents can run in parallel for cross-domain reviews.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.metabase.com/blog/ten-custom-subagents>

## Similar posts on daily.dev

- [Designing a team of agents](https://daily.dev/posts/designing-a-team-of-agents-ahk562nig) · A Java geek · 3 upvotes · 0 comments
- [I ignored Claude Code's subagents until I realized what I was missing](https://daily.dev/posts/i-ignored-claude-code-s-subagents-until-i-realized-what-i-was-missing-cooyy1dqn) · XDA Developers · 1 upvotes · 0 comments
- [How and when to use subagents in Claude Code](https://daily.dev/posts/how-and-when-to-use-subagents-in-claude-code-j8ovmxhum) · Claude · 1 upvotes · 0 comments
- [Claude Code Agent Teams: Run Parallel AI Agents on Your Codebase](https://daily.dev/posts/claude-code-agent-teams-run-parallel-ai-agents-on-your-codebase-q76xl0e92) · SitePoint · 2 upvotes · 1 comments

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#claude-code](https://daily.dev/tags/claude-code), [#clojure](https://daily.dev/tags/clojure), [#context-engineering](https://daily.dev/tags/context-engineering)

[View this post on daily.dev](https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How we built ten custom agents to tame our giant codebase","url":"https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct"},"datePublished":"2026-04-20T17:49:30.447Z","dateModified":"2026-04-23T02:12:53.679Z","description":"Metabase's 500K-line Clojure backend is divided into distinct subsystems, each with its own idioms and complexity. To avoid burning Claude Code's context...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/b3c91b15659a56a0f69827f2a6ffd58b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/b3c91b15659a56a0f69827f2a6ffd58b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Metabase","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Metabase","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/97c4b2294a914263b4f3b4a82a5f896b","url":"https://daily.dev/sources/metabase"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-we-built-ten-custom-agents-to-tame-our-giant-codebase-gkei4nwct","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ai-agents,claude-code,clojure,context-engineering","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Metabase","item":"https://daily.dev/sources/metabase"},{"@type":"ListItem","position":3,"name":"How we built ten custom agents to tame our giant codebase"}]}
```

