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

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

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 - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
GitHub - alamops/agetor: The harness orchestrator — a local-first kanban for running Claude Code, Codex, and other CLI coding agents in parallel, each in its own git worktree.
drakochack · 2026-05-18 · via Hacker News: Show HN

Website: agetor.dev

A local-first kanban board for orchestrating CLI coding agents — Claude Code, OpenAI Codex, and friends — across many tasks and many repos at once.

Agetor turns a kanban board into a control plane for AI coding agents. Each card is a prompt plus a working directory plus an agent choice; starting it spawns the agent as a child process inside an isolated git worktree, streams its output back to the UI, and moves the card through columns as the run progresses. Approvals, clarifying questions, and follow-up messages flow through structured cards in the run panel instead of getting buried in a TUI.

It runs entirely on your machine. No cloud relay, no remote sandbox — agents execute with your shell privileges in your repos, the same way they would if you launched them by hand. Agetor just adds the orchestration, isolation, and UI on top.


Highlights

  • Multi-agent, multi-account. Built-in support for claude-code and codex. Define additional harnesses to run a second Claude or Codex account in parallel — each one gets a dedicated $HOME so logins, history, and config never collide.
  • Per-task git worktrees. Every task runs on its own branch (agetor/<short-id>-<slug>) in a dedicated worktree under ~/.agetor/worktrees/. Two agents can hammer the same repo simultaneously without stepping on each other. Base ref is pinned at create time, so re-runs always start from the same commit.
  • Interactive Claude sessions. Claude Code is hosted in a per-task tmux session that stays alive across multiple turns. Follow up on a task without losing the conversation. Output is streamed by tailing Claude's own JSONL transcript, so assistant text, thinking blocks, tool calls, and tool results all render with their own UI components.
  • Approvals and questions, lifted out of the TUI. A PreToolUse hook and a tiny MCP server intercept Claude's tool-permission prompts and AskUserQuestion / ExitPlanMode calls. They surface in the run panel as structured cards — radios, checkboxes, free-text — with an optional "always allow for this task" rule. Codex prompts are detected heuristically from stdout and surfaced the same way.
  • Live event stream. SSE per task and a global event channel. Status toasts and native notifications fire when a run finishes, succeeds, fails, or blocks waiting on input.
  • Reproducible re-runs. Run history persists per task. Cancelling a run keeps the tmux session alive so you can iterate; deleting a task tears down its worktree, branch, and session.
  • Local SQLite. All state — tasks, runs, events, projects, harnesses, preferences, approval rules — lives in ~/.agetor/agetor.sqlite with a versioned migration runner. Nothing leaves your machine.

How it works

Agetor is an Electrobun app — a Bun main process that owns the window and a native WebView that renders the UI.

┌─────────────────────────┐       HTTP + SSE        ┌─────────────────────────┐
│  React webview          │ ◀──────────────────────▶│  Bun main process        │
│  (kanban, run panel)    │   127.0.0.1 + token     │  (SQLite, orchestrator) │
└─────────────────────────┘                         └─────────────┬───────────┘
                                                                  │ spawn
                                                  ┌───────────────┴───────────────┐
                                                  ▼                               ▼
                                       ┌──────────────────┐            ┌──────────────────┐
                                       │  tmux: claude    │            │  codex exec      │
                                       │  (per task)      │            │  (one-shot)      │
                                       └──────────────────┘            └──────────────────┘
                                                  │                               │
                                                  ▼                               ▼
                                       ┌──────────────────┐            ┌──────────────────┐
                                       │ git worktree per │            │ git worktree per │
                                       │ task             │            │ task             │
                                       └──────────────────┘            └──────────────────┘

Some key design decisions:

  • Localhost API, not Electrobun RPC. The webview talks to the main process over a plain HTTP API bound to 127.0.0.1 on a configurable port. Every route (except /health) is gated on a per-launch random bearer token passed to the webview via a WKUserScript preload. A site you happen to visit can't drive an agent run even if it guesses the port.
  • One tmux session per Claude task. claude runs in interactive mode (so you draw from your normal subscription quota, not the Agent SDK credit). Prompts are delivered as keystrokes via tmux load-buffer + paste-buffer + send-keys. Output is read from the JSONL Claude writes to ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl.
  • Codex stays one-shot. Each Codex run is a fresh codex exec invocation; follow-ups create a new run record on the same task.
  • Boot reconciliation. On startup, any tmux sessions left over from a previous Agetor process are killed, and any rows still marked running are flipped to orphaned. The kanban never shows stuck cards.

