{"id":46667501,"url":"https://github.com/tripledoublev/v100","last_synced_at":"2026-06-14T04:01:06.316Z","repository":{"id":342734923,"uuid":"1171394626","full_name":"tripledoublev/v100","owner":"tripledoublev","description":"Experimental harness for studying LLM-based agents through trace-based observability and evaluation.","archived":false,"fork":false,"pushed_at":"2026-05-24T16:38:28.000Z","size":2710,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T17:08:26.175Z","etag":null,"topics":["agent-framework","ai-agents","llm-agents","llm-evaluation","multi-agent"],"latest_commit_sha":null,"homepage":"","language":"Go","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/tripledoublev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-03-03T07:19:08.000Z","updated_at":"2026-05-24T16:38:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tripledoublev/v100","commit_stats":null,"previous_names":["tripledoublev/v100"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/tripledoublev/v100","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripledoublev%2Fv100","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripledoublev%2Fv100/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripledoublev%2Fv100/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripledoublev%2Fv100/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tripledoublev","download_url":"https://codeload.github.com/tripledoublev/v100/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripledoublev%2Fv100/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34308622,"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-14T02:00:07.365Z","response_time":62,"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":["agent-framework","ai-agents","llm-agents","llm-evaluation","multi-agent"],"created_at":"2026-03-08T20:02:32.832Z","updated_at":"2026-06-14T04:01:06.301Z","avatar_url":"https://github.com/tripledoublev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"542\" height=\"413\" alt=\"v100-logo\" src=\"https://github.com/user-attachments/assets/95a21844-e8a7-4232-8b4c-be268e160875\" /\u003e\n\n# v100: Engine for Agentic Research\n\n[![Release](https://img.shields.io/github/v/release/tripledoublev/v100?sort=semver)](https://github.com/tripledoublev/v100/releases)\n[![Go](https://img.shields.io/github/go-mod/go-version/tripledoublev/v100)](go.mod)\n[![Go Report Card](https://goreportcard.com/badge/github.com/tripledoublev/v100)](https://goreportcard.com/report/github.com/tripledoublev/v100)\n[![License: MIT](https://img.shields.io/github/license/tripledoublev/v100)](LICENSE)\n\nv100 is my engine for building, running, studying, and evolving autonomous coding agents under real constraints.\n\nIt is a concrete Go-based agent runtime with a CLI, Bubble Tea TUI, tool safety controls, durable memory, trace replay, benchmarking, evaluation, policy evolution, and long-running execution paths.\n\nI built v100 to close the loop between idea, execution, observation, and iteration.\n\n---\n\n## 🧠 Core Capabilities\n\nv100 operates on a fundamental principle: **autonomy requires visibility**. Every agent action is trackable, replayable, and inspectable.\n\n### 1. Advanced Solvers \u0026 Routing\nv100 implements multiple reasoning strategies (`Solvers`) that can be swapped or combined:\n- **`react`**: The classic reasoning loop, enhanced with watchdogs for tool denial and stall recovery.\n- **`plan_execute`**: A two-phase strategy where the agent previews a plan and executes it, with automatic replanning on failure.\n- **`smartrouter`**: Cost-performance escalation. It routes \"trivial\" idempotent tool calls (like reading files) to cheap models (e.g., Gemini Flash or local Ollama) and escalates to frontier models (e.g., MiniMax, Claude Opus) when a dangerous or complex mutation is required.\n- **`rlm`**: DSPy-style Recursive Language Model pattern with sub-model invocation.\n- **`miniglm`**: Intelligent provider switching between tool-focused and reasoning-focused models.\n\n### 2. Autonomous Loops\nv100 is designed for long-running, unattended execution:\n- **Wake Daemon (`v100 wake`)**: Runs on a recurring schedule. It can act as a `goal_generator` (mining TODOs and failures for next steps) or an `issue_worker` (autonomously picking open GitHub issues, implementing fixes, running local tests, pushing, and closing the issue).\n- **Research Loop (`v100 research`)**: A fully autonomous experiment loop. It proposes code changes, runs remote (Modal) or local experiments, parses a metric, and implements keep/discard (git commit vs. revert) logic automatically.\n\n### 3. Tooling \u0026 Safety\nTools are a first-class part of the runtime. The model interacts with the world through explicitly registered, schema-bound tools (40+ currently available):\n- **Safety boundaries**: Tools are marked `Safe` or `Dangerous`. Dangerous tools can require explicit operator confirmation, trigger mandatory \"Reflection\" turns (`Policy.ReflectOnDangerous`) to assess confidence, or be blocked entirely.\n- **External API guardrails**: ATProto and news tools use per-endpoint token-bucket rate limits and circuit breakers. `atproto_index`, `atproto_graph_explorer`, and `news_fetch` cap paginated requests at 100 items per call; repeated HTTP 429 responses emit structured alerts and open exponential backoff. `atproto_post` returns a dry-run preview unless `confirm=true` is supplied.\n- **Sandboxing**: Runs can be executed inside isolated Docker containers with strict **Network Tiers** to prevent unauthorized data exfiltration.\n- **Semantic analysis**: Includes tools like `sem_diff`, `sem_impact`, and `sem_blame` that understand code entities such as functions and classes.\n\n### 4. Memory \u0026 External Context\nv100 treats memory as runtime infrastructure:\n- **Durable Blackboard**: A shared workspace for agents to read and write ongoing findings.\n- **ATProto Integration**: Deep Bluesky integration (`atproto_index`, `atproto_recall`, `atproto_vibe_check`, `atproto_daily_digest`, `atproto_graph_explorer`). It indexes social feeds and profiles into vector embeddings for semantic RAG, summarizes feed activity, and explores follow graphs for real-time external context.\n\n### 5. Observability \u0026 Trace Replay\nv100 keeps surprising behavior explainable after the fact:\n- Every run emits a structured `trace.jsonl`.\n- `v100 replay \u003crun_id\u003e` lets you step through an agent's reasoning turn-by-turn after the fact.\n- Checkpoints allow you to resume interrupted runs seamlessly.\n\n---\n\n## 🗺️ Architecture at a Glance\n\nSix layers, tied together by a single rule: every action lands in a replayable trace.\n\n```mermaid\nflowchart TB\n    CLI[\"\u003cb\u003eCommand surface\u003c/b\u003e\u003cbr/\u003ecmd/v100 · run · wake · replay · eval\"]\n    RT[\"\u003cb\u003eExecution runtime\u003c/b\u003e\u003cbr/\u003einternal/core · loop · solvers · budgets · snapshots\"]\n    TOOLS[\"\u003cb\u003eTool layer\u003c/b\u003e\u003cbr/\u003einternal/tools · 40+ schema-bound tools · Safe / Dangerous\"]\n    PROV[\"\u003cb\u003eProvider layer\u003c/b\u003e\u003cbr/\u003einternal/providers · MiniMax · GLM · Anthropic · Gemini · Ollama\"]\n    MEM[\"\u003cb\u003eMemory \u0026 retrieval\u003c/b\u003e\u003cbr/\u003einternal/memory · blackboard · vector store · ATProto RAG\"]\n    EVAL[\"\u003cb\u003eEval \u0026 research\u003c/b\u003e\u003cbr/\u003einternal/eval · scoring · bench · experiments · evolve\"]\n\n    CLI --\u003e RT\n    RT --\u003e TOOLS\n    RT --\u003e PROV\n    RT --\u003e MEM\n    RT --\u003e EVAL\n    TOOLS -. effects .-\u003e SANDBOX[[\"Sandbox\u003cbr/\u003eDocker · network tiers\"]]\n    RT ==\u003e TRACE[(\"trace.jsonl\u003cbr/\u003ereplay · blame\")]\n```\n\nA single run is a budgeted loop where dangerous tool calls get gated before they touch the workspace, and the whole path is recoverable after the fact:\n\n```mermaid\nflowchart LR\n    A([run]) --\u003e B{solver}\n    B --\u003e C[reason]\n    C --\u003e D{tool call?}\n    D -- safe --\u003e E[execute]\n    D -- dangerous --\u003e F{confirm / reflect}\n    F -- approved --\u003e E\n    F -- denied --\u003e C\n    E --\u003e G[append event to trace]\n    G --\u003e H{budget left\u003cbr/\u003eand not done?}\n    H -- yes --\u003e C\n    H -- no --\u003e I([commit / exit])\n    I --\u003e J[(replay · blame)]\n```\n\nSee [`docs/architecture.md`](docs/architecture.md) for the layer-by-layer breakdown, the tool-safety gate, the wake daemon cycle, and smartrouter escalation.\n\n---\n\n## 🚀 Quick Start\n\n### 1. Install \u0026 Bootstrap\n\nPrebuilt releases are published on GitHub. Alternatively, build from source:\n\n```bash\n./scripts/build.sh\n```\n\nThat rebuilds `./v100` and updates the shell `v100` link. The underlying Go command is:\n\n```bash\ngo build -o v100 ./cmd/v100\n```\n\nBootstrap your configuration and check your environment:\n\n```bash\n./v100 config init\n./v100 doctor\n```\n\n`v100 doctor` validates `config.toml` plus behavior directories next to it\n(`agents/`, `policies/`, and `tasks/`). It reports malformed TOML, unknown or\ndeprecated keys, missing prompt files, missing referenced providers/tasks, and\nprovider fallback cycles before doing provider auth, tool binary, sandbox, and\n`runs/` write checks. Use `./v100 doctor --dry-run` to run only the config and\nbehavior-dir validation without network probes or filesystem write checks.\n\n### 2. Interactive \u0026 Unattended Runs\n\nStart a standard interactive run using MiniMax (the preferred provider):\n\n```bash\n./v100 run --provider minimax --workspace .\n```\n\nEnable Bubble Tea TUI for a better visual experience:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/tui-hello-internet.png\" alt=\"v100 TUI\" width=\"720\" /\u003e\n\u003c/p\u003e\n\n```bash\n./v100 run --provider minimax --tui --workspace .\n```\n\nBuilt-in TUI themes are `v100`, `mono`, `dracula`, and `catppuccin`.\nConfigure `[ui] theme = \"dracula\"`, set `V100_THEME=dracula`, or pass\n`--theme dracula` to `run`/`resume`.\n\nLeverage advanced solvers for planning or cost routing:\n\n```bash\n./v100 run --solver plan_execute --plan --workspace .\n./v100 run --solver smartrouter --workspace .\n```\n\nRun fully unattended (the agent executes until completion or budget exhaustion):\n\n```bash\n./v100 run --continuous --workspace .\n```\n\nAgent-run shell commands receive a minimal environment by default. To let a\nworkflow use GitHub CLI auth without exposing unrelated shell secrets, export a\ntoken and opt in explicitly:\n\n```toml\n[tools.auth.github]\nmode = \"env\"\nenv = \"GH_TOKEN\"\n```\n\n`[tools.env] allow = [\"GH_TOKEN\"]` is also supported for generic env\npassthrough. Values matching the configured redaction rules are scrubbed from\ntraces, streamed tool output, and model-visible tool results. Authenticated\nwrites still use the normal dangerous-tool confirmation flow.\n\n### 3. Inspecting the Engine\n\nBrowse recent runs, resume them, or replay their traces:\n\n```bash\n./v100 runs\n./v100 resume \u003crun_id\u003e\n./v100 replay \u003crun_id\u003e\n./v100 blame \u003crun_id\u003e \u003cfile_path\u003e  # See exactly which reasoning turn modified a file\n```\n\n---\n\n## 📂 Project Structure\n\n```text\ncmd/v100/          CLI commands\ninternal/core/     loop, solvers (react, plan, router), budgets, tracing, research, hooks\ninternal/tools/    40+ tool implementations (fs, git, web, atproto, semantic)\ninternal/providers/ provider adapters (MiniMax, GLM, Anthropic, Gemini, OpenAI, etc.)\ninternal/eval/     scoring, benchmarks, experiments, analysis\ninternal/memory/   durable memory and vector stores\ninternal/ui/       terminal UI components\ndocs/              architecture notes\nresearch/          research configs and artifacts\n```\n\n## 📝 Notes on tone and scope\n\nv100 is my working engine for agentic research. I use it to try ideas quickly, keep the sharp edges visible, and evolve the system in public through actual use.\n\nThe repo carries a mix of serious runtime infrastructure, rough-edged experimental features, and bespoke tooling. It is built for researchers and power users who want deep control over their autonomous systems.\n\n## 📄 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftripledoublev%2Fv100","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftripledoublev%2Fv100","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftripledoublev%2Fv100/lists"}