Skip to content
This repository was archived by the owner on May 11, 2026. It is now read-only.

agentic-research/kiln

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

24 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

kiln (retired)

πŸͺ¦ RETIRED β€” 2026-05-11. This repository was a Homebrew tap + shared apko/melange build setup for mache. It has been retired because each sibling repo now owns its own OCI image build in-repo:

Project Image build path
mache agentic-research/mache β€” task image
rosary agentic-research/rosary β€” task image
notme agentic-research/notme β€” task image
ley-line-open agentic-research/ley-line-open β€” task image
cloister agentic-research/cloister β€” task image

If you came here looking for mache installation specifically, see agentic-research/mache. If you want cluster-style deployment of the whole substrate, see agentic-research/cloister's task cluster:up.

The repository is read-only (archived). No new issues / PRs will be processed; please file them in the active repo above.

Historical content preserved below.


kiln

Where you fire a mache.

Install

brew install agentic-research/tap/mache

Then pick your editor β€” stdio mode is easiest (the editor manages the process, auto-serves whatever project you're in):

Claude Code

claude mcp add mache -- mache serve --stdio .

That's it. Claude Code spawns mache per-session and auto-detects your project's languages. No server to manage.

VS Code / Cursor

Add to .vscode/mcp.json:

{
  "servers": {
    "mache": {
      "type": "stdio",
      "command": "mache",
      "args": ["serve", "--stdio", "."]
    }
  }
}

Gemini CLI

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "mache": {
      "command": "mache",
      "args": ["serve", "--stdio", "."]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "mache": {
      "command": "mache",
      "args": ["serve", "--stdio", "."]
    }
  }
}

HTTP mode (shared server)

If you prefer a long-running server that multiple clients can connect to:

# Serve a codebase (HTTP on :7532)
mache serve /path/to/your/code

# Or as a background service (macOS)
brew services start agentic-research/tap/mache

Then point your editor at http://localhost:7532/mcp:

# Claude Code
claude mcp add --transport http mache http://localhost:7532/mcp
// VS Code / Cursor (.vscode/mcp.json)
{ "servers": { "mache": { "type": "http", "url": "http://localhost:7532/mcp" } } }

// Gemini CLI (~/.gemini/settings.json)
{ "mcpServers": { "mache": { "httpUrl": "http://localhost:7532/mcp" } } }

// Windsurf (~/.codeium/windsurf/mcp_config.json)
{ "mcpServers": { "mache": { "serverUrl": "http://localhost:7532/mcp" } } }

Container mode

For environments without a local install:

{
  "mcpServers": {
    "mache": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "${workspaceFolder}:/source:ro",
        "-v", "mache-cache:/data",
        "mache", "--stdio", "/source"
      ]
    }
  }
}

mache above is the image name, not the binary. The container's entrypoint runs mache serve "$@", so only pass flags and the source path.


Table of contents

Kiln packages mache and ley-line into a single artifact β€” either a static fat binary or a distroless OCI image. One command gives you a fully wired MCP server backed by ley-line's zero-copy arena.

What's inside

graph TD
    subgraph kiln["kiln (fat binary)"]
        subgraph mache["mache (Go)"]
            Schema[Schema]
            Ingest[Ingest]
            MCP[MCP Server]
        end

        subgraph leyline["ley-line (Rust)"]
            Arena[Arena]
            SQLite[SQLite]
            Graph[Graph]
        end

        mache -->|C FFI| leyline
    end

    MCP -->|"Streamable HTTP :7532"| Client["MCP Clients"]
Loading

Building

All commands use Task.

task binary       # Static fat binary (Go + Rust linked)
task image        # Dockerfile image (dev/iteration)
task apk          # melange + apko distroless image (release)
task sign         # cosign signature (uses signet KMS if available)
task test         # Smoke test
task shell        # Debug shell in container
task clean        # Remove artifacts

Build requirements

Binary: Go 1.25+, Rust 1.82+, C compiler. Image (Dockerfile): Docker or Podman. No local toolchains. Image (apko): melange, apko. Produces reproducible distroless images.

Distribution

Three tiers, same binary inside:

Method Target Size Reproducible
task binary Direct install, Homebrew tap ~30MB No (host-dependent)
task image Dev, CI ~200MB No
task apk Release, registry ~15-20MB Yes

The apko path produces a distroless image: no shell, no package manager, just the mache binary + musl libc + ca-certs. Signed with cosign, optionally via signet's KMS provider.

Architecture

Kiln is glue, not logic. It owns:

  • Build pipeline β€” multi-language compilation + static linking
  • Packaging β€” melange APK + apko OCI image assembly
  • Volume contract β€” /source (read-only bind), /data (persistent cache)
  • Signing β€” cosign + optional signet KMS integration

Kiln does NOT own:

  • Schema logic, ingestion, tree-sitter queries (that's mache)
  • Arena format, double-buffering, SQLite adapter (that's ley-line)

Why?

Mache is Go. Ley-line is Rust. They talk via C FFI (cgo + staticlib). Building locally requires both toolchains, a C compiler, platform-specific FUSE/NFS libs, and the right CGO flags. Kiln absorbs that complexity so users get one thing that works.

Status

Early. The pieces exist β€” mache already links ley-line's staticlib via FFI. Kiln just puts them in a box and fires it.

License

Apache-2.0 (kiln and mache). Ley-line is closed-source.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors