Meris Agent
Meris Cloud (hosted SaaS) is proprietary and not in this repo — see CLOUD.md.
Model-agnostic terminal coding agent — Harness-first.
Agent = Model + Harness
North star: a self-evolving coding agent — the more you use it in a project, the better it fits your repo and habits. Evolution lives in the Harness (rules, skills, sessions), not in hoping the model remembers.
Meris ships a lean CLI (meris) plus a Harness layer you control: AGENTS.md, permissions, hooks, and Definition-of-Done sensors. Bring your own LLM (OpenAI-compatible or Anthropic).
What is the Harness?
Harness here is the agent harness — the project-specific layer around the model (Agent = Model + Harness). It is not the product name; the product is Meris.
| Layer | Where | Role |
|---|---|---|
| Project harness | Your repo: AGENTS.md, .meris/, PROGRESS.md |
Rules, skills, permissions, sessions — you edit these |
| Harness engine | This package: meris/harness/ |
Loads project files, runs the loop, sandbox, sensors |
| Harness docs | docs/harness/ |
Concepts and mechanics (optional copy via init-harness) |
Not the same as:
- OpenHarness — a separate open-source agent framework (no affiliation)
- Harness.io — a DevOps CI/CD platform (unrelated; same English word)
Details: docs/harness/concepts.md.
Install
From PyPI:
pip install meris-agent
pip install "meris-agent[tui]" # Textual TUI
pip install "meris-agent[anthropic]" # native Anthropic provider
pip install "meris-agent[mcp]" # MCP client
pip install "meris-agent[full]" # all optional deps
From source:
git clone https://github.com/meris-agent/meris.git
cd meris
pip install -e .
Requires Python 3.11+. Meris does not bundle a model — set an API key (see below).
Quick start
cd your-project
meris version
# Pick a provider preset (OpenAI, DeepSeek, Gemini, GLM, Qwen, Groq, Anthropic, Ollama, …)
export MERIS_PROVIDER=deepseek # or: openai | gemini | glm | moonshot | qwen | anthropic | ollama
export DEEPSEEK_API_KEY=sk-... # env name depends on provider — run: meris models show deepseek
meris models list # all presets + current env
meris init-harness .
meris doctor
meris ask "where is auth handled?"
meris plan "add rate limiting to /api/users"
meris run --approve "fix the failing test in tests/test_auth.py"
On Windows, use set VAR=value instead of export. Copy .env.example to .env for local overrides. Full vendor table: docs/MODELS.md. Step-by-step setup (中文): docs/USER_SETUP.md.
Commands
| Command | What it does |
|---|---|
meris ask "…" |
Read-only Q&A over your repo |
meris plan "…" |
Write a task list to .meris/plan/tasks.md (no code changes) |
meris run "…" |
Full agent: read / edit / bash / git tools |
meris run --approve "…" |
Same as run, but confirm each write/bash |
meris run --from-plan "…" |
Implement the saved plan |
meris run --no-sensor "…" |
Skip post-edit DoD sensors |
meris run --event-stream FILE |
Append JSONL loop events (- = stdout) |
meris exec "…" --json |
Headless run; JSON result on stdout (CI/scripts) |
meris review [--staged] |
Read-only git diff review (markdown checklist) |
meris harness check |
Static harness lint (paths, imports, DoD helpers) |
meris benchmark run |
Run benchmark task suite |
meris benchmark run --local-only |
Offline local tasks (no API) |
meris release check |
Pre-tag readiness (pytest, mock benchmark, harness) |
meris ratchet scan |
Passive harness evolution from failures |
meris ratchet digest |
Active habit mining from sessions |
meris models list |
Show all provider presets + current env |
meris models show <provider> |
Show model & env details for a provider |
meris doctor |
Check API key, model, and harness files |
meris init-harness . |
Scaffold AGENTS.md, .meris/settings.yaml, PROGRESS.md |
Harness (your project)
After meris init-harness, these files steer the agent in your repo:
| File | Role |
|---|---|
AGENTS.md |
Project rules, layout, DoD |
.meris/settings.yaml |
Tool permissions, sensors, hooks, MCP, models |
PROGRESS.md |
Cross-session progress notes |
.meris/skills/*.md |
Optional domain skills |
.meris/spec/*.md |
Optional structured spec workflow (requirements / design / tasks) |
Templates live in templates/. Example note-vault harness (Obsidian optional): docs/examples/ainote-vault/.
Configuration
End-user onboarding (install → API key → init-harness → doctor): docs/USER_SETUP.md.
Environment variables (common):
| Variable | Purpose |
|---|---|
OPENAI_API_KEY / LLM_API_KEY |
API key (OpenAI-compatible) |
MERIS_BASE_URL |
API base URL |
MERIS_MODEL |
Model name |
MERIS_PROVIDER=anthropic |
Use native Anthropic (ANTHROPIC_API_KEY) |
MERIS_NATIVE |
1/0 force on/off; unset + built meris-rs → auto native |
MERIS_NATIVE_PROVIDER |
0 to keep Python HTTP for chat while native harness on |
Context budget in .meris/settings.yaml:
"context": { "maxMessages": 48, "maxTokens": 32000, "maxToolTokens": 2000 }
Permissions — allow/deny tool patterns (bash globs, path blocks). See templates/settings.example.yaml.
Workflows
Plan → run
meris plan "add session prune command"
meris run --from-plan "implement the plan" --approve
Spec checklist
meris spec init "rate limiting"
meris spec status
meris spec next --note "REST API only"
meris run --from-spec "implement checklist"
Benchmark (harness regression)
meris benchmark list
meris benchmark run
Ratchet (passive: failures → harness; active: habits from history)
meris init-harness .
meris ratchet learn --init # project layout → proposals
# Passive (keep using these)
meris run --ratchet "your task" # after run: profile + scan proposals
meris benchmark run # failures → events.jsonl; may auto-scan
meris ratchet scan
meris ratchet analyze --last-fail # LLM proposals (needs API)
meris ratchet review # apply or reject interactively
# Active — repeated user themes → ask before writing harness
meris ratchet digest # rule-based; --llm for API pass
meris ratchet digest --dry-run
meris ratchet insights review # confirm → proposal → apply
meris ratchet profile --show # habits from approve_denied events
TUI
pip install "meris-agent[tui]"
meris tui --cwd . --mode run --approve
Interactive log + task input. Sessions panel on the left — Enter to resume, Ctrl+R latest, Ctrl+S refresh, Ctrl+L clear log. Enter or Ctrl+Enter sends a message.
MCP (external tools)
Add servers in .meris/settings.json:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
},
"remote": {
"transport": "sse",
"url": "http://localhost:8080/sse"
}
}
}
pip install "meris-agent[mcp]"
meris mcp list
Tools register as mcp_{server}_{tool}; resources and prompts as mcp_{server}_read_resource / mcp_{server}_get_prompt.
Sessions & parallel
Every run saves to .meris/sessions/{id}.json:
meris session list
meris session show abc123
meris session resume abc123
meris run "task" --session-id my-id
meris session prune --keep 10
Run multiple tasks:
meris parallel "explain auth" "explain db layer" --mode ask -j 2
meris parallel "fix test A" "fix test B" --mode run --isolate
In run mode, the agent can call subagent_run for read-only sub-tasks with isolated context.
Hooks & skills
Tool hooks (pre/post tool use) in settings.json:
{
"hooks": {
"preToolUse": [
{ "matcher": "bash", "command": "echo pre $MERIS_TOOL_NAME" }
],
"postToolUse": [
{ "matcher": "write_file|edit_file", "command": "echo post" }
],
"onSave": [
{ "matcher": "*.py", "command": "python -m ruff check $MERIS_SAVED_PATH" }
],
"onCommit": [
{ "command": "pytest tests/ -q" }
]
}
}
Env: MERIS_TOOL_NAME, MERIS_TOOL_ARGS, MERIS_TOOL_RESULT, MERIS_HOOK_PHASE.
Skills — add .meris/skills/{name}.md; the agent loads them via load_skill.
Optional: IDE & Rust
| Component | Docs |
|---|---|
| VS Code extension | extensions/vscode-meris/ · LOCAL_SETUP |
Rust core (meris-rs) |
meris native build · NATIVE_BINARY · auto native when binary present |
Windows one-shot dev setup: powershell -ExecutionPolicy Bypass -File scripts\setup-local.ps1
Documentation
| I want to… | Start here |
|---|---|
| Install & configure (中文详解) | docs/USER_SETUP.md |
| Browse all docs | docs/README.md |
| Switch LLM vendor | docs/MODELS.md |
| Understand Harness concepts | docs/harness/concepts.md |
| Learn Ratchet | docs/RATCHET_DESIGN.md |
Contributing
See CONTRIBUTING.md for dev setup, tests, and PR guidelines. Security reports: SECURITY.md.
| Topic | Link |
|---|---|
| Local dev (Rust, VS Code) | docs/LOCAL_SETUP.md |
| Harness architecture | docs/harness/architecture.md |
| Tests & DoD | docs/harness/testing.md |
| Meris Cloud (hosted SaaS) | Proprietary — CLOUD.md |
Naming: Meris · CLI meris · PyPI meris-agent · env MERIS_* · Harness dir .meris/
Repo layout:
meris/
├── meris/ # Python agent package
├── meris-rs/ # Optional Rust harness core
├── extensions/vscode-meris/
├── templates/
└── tests/
License
MIT — see LICENSE.
Metadata
Release files for meris-agent 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meris_agent-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / meris_agent-0.1.0-py3-none-any.whl
| Download URL | meris_agent-0.1.0-py3-none-any.whl |
|---|---|
| Size | 179.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5fddd9af93f296f43e0c532c932c6f0bebd9cb0987cf29851007993a126f960b
|
|
BLAKE2b-256 checksum How to use checksums |
fafd3b5850eff82a7df65777b5c041c992060b7fbb1870db8516c7b41a8d6f38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for meris-agent 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.