The full architecture, schema, and lifecycle is documented in CLAUDE.md.


Requirements

  • Bun ≥ 1.1 (install)
  • tmux — hard requirement for the Claude Code driver
    • macOS: brew install tmux
    • Debian/Ubuntu: apt install tmux
  • At least one agent CLI on PATH:
    • claude-code: npm i -g @anthropic-ai/claude-code
    • codex: npm i -g @openai/codex
  • Git — required for worktree isolation
  • Platforms: macOS (primary). Linux and Windows builds are configured in electrobun.config.ts but are not currently tested.

Agents are launched with your full shell privileges in whatever directory the task points at. There is no sandbox.


Getting started

# Clone and install
git clone https://github.com/alamops/agetor.git
cd agetor
bun install

# Build the webview bundle once (required for `bun run dev`)
bun run build

# Run it
bun run dev

For UI iteration, run Vite and Electrobun together:

bun run dev:hmr

That starts Vite on port 5173 for hot reload and Electrobun in dev mode in parallel. Main-process changes (anything under src/bun/) do not hot-reload — restart bun run dev:hmr after editing them.

First task

  1. Click New task in the left rail.
  2. Pick a workdir (any local folder; if it's a git repo, you'll get worktree isolation for free).
  3. Choose an agent and a model, and write your prompt.
  4. Hit Run task to start it immediately, or To backlog to queue it.

Drag cards between columns to override flow manually. Open a card to see the live event stream, send follow-up messages, or answer approval prompts.


Configuration

All persistent state lives in ~/.agetor/ (override with AGETOR_DATA_DIR):

~/.agetor/
├── agetor.sqlite               # tasks, runs, events, projects, harnesses, preferences
├── worktrees/<task-id>/        # per-task git worktrees
├── bin/                        # installed approval hook + MCP launcher
└── harnesses/<id>/             # optional per-harness HOME (multi-account)

Environment variables

Variable Purpose Default
AGETOR_DATA_DIR Where the SQLite db, worktrees, and bin scripts live. ~/.agetor
AGETOR_API_PORT Localhost port the main process binds. 4317
AGETOR_CLAUDE_BIN Override the claude binary path. claude on PATH
AGETOR_CLAUDE_ARGS Extra args appended to every Claude spawn. (none)
AGETOR_CODEX_BIN Override the codex binary path. codex on PATH
AGETOR_CODEX_ARGS Extra args appended to every Codex spawn. (none)
AGETOR_TMUX_BIN Override the tmux binary path. tmux on PATH
AGETOR_CLAUDE_DRIVER Set to fake to skip tmux + the real CLI (test-only). unset

Per-harness bin, home, and env overrides are configured through the Settings dialog and stored in SQLite — they take precedence over the corresponding env vars.


Concepts

Tasks, columns, and runs

A task is a prompt + workdir + agent. It lives in one of six columns:

Column Meaning
Backlog Queued, not started.
Ready Created via "Run task" but waiting on pre-flight.
Running Agent is actively producing output.
Blocked Agent is waiting on an approval, question, or plan review.
Review Last run exited 0. The diff is yours to inspect.
Done You've decided you're satisfied.

A run is a single invocation of the agent on a task. Tasks accumulate run history; the run panel can replay any past run's events.

Harnesses

A harness is a named agent configuration. The two built-ins (claude-code, codex) wrap each CLI directly. User-defined harnesses are aliases that wrap the same underlying kind with extra env, an alternate binary, or — most usefully — a per-account $HOME override. That last knob lets you run a second Claude or Codex account in parallel without their logins overwriting each other.

Add a harness from Settings → Harnesses. Templates pre-fill common patterns.

Modes, models, and effort

Each task picks:

  • a mode — how much permission the agent has (auto, ask, acceptEdits, plan, bypass — exposed per agent),
  • a model — Opus / Sonnet / Haiku for Claude, GPT-5 / GPT-5 Codex for Codex,
  • an effort level — reasoning depth, where the model supports it.

