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

# AI development pipeline

> Humans set direction. AI agents handle the rest. Automation runs the boring parts. A human gives the final sign-off.

The goal: file a GitHub Issue, grab coffee, come back to a PR that's been implemented, tested, and reviewed by multiple AI models — just waiting for a thumbs up. Not fully there yet, but close enough to be dangerous.

Humans decide *what* to build. AI agents handle the *how*. Automation runs the boring parts. A human gives the final sign-off. Claude, Gemini, Copilot, and local MLX models each do what they're best at — the right model for the right job instead of throwing everything at one.

## The pipeline

{/* Aspect: ~3:1 (LR). Role encoded via classDef, not subgraphs. */}

```mermaid theme={null}
%%{init: {'theme':'base','look':'handDrawn','themeVariables':{'fontFamily':'Geist','fontSize':'14px','primaryColor':'#102937','primaryTextColor':'#F4EFE6','primaryBorderColor':'#4FB3A9','lineColor':'#4FB3A9','secondaryColor':'#0B1D2A','tertiaryColor':'#1A2A38','clusterBkg':'rgba(79,179,169,0.08)','clusterBorder':'#4FB3A9'}}}%%
flowchart LR
  H1([Roadmap])
  H2([Issue])
  A1([Claude / Gemini])
  A2([Code])
  T1([CI])
  T2([Lint])
  A3([AI review])
  H3([PR review])
  T3([Ship])

  H1 --> H2 --> A1 --> A2 --> T1 --> T2 --> A3 --> H3 --> T3

  classDef human fill:#102937,stroke:#4FB3A9,stroke-width:2px,color:#F4EFE6;
  classDef ai    fill:#102937,stroke:#E06B4A,stroke-width:2px,color:#F4EFE6;
  classDef auto  fill:#102937,stroke:#F4EFE6,stroke-width:1.5px,color:#F4EFE6;

  class H1,H2,H3 human
  class A1,A2,A3 ai
  class T1,T2,T3 auto

  click A1 "/ai-development/overview" "Which model for which job"
  click T1 "/infrastructure/cicd/overview" "Self-hosted runners + CI"
  click T2 "/infrastructure/cicd/overview" "Lint stage in the runners"
  click A3 "/ai-development/claude-code-plugins" "AI review automation"

  linkStyle default stroke:#4FB3A9,stroke-width:1.5px;
```

Green nodes are human, coral are AI, ink are automation. The role is the node colour; the chain is the timeline — no zigzag because the diagram never asks the arrows to leave a column.

## The model-routing philosophy

Every model has a sweet spot:

* **Claude** — best at multi-file refactors, deep reasoning, agentic loops. The default for non-trivial implementation work.
* **Gemini** — great for second opinions, code review, broad context understanding.
* **GitHub Copilot** — fastest for line-level completions inside the editor. Cheap for high-volume routine work.
* **Local MLX** — Apple Silicon native inference for typo fixes, quick edits, and "I don't want to burn cloud tokens on this" tasks. The serving stack, tuning, and model strategy live under [Local LLM](/local-llm/overview).

The routing is opinionated, not magic: clear rules in `~/CLAUDE.md` and `AGENTS.md` say *which* model to use *when*.

## Local AI gateway (Bifrost)

[Bifrost](/tools/bifrost) is the OpenAI-compatible HTTP gateway that sits between every AI tool on the workstation and whichever provider eventually answers the call. It exposes `http://localhost:30080/v1/chat/completions` and fans out to OpenAI, Gemini, OpenRouter, and the local MLX server based on the task class.

Tools resolve task classes (Research, Coding, Review, Pre-commit) to a current model at call time — never hardcode model identifiers in committed config. When `localOnlyMode` is enabled, every request routes exclusively to the local MLX inference server on port 11434.

See [Bifrost](/tools/bifrost) for routing conventions, local-only mode details, and provider capabilities.

### Priority order

1. **Anthropic official** — Claude Code plugins, skills, patterns
2. **Bifrost AI gateway** — multi-provider routing at `localhost:30080`
3. **Personal or custom** — only when no alternative exists

## Repos that power this pipeline

<CardGroup cols={2}>
  <Card title="ai-assistant-instructions" icon="book" href="/ai-development/ai-assistant-instructions">
    Universal AI configuration layer — rules, permissions, workflows, agents.
  </Card>

  <Card title="claude-code-plugins" icon="plug" href="/ai-development/claude-code-plugins">
    Commands, skills, hooks, agents for Claude Code.
  </Card>

  <Card title="nix-ai" icon="bot" href="/nix/nix-ai">
    Nix package and config layer for every AI coding tool.
  </Card>

  <Card title="claude-code-routines" icon="clock" href="https://github.com/JacobPEvans/claude-code-routines">
    Scheduled remote-agent routines on Claude.ai.
  </Card>

  <Card title="ai-workflows" icon="github" href="https://github.com/JacobPEvans/ai-workflows">
    Reusable GitHub Copilot agentic workflows.
  </Card>

  <Card title="raycast-smart-issue" icon="bolt" href="https://github.com/JacobPEvans/raycast-smart-issue">
    Raycast extension for AI-drafted GitHub issues via local MLX.
  </Card>
</CardGroup>

See [AI Development · Overview](/ai-development/overview) for what each one does in detail. For the actual triggers, callers, and skill mechanics that drive this pipeline end-to-end, see [Automation · Overview](/automation/overview).

## Observability layer

Every interaction in this pipeline emits OpenTelemetry. The data flows through Cribl Edge, Cribl Stream, and Splunk; [purpose-built Splunk apps](/observability/overview) visualize it. If an AI agent touched code, there's a trace.
