惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
WordPress大学
WordPress大学
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
MyScale Blog
MyScale Blog
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
P
Proofpoint News Feed
D
DataBreaches.Net

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - theo-kirby/chassis: your favorite harness deserv...
theo-kirby · 2026-05-18 · via Hacker News: Show HN

license docker python Static Badge

A minimal Docker 'chassis' for managing long-running agent fleets.

chassis is a bare-bones agent orchestration layer designed around a two user agent-native file system running in docker. The goal is to streamline the agent/task hierarchy into its simplest form for maximum extensibility and minimal bloat.

Although it could be used as one, this repository is not intended to be an OpenClaw replacement. The purpose of this repository is to facilitate an open-ended branch of multi-agent systems development and research, and to serve as the foundation for several other projects.

a chassis is a docker container with an agent user:

/home/agent

an agent is a directory containing a system prompt and a config:

/home/agent/{agent-name}/SYSTEM.md
/home/agent/{agent-name}/agent.json

a task is a directory containing an instruction prompt, and a schedule:

/home/agent/{agent-name}/{task-name}/INSTRUCTIONS.md
/home/agent/{agent-name}/{task-name}/cron

These three base abstractions allow for an extremely general surface for configuring a large number of multi-agent systems.

dashboard

  • note the data above is not a real agent system - just a fanciful imagination by claude of what it thinks one would look like.

Each chassis is one container holding a fleet of cron-driven agents. Secrets live in a root-only file and only land in validated tool calls; never in the agent's address space. The LLM runtime and source is pluggable; the default is Pi, swappable per branch (see Branches). Per-branch namespacing lets several chassis run side by side on one host; multi-tenant chassis operation is a core feature.

Example chassis

An agent is a directory:

/home/agent/researcher/
  SYSTEM.md          ← system prompt
  agent.json         ← { "tools": [...], "pi_defaults": [...], "model": "" }
  tasks/morning/     ← optional; one per scheduled or named run
    INSTRUCTIONS.md  ← prompt for this run
    cron             ← single line, e.g. `0 7 * * *`

The seeded manager agent can edit, observe, and launch other agents from inside the container. The onboarding wizard (chassis setup) scaffolds new agents for you.

Quick start

./chassis install        # bind chassis command

chassis init             # scaffold .env (mode 600)
vim .env                 # add LLM_API_KEY + any tool secrets
chassis up               # build and start
chassis setup            # onboarding/chassis setup

Skip the wizard with chassis run manager: the manager can scaffold agents from inside the container too.

How it works

  • One container per chassis. Cron runs scheduled tasks; the seeded manager agent is your interactive mode.
  • Two users. root owns the runtime, tools, secrets, and cron. agent (UID 2000) owns its home and every agent definition, on a persistent volume.
  • Privileged tool dispatcher. Agents call sudo run-tool <name> '<json-args>'. The dispatcher validates args against a JSON schema and injects only the declared secrets into the tool's child env. See tools/README.md for the contract.
  • Audit log. Every dispatcher call appends to /var/log/chassis/run-tool.jsonl with secrets redacted from stdout/stderr.
  • Dashboard. dashboard/ auto-discovers running chassis on the host and surfaces cron schedules, last runs, audit tail, and a drill-in for individual sessions.

Tools

Tools are scripts in tools/ registered in tools/tools.json. The dispatcher validates args against each tool's JSON schema and injects only the declared .env secrets into the child process.

Tool What it does Secrets
web-search Tavily web search; returns title/url/content. TAVILY_API_KEY
web-fetch Fetch http(s) URL, optional tag-strip, char-capped.

Add a tool: drop a script in tools/, append an entry to tools.json, run chassis reload-cron. See tools/README.md for the full contract.

LLM endpoint

Configured in harness/llm.env (committed; branch-specific). Point LLM_BASE_URL at any OpenAI-compatible endpoint:

Provider Setup
Hosted (OpenRouter / OpenAI / etc.) Set LLM_BASE_URL and LLM_MODEL_ID in harness/llm.env; put LLM_API_KEY=... in .env.
Local Docker container (vLLM, llama.cpp, ollama, ...) Run your LLM container, then set LLM_CONTAINER=<its-name> in harness/llm.env. chassis up attaches it to chassis-net with alias llm, so LLM_BASE_URL=http://llm:<port>/v1 resolves.

.env (mode 600) holds the API key and tool secrets; harness/llm.env holds non-secret config.

Branches

The branch name is the chassis name. main is the framework; running chassis up on it produces a chassis named default. Every other branch becomes a chassis with that branch's name (lowercased, docker-sanitized).

Two flavors of branches:

  • harness-<runtime> — alternative agent runtimes on the same framework. Cron, per-agent dirs, dispatcher, and the chassis CLI are unchanged; only the runtime differs.
  • <anything else> — a concrete configuration: added tools, seeded agents, scheduled tasks. Layered on main (or a harness branch) and rebased onto it periodically.

Published

Branch What it is
main Framework + Pi runtime. Start here.
harness-pi-agent Pi runtime under the explicit name; currently mirrors main.
harness-claude-code Claude Code runtime in place of Pi.

PR for harness-codex welcome.

Worktrees workflow

Each branch lives in its own git worktree, so you can run multiple chassis at once and edit one while another is running. Flat branch names mean no nested directories.

agents/
├── chassis/        # main -the clone
├── researcher/     # researcher branch
└── …               # one dir per chassis
mkdir agents && cd agents
git clone git@github.com:theo-kirby/chassis.git chassis
cd chassis
git worktree add ../researcher researcher          # existing branch
git worktree add -b mything ../mything main        # new branch off main

The chassis CLI namespaces containers, volumes, and networks by branch. chassis up in two different worktrees brings up two independent chassis side by side. Set CHASSIS_NAME=<name> to override the branch-derived default.

Testing

./chassis test ping  # against current config
./chassis test ping --set LLM_BASE_URL=https://openrouter.ai/api/v1 \
                    --set LLM_API_KEY=sk-or-v1-... \
                    --set LLM_MODEL_ID=anthropic/claude-sonnet-4-5

Spins up a fully-namespaced throwaway container (own image tag, volumes, network), runs harness/tests/<name> against it, then tears it all down. --set injects env that wins over harness/llm.env and .env.

When to rebuild

Changed Run
Agent files in /home/agent/agents/ nothing
Agent cron, or tools/ on host chassis reload-cron
.env chassis down && chassis up
Anything in harness/ chassis up

Security

All agents in one chassis share one Linux user, so any agent can call any registered tool, write tools assuming that. The trust boundary is the dispatcher: secrets live in mode-600 .env (root-owned in container), tool implementations live behind mode-700 /mnt/protected/ (root-only), and the only thing on the agent's passwordless sudo list is run-tool. The dashboard is read-only and has no auth, don't expose it on the open internet; use a tailnet ACL or equivalent.