The picker filters incompatible combinations (e.g. effort is hidden on Haiku 4.5 because Anthropic's API doesn't accept it there).

Worktree isolation

When isolation: "worktree" (the default), starting a task in a git repo:

  1. Resolves the base ref to a sha (pinned on the row — re-runs reproduce).
  2. Creates ~/.agetor/worktrees/<task-id>/ on a fresh branch off that sha.
  3. Spawns the agent with that path as cwd.

Worktree teardown happens automatically on task delete: git worktree remove --force plus git branch -D, with an rm -rf fallback for the case where the user moved workdir out from under us.

Set isolation to "none" to run directly in workdir — useful for one-off scripts where a worktree would be overhead.

Approvals and clarifying questions

When Claude is about to use a tool, the Agetor-installed PreToolUse hook posts the tool name and input to 127.0.0.1:<port>/approvals. The run panel renders a card; the user clicks Allow, Allow always, or Deny. "Allow always" persists a (task, tool) rule in SQLite so future fires are auto-allowed without bothering you.

When Claude wants to ask a structured question, it calls the ask_user tool on Agetor's MCP server. The webview renders radios / checkboxes / textarea, and the MCP server's response unblocks the agent.

AskUserQuestion and ExitPlanMode from Claude's built-in tools are intercepted the same way.


HTTP API

The main process exposes a small JSON + SSE API on 127.0.0.1:$AGETOR_API_PORT. All routes except /health require Authorization: Bearer $AGETOR_API_TOKEN (or ?token=... for EventSource).

Method Path Purpose
GET /health Liveness probe.
GET /info App version + boot info.
GET /defaults Home dir and other defaults the UI needs to expand ~.
GET / POST /tasks List or create tasks.
GET / PATCH / DELETE /tasks/:id Inspect, edit allow-listed fields, or delete a task.
POST /tasks/:id/start Start a run for the task.
GET /tasks/:id/runs Run history for the task (newest first).
GET /tasks/:id/events SSE: unified event stream across all runs for the task.
POST /runs/:id/cancel Send Ctrl-C to the in-progress run; tmux session survives.
POST /runs/:id/input Send a follow-up user message (Claude only).
GET /runs/:id/events SSE: events for a single run (replays history, then streams live).
GET / POST / DELETE /harnesses[...] Manage harness configs.
GET /agents Per-harness availability + version probes.
GET /agent-models Models discovered by probing each CLI.
GET /agent-commands Slash commands supported by the active agent.
POST /approvals/:id/answer Resolve a pending tool approval.
POST /questions/:id/answer Resolve a pending ask_user question.
POST /ask-questions/:id/answer Resolve an intercepted AskUserQuestion.
POST /plan-approvals/:id/answer Resolve an intercepted ExitPlanMode.
GET /tasks/:id/interactions/pending Anything currently blocking the task.
GET / POST / DELETE /projects[...] Working-directory shortcuts shown in the New Task form.
GET / PATCH /preferences[...] Per-user preferences (key/value).
POST /open-path Reveal a path in Finder / Files.
GET /events SSE: global lifecycle stream (toasts, native notifications).

The full route list is in src/bun/server.ts.


Commands

bun install                                # install deps
bun run dev                                # Electrobun, loads packaged webview
bun run dev:hmr                            # Vite + Electrobun in parallel (preferred for UI work)
bun run build                              # production bundle (vite build → electrobun build)
bun run build:canary                       # canary channel build
bun run build:stable                       # stable channel build
bun run typecheck                          # tsc --noEmit; must be green
bun test                                   # full test suite (Bun's test runner)
bun test src/bun/orchestrator.test.ts      # single file
bun test -t "createTask"                   # by test name

Project layout

