{
 "schema": "aiblocks-page/1",
 "id": "agency-lsp-index-engineer",
 "type": "agent",
 "name": "Language server and indexing engineer",
 "summary": "Plan a code search tool that gives go-to-definition and find-references across many languages, with language servers, a code graph and an index file.",
 "headline": "Language server and indexing engineer",
 "subhead": "Tell it which languages and how big your codebase is. It plans which language servers to run, how to join their answers into one code graph, and how to keep it current. You get a design, draft code and tests to run.",
 "job": {
  "id": "build-software",
  "name": "Build and ship software"
 },
 "level": "intermediate",
 "thinking": "high",
 "tested": true,
 "updated": "2026-11-03",
 "first_published": "2026-10-26",
 "inputs": [
  {
   "type": "question",
   "required": true,
   "label": "Question",
   "what": "the problem, decision or piece of work you want help with, and what a good outcome looks like"
  },
  {
   "type": "codebase",
   "required": false,
   "label": "Codebase",
   "what": "a project's code, in a folder or repo the AI can open"
  }
 ],
 "outputs": [
  {
   "type": "document",
   "required": true,
   "label": "Document",
   "what": "a finished document, such as a Word file, a PDF or a page of notes"
  }
 ],
 "you_give": [
  "The languages in your codebase, and the size of each in files or lines",
  "What the tool must answer, such as definitions, references, hover text or call links, and who will use it",
  "Where it runs, such as laptops, a server or CI, and its memory limit (optional)",
  "What is slow or wrong today, with an example (optional)",
  "Your repository layout, such as a monorepo or several roots (optional)"
 ],
 "you_get": [
  "A language server plan, one row per language, with what each can and cannot do",
  "A graph design with node and edge types and the rules that keep it consistent",
  "An index file format with one record per line",
  "An update plan using file watching, git hooks and caching",
  "Speed targets for you to test, clearly marked as targets",
  "Draft code or config for the parts you ask for, and a test list"
 ],
 "use_when": [
  "You want one go-to-definition and find-references tool across a codebase with several languages.",
  "Find-references in your editor is slow, wrong or missing on a large repository.",
  "You are building a code map or an AI coding helper that needs to know where each function is defined and used.",
  "You need an index that updates when files change, without a full rebuild."
 ],
 "skip_when": [
  "You are new to a codebase and want to understand it. Use the Codebase onboarding planner or the Codebase history researcher.",
  "You want a code review of a change. Use the Code Reviewer agent.",
  "You want to build an editor plugin or command line tool for your team. Use the Developer tools engineer.",
  "Your graph is about documents and facts, not code. Use the Knowledge graph engineer."
 ],
 "output_sample": {
  "input": [
   "Your languages and the size of your codebase",
   "What the tool must answer, and who uses it",
   "Where it runs and its memory limit (optional)",
   "What is slow or wrong today (optional)"
  ],
  "prerequisites": [
   "An AI that can read files, such as Claude, ChatGPT or Gemini",
   "A copy of your repository to test on"
  ],
  "output": [
   {
    "name": "Goal and assumptions",
    "contains": "What the tool answers, for whom, which languages come first and what the design assumes."
   },
   {
    "name": "Language servers",
    "contains": "One row per language with the server, what it supports and how to confirm it."
   },
   {
    "name": "Graph design",
    "contains": "Node and edge types and the rules that keep the graph consistent."
   },
   {
    "name": "Index format",
    "contains": "The record types and fields, one record per line, sharing one ID with the graph."
   },
   {
    "name": "Update plan",
    "contains": "How file changes trigger updates and how each update applies without leaving a half-written graph."
   },
   {
    "name": "Speed targets",
    "contains": "Targets to test for each request type, and how to measure them."
   }
  ]
 },
 "output_shape": "GOAL AND ASSUMPTIONS\n  <what the tool answers> | <users> | <language priority> | <limits> | <assumptions>\n\nLANGUAGE SERVERS\n  <language> | <server> | <what it supports> | <known gaps> | <how to confirm>\n\nGRAPH DESIGN\n  <node type> | <edge type> | <rule that keeps it consistent>\n\nINDEX FORMAT\n  <record type> | <fields> | <shared ID rule>\n\nUPDATE PLAN\n  <trigger> | <what is re-read> | <how the update is applied>\n\nSPEED TARGETS (TO TEST)\n  <request> | <target> | <how to measure>\n\nDRAFT CODE OR CONFIG (NOT RUN)\n  <file name> | <what it does>\n\nTESTS AND NEXT STEP\n  <test> | <what a pass looks like> | <next action>",
 "how_to_use": [
  "Download the pack and add it to your AI as a skill. If you cannot, paste SKILL.md and then references/source-agent.md into a new chat.",
  "List your languages, repository size and what the tool must answer. Say if some languages matter more than others.",
  "Type \"Design the language server setup and index, then list how I test it.\" Your AI asks once for anything missing.",
  "Read the language server table first. Confirm each server exists for your language and your version before you build on it.",
  "Run the test list on a copy of your repository. Your AI cannot run servers or time them.",
  "Compare your measured times with the targets. Change the design only where the numbers say so."
 ],
 "checks": [
  "The result addresses your actual task and cites the evidence used.",
  "Examples, role-play experience and targets are kept separate from verified results.",
  "Claims of tests, memory, tool access or completed actions match what actually happened."
 ],
 "next": [
  {
   "name": "Knowledge graph engineer",
   "url": "https://useaiblocks.com/skills/agency-engineering-knowledge-graph-engineer",
   "why": "Build it"
  },
  {
   "name": "Feature decision notes organizer",
   "url": "https://useaiblocks.com/skills/feature-memory-keeper",
   "why": "Build it"
  }
 ],
 "source": {
  "by": "Michael Sitarzewski and Agency Agents contributors",
  "repo": "msitarzewski/agency-agents",
  "url": "https://github.com/msitarzewski/agency-agents/blob/b37b5bb33b78f2c1d6567d98e25ca818e3259219/specialized/lsp-index-engineer.md",
  "licence": "MIT",
  "original_name": "LSP/Index Engineer",
  "commit": "b37b5bb33b78f2c1d6567d98e25ca818e3259219"
 },
 "credits": [
  {
   "title": "LSP/Index Engineer",
   "by": "Michael Sitarzewski and Agency Agents contributors",
   "url": "https://github.com/msitarzewski/agency-agents/blob/b37b5bb33b78f2c1d6567d98e25ca818e3259219/specialized/lsp-index-engineer.md",
   "used": "Original agent profile, preserved in references/source-agent.md; AI Blocks adds setup and review instructions."
  }
 ],
 "files": [
  "LICENSE",
  "references/source-agent.md",
  "SETUP.md",
  "source.json"
 ],
 "links": {
  "page": "https://useaiblocks.com/agents/agency-lsp-index-engineer",
  "markdown": "https://useaiblocks.com/agents/agency-lsp-index-engineer.md",
  "json": "https://useaiblocks.com/agents/agency-lsp-index-engineer.json",
  "instructions": "https://useaiblocks.com/skills/agency-lsp-index-engineer/SKILL.md",
  "download": "https://useaiblocks.com/skills/agency-lsp-index-engineer.zip",
  "api_item": "https://useaiblocks.com/api/v1/items/agency-lsp-index-engineer",
  "api_document": "https://useaiblocks.com/api/v1/documents/agent/agency-lsp-index-engineer",
  "mcp": "https://useaiblocks.com/mcp"
 }
}
