{"id":50963039,"url":"https://github.com/everruns/yolop","last_synced_at":"2026-07-04T04:03:33.898Z","repository":{"id":361713409,"uuid":"1250876768","full_name":"everruns/yolop","owner":"everruns","description":"Everruns Coding Agent","archived":false,"fork":false,"pushed_at":"2026-06-16T23:11:58.000Z","size":31048,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T23:16:56.994Z","etag":null,"topics":["acp","ai-agents","ai-coding","coding","everruns"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/everruns.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-27T03:38:41.000Z","updated_at":"2026-06-16T22:50:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/everruns/yolop","commit_stats":null,"previous_names":["everruns/yolop"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/everruns/yolop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fyolop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fyolop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fyolop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fyolop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/everruns","download_url":"https://codeload.github.com/everruns/yolop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fyolop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34499405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acp","ai-agents","ai-coding","coding","everruns"],"created_at":"2026-06-18T16:32:54.342Z","updated_at":"2026-07-04T04:03:33.891Z","avatar_url":"https://github.com/everruns.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yolop\n\nA terminal coding agent built on\n[`everruns-runtime`](https://crates.io/crates/everruns-runtime). One binary\nthat plans, edits, runs, and verifies code in your repository — autonomous by\ndefault, with persistent sessions, agent skills, MCP servers, and editor\nintegration over the Agent Client Protocol.\n\n![yolop upgrading a project's dependencies](https://raw.githubusercontent.com/everruns/yolop/main/docs/demo.gif)\n\n## Origin of the name\n\n`yolop` comes from the Ukrainian `Йолоп`: a dummy, fool, or not-too-bright\nperson. The name was meant to sound clever and funny in Ukrainian while also\ndescribing the agent's starting point: yolop does not believe in per-tool\napproval pop-ups. It uses an AI-judgement approach instead — autonomous by\ndefault, with [soft approval](./docs/features/approvals.md) for critical\nmoments when you want spoken consent and an audit trail.\n\n## Install\n\n```bash\nbrew install everruns/tap/yolop\n```\n\nWorks on macOS (arm64/x86_64) and Linux (x86_64). If your Homebrew enforces\ntap trust checks, trust the tap once first with `brew trust --tap everruns/tap`.\nBuilding from source instead? `cargo install yolop --locked`.\n\n## Quick start\n\n```bash\ncd your/repo\nyolop\n```\n\nFirst launch with no credentials opens a guided, keyboard-driven setup:\nprovider → credentials → model. Or set a provider key and go:\n\n```bash\nOPENAI_API_KEY=sk-… yolop\n\nyolop -C /path/to/repo        # work in a different workspace\nyolop -p \"summarize the build setup\"   # one-shot, no TUI, prints to stdout\nyolop --provider llmsim -p \"hi\"        # offline demo, no API key required\n```\n\n## Features\n\n### Agent core\n\n- **Autonomous by default** — yolop runs writes, edits, deletes, and bash\n  commands without prompting. A standing **write blocklist** rejects writes\n  into `.git/`, `node_modules/`, `target/`, `dist/`, `build/`, `.next/`,\n  `.venv/`, `venv/`, `.tox/`, `.gradle/` at any depth; reads are unrestricted\n  inside the workspace.\n- **Soft approval** — an optional spoken-consent layer for critical actions.\n  yolop batches the safe work and pauses to ask, in plain chat, only before\n  destructive or outward-facing steps; you approve by replying \"yes\". The\n  paranoia level (`protective` / `normal` / `off`) is shown in the status bar\n  and set with `/setup approval \u003clevel\u003e` (or just by telling yolop to be more\n  or less careful). See [Soft approval](#soft-approval) below.\n- **TUI chat** (ratatui): scrolling transcript, multiline composer, status\n  bar (with a `bg` count whenever the session has background tasks), slash commands\n  (`/help`, `/tools`, `/mcp`, `/cwd`, `/setup`, `/model`, `/effort`, `/goal`,\n  `/shell`, `/background`, `/clear`, `/quit`), a read-only background-tasks panel\n  toggled with `Ctrl+B`, `!\u003ccommand\u003e` as a direct shell shortcut, and\n  natural-language requests for terminal actions such as \"exit\" or \"clear the screen\".\n- **Side questions** — `/btw \u003cquestion\u003e` answers a question about the current\n  session out-of-band: same context as the main task, no tools, and nothing\n  added to the conversation history.\n- **Goal loops** — `/goal \u003ccondition\u003e` keeps working across turns until a\n  separate evaluator model confirms the condition from the transcript; use\n  `/goal` for status and `/goal clear` to stop early. Works in `--print` mode\n  (`yolop -p \"/goal …\"`). See [`specs/goal.md`](./specs/goal.md).\n- **Planning** — `write_todos` keeps multi-step tasks on track, and\n  loop detection stops the model from retrying the same failing tool call.\n- **One-shot mode** — `--print` runs a single prompt non-interactively, for\n  scripts and CI.\n\n### Tools\n\n- **Filesystem** — `read_file`, `write_file`, `edit_file`, `list_directory`,\n  `grep_files`, `delete_file`, `stat_file`, backed by the real workspace disk.\n- **Repo map** — `repo_map` and `repo_symbols` build an on-demand\n  multi-language symbol overview for broad codebase orientation before\n  targeted grep/read.\n- **AST grep** — `ast_grep` runs read-only structural pattern search with\n  ast-grep syntax across Rust, Python, TypeScript/TSX, JavaScript/JSX, C#,\n  Go, CSS, HTML, and Bash.\n- **Shell** — `bash -lc` from the workspace root, with a 120 s wall-clock\n  timeout and per-stream 1 MiB output cap; large output is spilled to disk\n  under the session folder and stays readable for model tool calls. Use\n  `/shell \u003ccommand\u003e` or `!\u003ccommand\u003e` in interactive sessions to run a command\n  directly with bounded inline output.\n- **Background tasks** — `background_run` starts a shell command that runs\n  detached from the current turn (e.g. `gh pr checks \u003cpr\u003e --watch` waiting on\n  CI), and `background_agent` spins off a focused sub-agent (its own child\n  session, same tools and workspace) for a self-contained piece of work —\n  optionally on a cheaper model (same provider) via its `model` argument, so an\n  expensive lead can delegate grunt work;\n  `background_list`, `background_output`, and `background_cancel` track and read\n  them. Output streams to the session folder and a task's *result* survives a\n  restart (a task still running when yolop exits is restored as `interrupted`; a\n  sub-agent's child session is resumable with `--session`). When a task finishes\n  while the TUI is idle, yolop proactively wakes the agent with a turn so it\n  reacts without waiting for your next prompt (turn off with the `proactive_wake`\n  setting). Concurrent tasks are capped to keep fan-out bounded.\n  See [`specs/background.md`](./specs/background.md).\n- **Web** — `web_fetch` (HTTP GET/HEAD with markdown/text conversion, DNS-pinned\n  SSRF protection) and `duckduckgo_search` (free, no API key). Setting\n  `EVERRUNS_SYSTEM_ALLOWLIST_ENABLED=true` restricts `web_fetch` to the\n  runtime's curated allowlist of well-known public resources (package\n  registries, source hosting, AI/cloud provider APIs, OS mirrors); off by\n  default.\n\n### Context engineering\n\n- **`AGENTS.md`** — project instructions re-read every turn.\n- **Workspace context** — root, shell, local date/timezone, Git identity and\n  branch injected automatically.\n- **Memory** — a central, structured `MEMORY.md` of durable, cross-session\n  user memories, each with a title, timestamp, and body. Managed in natural\n  language (\"remember that I prefer terse answers\") via the `remember` /\n  `recall` / `forget` tools. Only memory *titles* are injected each turn\n  (progressive disclosure); bodies are recalled on demand, so the prompt stays\n  small however much you remember. Tunable through the generic capability-config\n  system (`disclosed_titles`, `recall_limit`, `soft_cap`). See\n  [`specs/memory.md`](./specs/memory.md).\n- **Skills** — `SKILL.md` files discovered from workspace\n  (`.agents/skills/`), global (`\u003cconfig_dir\u003e/yolop/skills/`), and system\n  (bundled) scopes, exposed via `list_skills`, `read_skill`, `write_skill`,\n  and `activate_skill`. Workspace/global skills installed after startup are\n  available immediately; the bundled `skill-management` skill covers search,\n  npx-style imports, and upgrades. See [`specs/skills.md`](./specs/skills.md).\n- **Infinity context** — older history is trimmed out of the live prompt but\n  stays queryable via `query_history`, so long sessions don't hit the wall.\n- **Tool search** — provider-agnostic deferred tool loading: core file/shell\n  tools stay loaded, long-tail tools are hidden until the model pulls them in\n  on demand, saving input tokens on every provider. See\n  [`specs/tool-search.md`](./specs/tool-search.md).\n- **Prompt caching** — Anthropic prompt-caching markers out of the box.\n\n### Extensibility\n\n- **MCP servers** — extra tools from local (stdio) or remote (HTTP)\n  [Model Context Protocol](https://modelcontextprotocol.io) servers via\n  `.mcp.json` (see [MCP servers](#mcp-servers)).\n- **Hooks** — workspace and global hook files can block, mutate, or audit\n  agent actions through the upstream `user_hooks` capability. Configure them\n  by chatting with yolop or by editing `hooks.json`. See\n  [`docs/features/hooks.md`](./docs/features/hooks.md).\n- **Editor integration** — `--acp` speaks the\n  [Agent Client Protocol](https://agentclientprotocol.com) over stdio, so\n  editors such as Zed can drive yolop as an external agent (see\n  [Editor integration](#editor-integration-acp)).\n- **Sessions** — every run writes a durable per-session event log; resume any\n  conversation with `--session \u003cid\u003e` (see\n  [Session persistence](#session-persistence)).\n\n### Providers\n\n| Provider   | Credential                            | Default model     |\n| ---------- | ------------------------------------- | ----------------- |\n| OpenAI     | `OPENAI_API_KEY`                      | `gpt-5.5`         |\n| Codex subscription | browser/device ChatGPT login or `CODEX_ACCESS_TOKEN` | `gpt-5.5` |\n| Anthropic  | `ANTHROPIC_API_KEY`                   | `claude-sonnet-4-5` |\n| OpenRouter | `OPENROUTER_API_KEY`                  | `openai/gpt-5.5`  |\n| Google     | `GEMINI_API_KEY` / `GOOGLE_API_KEY`   | `gemini-2.5-flash` |\n| Ollama     | `OLLAMA_BASE_URL` / `OLLAMA_API_KEY`  | `llama3.2`        |\n| Custom     | `CUSTOM_BASE_URL` (+ optional `CUSTOM_API_KEY`) | — (set via `/setup`) |\n| llmsim     | none (offline simulator)              | —                 |\n\nPick explicitly with `--provider`, override the model with `-m/--model`.\n**Codex subscription** signs in through ChatGPT and uses the Codex backend\ndirectly; it does not shell out to the Codex CLI.\n**Custom** is any OpenAI-compatible Chat Completions endpoint (vLLM,\nllama.cpp, LM Studio, hosted gateways, …): point `CUSTOM_BASE_URL` at it or\nconfigure the base URL, optional key, and model interactively via `/setup`.\n\n### Git attribution\n\nEnabled by default and configurable. When yolop creates commits, it keeps\nyour git author/committer identity and appends\n`Co-Authored-By: yolop \u003cyolop@everruns.com\u003e` once. PR descriptions created or\nedited through `gh` get a `Generated with yolop` footer. Disable with\n`/setup attribution off`.\n\n### Soft approval\n\nSoft approval is prompt-engineering, not a hard gate: yolop is told, in its\nsystem prompt, to batch safe work and pause for **spoken** consent only at the\ncritical moments. The model decides what is critical; you approve in plain\nlanguage (\"yes\", \"approved\"); each granted approval is recorded to the session\nevent log for audit (via the `record_approval` tool). There is no separate\napproval UI — consent lives in the conversation.\n\nA single central level, `approval_mode`, tunes how cautious yolop is:\n\n| Level        | yolop pauses before…                                                  |\n|--------------|------------------------------------------------------------------------|\n| `protective` | any state-changing action (writes, commits, pushes, installs)          |\n| `normal`     | only destructive/irreversible or outward-facing actions (the default)  |\n| `off`        | nothing — fully autonomous, no soft-approval prompt                     |\n\nThe current level is always shown in the status bar. Change it with\n`/setup approval \u003cprotective\\|normal\\|off\u003e`, or just ask yolop to be more or\nless careful (\"stop asking me\", \"yolo mode\") — it switches the level itself.\nThe setting is saved to `settings.toml`, so it persists across sessions.\n\nSoft approval is judgement, not a guarantee. For deterministic enforcement\n(hard-blocking a tool), use [hooks](specs/hooks.md); the two compose.\nFor the public user-facing details, see\n[Approvals](./docs/features/approvals.md).\n\n## Editor integration (ACP)\n\nyolop implements the agent side of the [Agent Client\nProtocol](https://agentclientprotocol.com). Launch it with `--acp` and it\nspeaks newline-delimited JSON-RPC 2.0 over stdin/stdout: the editor performs\nthe `initialize` handshake, opens a session with `session/new`, and sends\nturns with `session/prompt`; yolop streams back assistant text, reasoning,\ntool calls, and plans as `session/update` notifications. Editors can also\nload an existing yolop session with `session/load`; yolop replays the persisted\nconversation history and continues from the same JSONL session log used by\nCLI `--session`.\n\nTo set up Zed:\n\n```bash\nyolop into zed\n```\n\nThat adds a custom ACP agent server to `~/.config/zed/settings.json` using\nthe current yolop executable, preserving any existing `env` and extra\nsettings on re-run. Then pick **yolop** in Zed's agent panel. See\n[`specs/acp.md`](./specs/acp.md) for the full protocol surface, mappings, and\ncurrent limitations.\n\n## MCP servers\n\nYolop pulls in extra tools from MCP servers — remote (Streamable **HTTP**)\nand local (**stdio**, a child process) — configured in the standard\n`.mcp.json` shape every MCP client understands. Two scopes are read and\nmerged (workspace overrides global by name):\n\n- **workspace**: `\u003cworkspace_root\u003e/.mcp.json`\n- **global**: `\u003cconfig_dir\u003e/yolop/mcp.json` (e.g. `~/.config/yolop/mcp.json`)\n\n```json\n{\n  \"mcpServers\": {\n    \"docs\": {\n      \"type\": \"http\",\n      \"url\": \"https://example.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${DOCS_TOKEN}\" }\n    },\n    \"fs\": {\n      \"type\": \"stdio\",\n      \"command\": \"mcp-server-filesystem\",\n      \"args\": [\"${WORKSPACE}\"],\n      \"env\": { \"RUST_LOG\": \"info\" }\n    }\n  }\n}\n```\n\n- `type` defaults to `http`; HTTP servers need a `url`, stdio servers need a\n  `command`.\n- String values support `${VAR}` expansion from the environment, so secrets\n  stay out of the file (an unset `${VAR}` is left as-is so it's easy to spot).\n- Discovered tools are exposed to the model as `mcp_\u003cserver\u003e__\u003ctool\u003e`;\n  `/mcp` lists the configured servers.\n\nTrust model: HTTP requests keep yolop's DNS-pinned SSRF protection; stdio\nservers run local processes you listed yourself, so authoring `.mcp.json` is\nthe act of consent. MCP tools run autonomously like the rest of yolop's\ntools. See [`specs/mcp.md`](specs/mcp.md).\n\n## Reference\n\n### Flags\n\n| Flag                       | Description                                                          |\n| -------------------------- | -------------------------------------------------------------------- |\n| `-C, --cwd \u003cPATH\u003e`         | Workspace root (default: current dir)                                |\n| `--provider \u003cP\u003e`           | Force `anthropic`, `codex`, `openai`, `google`, `openrouter`, `ollama`, `custom`, or `llmsim` |\n| `-m, --model \u003cID\u003e`         | Override the model id for the chosen provider                        |\n| `-p, --print \u003cPROMPT\u003e`     | Run one prompt non-interactively and print the result                |\n| `--acp`                    | Speak the Agent Client Protocol over stdio (for editors like Zed)    |\n| `--session \u003cID\u003e`           | Resume a previous session by id                                      |\n| `--session-dir \u003cPATH\u003e`     | Override the parent directory for session folders                    |\n| `--reasoning-effort \u003cE\u003e`   | Reasoning effort override when the selected model profile supports it |\n\n### Commands\n\n| Command            | Description                                     |\n| ------------------ | ----------------------------------------------- |\n| `yolop version`    | Print yolop, commit, and runtime versions       |\n| `yolop into zed`   | Configure yolop as a custom ACP agent in Zed    |\n\n`RUST_LOG` is honored for the underlying tracing layer (writes to stderr).\n\n### Provider env vars\n\n| Env var                         | Effect                                                       |\n| ------------------------------- | ------------------------------------------------------------ |\n| `OPENAI_API_KEY`                | Select OpenAI unless `--provider` overrides                  |\n| `CODEX_ACCESS_TOKEN`            | Select Codex subscription auth unless a higher-priority provider is configured |\n| `ANTHROPIC_API_KEY`             | Select Anthropic when OpenAI is not configured               |\n| `OPENROUTER_API_KEY`            | Select OpenRouter when OpenAI/Anthropic are not configured   |\n| `OPENROUTER_BASE_URL`           | Optional, defaults to `https://openrouter.ai/api/v1`         |\n| `GEMINI_API_KEY` / `GOOGLE_API_KEY` | Select Google Gemini via its OpenAI-compatible endpoint  |\n| `GOOGLE_BASE_URL`               | Optional, defaults to `https://generativelanguage.googleapis.com/v1beta/openai` |\n| `OLLAMA_BASE_URL`               | Select Ollama, defaults to `http://localhost:11434/v1`       |\n| `OLLAMA_API_KEY`                | Optional, defaults to `ollama` for local Ollama              |\n| `CUSTOM_BASE_URL`               | Select the custom OpenAI-compatible endpoint (beats the saved base URL) |\n| `CUSTOM_API_KEY`                | Optional key for the custom endpoint (a placeholder is sent otherwise) |\n| `EVERRUNS_CLI_MODEL`            | Override the auto-selected default model (beats the saved model) |\n| `EVERRUNS_CLI_REASONING_EFFORT` | Reasoning effort override when the selected model profile supports it |\n\n### Settings\n\nA small TOML settings file persists the preferred provider, per-provider\nmodel picks, custom endpoint base URLs, the soft-approval level\n(`approval_mode`), Codex subscription login metadata, and (optionally)\nprovider API tokens across runs:\n`\u003cconfig_dir\u003e/yolop/settings.toml` —\n`~/.config/yolop/settings.toml` on Linux,\n`~/Library/Application Support/yolop/settings.toml` on macOS,\n`%APPDATA%\\yolop\\settings.toml` on Windows.\n\nThe TUI's `/setup`, `/model`, and `/effort` commands update the active\nprovider, saved API keys, current model, reasoning effort, or offline demo\nmode. The `/setup` provider picker shows which providers are already\nconnected (env key, saved key/login, or no key needed); selecting a connected one\njumps straight to model selection, and `c` opens key/base-URL configuration\nfor any provider. Provider, model, and custom base URL choices are written\nto this file.\n\nThe model picker queries the provider's models API live (OpenAI, Anthropic,\nand OpenRouter via the everruns drivers; Ollama, Gemini, and other\nOpenAI-compatible endpoints via `GET \u003cbase\u003e/models`), enriched with\nhuman-readable names and descriptions from the everruns model profiles. A\ncurated shortlist is shown until the API responds — or instead of it, when\nlisting is unavailable — and the \"Custom...\" entry always accepts any model\nid.\n\nProvider resolution at startup:\n\n1. `--provider` flag (always wins)\n2. Saved `default_provider` setting (the legacy `provider` key is still read)\n3. Auto-detect: the first provider in the order **OpenAI → Codex →\n   Anthropic →\n   OpenRouter → Google → Ollama → Custom** with either a matching env var or\n   a saved token/login/base URL (the provider order decides the tiebreak, not the\n   credential source)\n4. Fall back to OpenAI's default model and open setup so a provider/API key\n   can be configured\n\nThe model saved by `/setup model` for the resolved provider is restored,\nunless `-m/--model` or `EVERRUNS_CLI_MODEL` overrides it. When the resolved\nprovider has no saved model, the global `default_model` setting (if set) is\napplied as a cross-provider fallback. At runtime, the\nper-provider env var (`OPENAI_API_KEY`, etc.) always beats the saved token,\nso a per-run env override is always possible. `/model \u003cid\u003e` opens the model\npicker prefilled for the active provider. Reasoning effort can be changed at\nruntime with the `/effort` modal or `/setup effort \u003clevel\u003e` when the selected\nmodel profile exposes effort levels. The available values and default come from\nthat model profile, so they can vary by model.\n\n`/setup` can store an API token under `[tokens]` in the settings file. The\nCodex subscription provider stores OAuth data under `[codex_auth]` instead.\nfile is written with `0o600` on Unix (owner-only) and stored token values are\nnever echoed — but it is plain text on disk, so treat it the same way you\nwould `~/.aws/credentials`.\n\nThe settings file is also **schema-described**: every key carries a title,\ndescription, type, default, and examples (see `specs/configuration.md`). yolop\nitself can read and edit it through the `get_config` and `set_config` tools or\nthe `yolop-config` skill — for example, \"use anthropic by default\", \"store my\nOpenAI key\", or \"set the default model to gpt-5.5 high\". Unknown keys in the\nfile are ignored, never fatal, so the format stays forward-compatible.\n\n### Session persistence\n\nEvery run writes a durable per-session folder under the platform-native user\ndata directory:\n\n| OS      | Default location                                                 |\n|---------|------------------------------------------------------------------|\n| Linux   | `$XDG_DATA_HOME/yolop/sessions/\u003csession_id\u003e/` (typically `~/.local/share/…`) |\n| macOS   | `~/Library/Application Support/yolop/sessions/\u003csession_id\u003e/` |\n| Windows | `%APPDATA%\\yolop\\sessions\\\u003csession_id\u003e\\`                   |\n\nThe event log lives at `\u003csession_folder\u003e/events.jsonl`; the workspace root is\nstored in `\u003csession_folder\u003e/workspace.json`; large tool output is spilled under\n`\u003csession_folder\u003e/outputs/`. On Unix the session folder is `0o700` and the log\nand workspace metadata are `0o600` (owner-only). The log keeps everything\nneeded to restore the transcript and provider continuation state on resume —\nincluding prompts, tool arguments and output, and reasoning artifacts.\n\nTo continue a previous conversation:\n\n```bash\nyolop --session session_019e3db018a17450aba5407af5777237\n```\n\nWhen no `-C/--cwd` is supplied, resume uses the workspace root saved for that\nsession instead of the shell's current directory. Pass `-C \u003cPATH\u003e` with\n`--session` to intentionally move the resumed session to a different\nworkspace.\n\n`--session-dir \u003cPATH\u003e` overrides the parent storage location (useful for\nkeeping per-workspace session histories in `\u003cworkspace\u003e/.yolop/sessions/`).\n\n**Treat session logs as you would shell history.** They contain every prompt\nyou typed, every string passed to `bash` / `write_file` / `web_fetch`, tool\noutput, and reasoning artifacts — deliberately unredacted, because providers\nneed them to resume encrypted reasoning across sessions. There is no\nretention policy or rotation. If a session should not be persisted, point\n`--session-dir` at a path you can wipe (e.g. a `tmpfs`) or delete the JSONL\nafter the run.\n\n## Contributing\n\nDevelopment setup, validation commands, and local smoke tests live in\n[`CONTRIBUTION.md`](./CONTRIBUTION.md).\n\nPlease report vulnerabilities through [`SECURITY.md`](./SECURITY.md), and follow\nthe project [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) when participating.\n\n## Benchmarking\n\n[`evals/`](./evals/) holds yolop's [Mira](https://github.com/everruns/mira) eval\nstudies. [`evals/swebench_verified/`](./evals/swebench_verified/) benchmarks yolop\non **SWE-bench Verified** and, behind the same interface, other terminal agents\n(claude-code, codex, pi) for head-to-head comparison — recording resolved-rate\nplus cost, tokens, turns, and tool usage per run. The `mira` host CLI drives it.\nSee [`evals/README.md`](./evals/README.md); `evals/swebench_verified/bootstrap.sh`\nsets it up.\n\n## Releases\n\nYolop ships to the `everruns/homebrew-tap` Homebrew tap and to crates.io as\nthe `yolop` crate. See [`specs/release.md`](./specs/release.md) for the\nrelease procedure and [`CHANGELOG.md`](./CHANGELOG.md) for what shipped in\neach version.\n\n## License\n\nMIT — see [`LICENSE`](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverruns%2Fyolop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feverruns%2Fyolop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverruns%2Fyolop/lists"}