src/
├── bun/                       # main process: API, orchestration, persistence
│   ├── index.ts               # entrypoint: menus, reconcile orphans, start server, open window
│   ├── server.ts              # Bun.serve routes (HTTP + SSE)
│   ├── orchestrator.ts        # task lifecycle, spawn/cancel/cleanup, event fanout
│   ├── agents.ts              # buildCommand / spawnAgent — single source of truth per agent
│   ├── claude-tmux.ts         # tmux session lifecycle + JSONL tailer
│   ├── agent-status.ts        # availability + version probes per harness
│   ├── agent-discovery.ts     # async model-list discovery
│   ├── worktree.ts            # git worktree create/remove
│   ├── interactions.ts        # approvals + questions registry (in-memory)
│   ├── hook-installer.ts      # writes PreToolUse hook + MCP launcher per task
│   ├── hooks/                 # bundled hook script + system prompt
│   ├── mcp/agetor-mcp.ts      # stdio MCP server exposing `ask_user`
│   ├── commands.ts            # slash-command catalogue per agent
│   ├── db.ts                  # bun:sqlite + bindings
│   ├── migrate.ts             # numbered SQL migration runner
│   └── migrations/            # 001_init.sql … 013_harnesses.sql
├── mainview/                  # React webview (kanban, run panel, settings)
│   ├── App.tsx
│   ├── components/
│   │   ├── kanban/            # board, columns, cards, run panel, pickers
│   │   ├── settings/
│   │   └── ui/                # shadcn-style primitives (hand-rolled)
│   └── lib/api.ts             # typed wrapper around the Bun HTTP API
└── shared/                    # types both processes import (no runtime side effects)
    └── types.ts               # Task, Run, Harness, AGENT_OPTIONS, etc.

Security model

  • The API binds to 127.0.0.1 only and is gated on a per-launch random token. Even if Access-Control-Allow-Origin were misconfigured, a foreign origin can't read the token.
  • The token is delivered to the webview via a WKUserScript preload (not a query string or hash, so it never appears in the URL bar or logs).
  • Agents run with your full shell privileges in whatever workdir the task names. Agetor does not sandbox them. Treat it like running the agent CLI directly — because that's exactly what it's doing.
  • Approval rules are scoped to a single task, never globally. Each new task starts fresh.

If you find a security issue, please disclose it privately to alamo@alamoweb.com.br rather than filing a public issue.


Contributing

Issues and pull requests are welcome — including AI-assisted and fully vibecoded ones. If Claude, Codex, Cursor, or any other agent wrote most of the diff, that's fine. Just hold it to the same bar as a hand-written PR: tests green, types clean, and a description that makes the why obvious. (Agetor itself is built to make this kind of contribution easier — eat your own dog food.)

A few conventions worth knowing before opening a PR:

  • bun run typecheck must be green. TypeScript is strict (noUncheckedIndexedAccess is on).
  • Tests are required for behavioural changes. The orchestrator and Claude-tmux modules have particularly thorough coverage; mirror that style. Tests must set AGETOR_DATA_DIR at the top of the file (not in beforeAll) to avoid the production-db-pollution trap documented in src/bun/db.ts.
  • Never edit an already-applied migration. Add a new numbered .sql file and append it to src/bun/migrations/index.ts. The migration runner only tracks ids, so silent edits will diverge from existing user databases.
  • Shared types are runtime-free. src/shared/types.ts is imported by both processes — no Node, Bun, React, or DOM imports there.
  • Agent options live in AGENT_OPTIONS. To add a model or mode, extend the curated list and teach buildCommand how to translate it. Unknown ids are passed through verbatim so users can paste a fresh release before Agetor knows about it.

Adding a new agent kind:

  1. Extend the AgentKind union in src/shared/types.ts.
  2. Add an entry to AGENT_OPTIONS with models / modes / effort.
  3. Add a branch in buildCommand (src/bun/agents.ts) and spawnAgent.
  4. Surface availability hints in agent-status.ts.
  5. The orchestrator and UI pick it up automatically.

The architecture and the gotchas worth knowing are documented in CLAUDE.md. Reading that file before your first PR is the highest-leverage thing you can do.


Roadmap

This is an early-stage project. Things on the near-term list:

  • An uninstall flow that strips the PreToolUse hook and MCP-server entries from .claude/settings.local.json across every repo Agetor touched.
  • First-class Linux and Windows builds (currently configured but untested).
  • More agent kinds: Cursor agents, Aider, Gemini CLI.
  • Optional Slack / native push notifications on terminal state, not just toasts.

License

MIT © 2026 Alamo Saravali


Acknowledgements