Memdoor 发布:单二进制 CLI 编码代理支持断点续跑

原标题:Memdoor: A team of 5 Qwen3.8-27B models beats Fable 5 on LiveCodeBench Hard
35AI 研判分

开源项目 Memdoor 推出轻量级编码与自动化代理,以单一 Go 静态二进制形式分发,无需 Docker 或 Python。该工具支持本地运行及 SSH 远程连接,具备无头模式、CI 集成及任务断点续跑能力,并引入前置决策模型以降低 Token 消耗。

报道正文

Memdoor Your daemon agents on every door. A lightweight coding and automation agent in a single CLI binary. Run it locally or connect over SSH to another machine — no Docker or Python required. Work interactively from a terminal, your IDE or phone, or start a run from a shell script, CI or a schedule and finish it from any of those, on a gateway you own. BYOK.

<p>One binary to deploy. A headless-first CLI. Multi-step jobs kept as files in your repo, with checks, approval gates and resume. Less of your token bill, through a decision model in front of the chat model.</p> <p> <a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/license-Apache%202.0-blue"></a> <a href="https://github.com/guregodevo/memdoor/actions/workflows/lint.yml"><img alt="CI" src="https://github.com/guregodevo/memdoor/actions/workflows/lint.yml/badge.svg"></a> <a href="https://github.com/guregodevo/memdoor/actions/workflows/installers.yml"><img alt="Installers" src="https://github.com/guregodevo/memdoor/actions/workflows/installers.yml/badge.svg"></a> <img alt="Go" src="https://img.shields.io/badge/Go-one%20static%20binary-00ADD8"> <img alt="Platforms" src="https://img.shields.io/badge/macOS%20%C2%B7%20Linux%20%C2%B7%20Windows-lightgrey"> </p> </div>

On this machine:

BASH
curl -fsSL https://memdoor.ai/install.sh | bash
export OPENROUTER_API_KEY=sk-or-...    # or ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, …
cd your-project && memdoor             # the first run sets the machine up

Or on a box you can ssh to, with nothing installed there:

BASH
curl -fsSL https://memdoor.ai/install.sh | bash          # here, once
memdoor --gateway ssh://you@box                           # installs memdoor on the box, starts its gateway, opens the window on it
memdoor --gateway ssh://you@box connect openrouter        # your key, kept on the box; every turn there runs on it
memdoor --gateway ssh://you@box run "fix the failing test" # the same box from a script or CI

The runs live on the box: close the laptop, the work goes on, and your phone or the next terminal opens the same conversation there.

No account. Telemetry off unless you turn it on. macOS, Linux, Windows, one static binary, Apache 2.0.

In GitHub Actions

One step in a workflow, on your key, with nothing to add to your repo (Marketplace):

YAML
on: pull_request
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: guregodevo/memdoor-action@v1
        with:
          workflow: pr-review
          openrouter-api-key: ${{ secrets.OPEN_ROUTER_API_KEY }}

Nine are built in:

  • pr-triage sorts a pull request for a maintainer: ready for review, needs work, or likely slop, from checks run in the job (the tests, claimed tests that are not there, functions nothing calls).
  • pr-review reviews the pull request, verifies each finding by running the code, and fails the job only on a blocker.
  • security-review does the same for security only: secrets, injection, path traversal, missing authorization.
  • write-tests writes tests for what the change touches, and fails the job when one shows the change is wrong.
  • pr-description writes the description: title, What, Why, How to test, Risk.
  • explain-failure reads a failed run's logs and the diff: the cause, file, and the fix.
  • issue-triage suggests labels, the kind, a summary and duplicates for a new issue.
  • fix-tests finds the test command, fixes the code until the tests pass, and leaves the fix in the working tree.
  • release-notes turns the commits since the last tag into Added / Changed / Fixed.

No key at all: local-model: Qwen3-8B-4bit instead of the key runs any of them on a model inside the runner (janis, one file, the model cached), in one model call. It is a free first pass, not a reviewer: on a free runner it caught an obvious and a subtle bug in about a minute each, and can file a correct change's own fix as a blocker.

Or workflow: <name> for your own, .memdoor/workflows/<name>/ in the repo. The job ends with the run's outcome (0 done, 2 failed, 1 stopped, 3 stopped at an approval gate) and its summary shows the review, the fix or the notes. Trigger on pull_request, never pull_request_target: GitHub gives a fork's pull request no secrets, so a stranger's code never runs beside your key.

On a ChatGPT Plus or Pro plan? Skip the key: memdoor connect chatgpt (or /connect chatgpt in the window) opens Sign in with ChatGPT, and your plan's allowance answers Memdoor's turns. A Claude subscription cannot be used this way (Anthropic's terms); Claude needs an API key.

No key at all? The first memdoor signs you in with OpenRouter in the browser, a free account included (or with ChatGPT), from a gateway on this machine, over ssh or on a box. An account with no credit runs on a free model picked from OpenRouter's list, and the connect says so: 50 requests a day, and the free hosts train on what they are sent, so a trial, not private code. Or no key at all: memdoor connect local finds a model running on this machine (janis, Ollama, llama.cpp, LM Studio), and nothing leaves it. janis is ours: one Go server that runs the open models on a Mac's GPU through MLX or on an NVIDIA box through CUDA, serves chat and the decision model with no key, and runs Qwen3-Coder-30B-A3B on a $0.71-an-hour Google L4; memdoor --gateway ssh://you@box connect local makes that box yours. And that box answers your laptop: memdoor peers add box http://box:18789 --dir ~/app names it, and @box:coder … in any conversation here runs the turn there, on the box's own model, and brings the answer back. Recorded on memdoor.ai: a laptop with no GPU asks, Qwen3.8-27B on an L4 through janis reads, patches and runs a Go program on the box, the window on the laptop shows it land.

Every run is a conversation on a gateway on your machine, whatever door it came in by: a terminal window, memdoor run from a script or CI, a cron schedule, your editor, or the page on your phone. The run a CI job started is the one you open with memdoor resume <id>, watch live, and answer. One gateway, every door (the walk through them, with exit codes).

BASH
memdoor run "fix the failing test"        # one turn, no wind

> (注:更多技术实现细节与完整 API 文档请查阅原项目 README)