# DG Agent CLI `scripts/dg_agent.sh` is the unified entrypoint for the local agent stack. It does not replace the open-source tools; it routes to the existing Aider, AgentAPI, and OpenCode wrappers and provides one readiness check. OSS wrapper map: `docs/oss_agent_wrappers.md`. ## Doctor ```bash cd /root/diffusiongemma-agent scripts/dg_agent.sh doctor scripts/dg_agent.sh doctor --json scripts/dg_agent.sh status scripts/dg_agent.sh up scripts/dg_agent.sh wrappers scripts/dg_agent.sh wrappers --json scripts/dg_agent.sh bootstrap scripts/dg_agent.sh client-pack scripts/dg_agent.sh client-init --repo /path/to/repo --client cursor scripts/dg_agent.sh client-report --repo /path/to/repo --client cursor --live scripts/dg_agent.sh agent-commands --repo /path/to/repo --target all scripts/dg_agent.sh codex-profile --repo /path/to/repo --target all scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server opencode-acp scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server openhands-acp scripts/dg_agent.sh openhands-mcp -- --repo /path/to/repo --reset scripts/dg_agent.sh qwen-code -- --repo /path/to/repo --dry-run scripts/dg_agent.sh autogen -- --repo /path/to/repo --dry-run scripts/dg_agent.sh smolagents -- --repo /path/to/repo --dry-run scripts/dg_agent.sh langgraph -- --repo /path/to/repo --dry-run scripts/dg_agent.sh crewai -- --repo /path/to/repo --dry-run scripts/dg_agent.sh open-interpreter -- --repo /path/to/repo --dry-run scripts/dg_agent.sh llamaindex -- --repo /path/to/repo --dry-run scripts/dg_agent.sh haystack -- --repo /path/to/repo --dry-run scripts/dg_agent.sh workspace-init --repo /path/to/repo scripts/dg_agent.sh repo-map --repo /path/to/repo --map-tokens 512 scripts/dg_agent.sh ast-grep --repo /path/to/repo --lang python --pattern 'return $X' --json scripts/dg_agent.sh code-outline --repo /path/to/repo --lang python --json scripts/dg_agent.sh agent --repo /path/to/repo --task "..." --mode auto scripts/dg_agent.sh agent --repo /path/to/repo --task "Read file app.py" --mode read scripts/dg_agent.sh agent --repo /path/to/repo --task "Fix app.py" --mode edit --file app.py scripts/dg_agent.sh agent-runs list scripts/dg_agent.sh agent-runs artifact transcript --latest scripts/dg_agent.sh tool-loop --repo /path/to/repo --task "..." --out runlogs/tool-loop/latest.json scripts/dg_agent.sh preflight --repo /path/to/repo scripts/dg_agent.sh run --repo /path/to/repo --task "..." --file path --start scripts/dg_agent.sh mcp --list-tools scripts/dg_agent.sh serena-mcp --help-local scripts/dg_agent.sh goose-mcp -- info -v scripts/dg_agent.sh goose-acp -- --help scripts/dg_agent.sh goose-serve -- --host 127.0.0.1 --port 3294 scripts/dg_agent.sh openhands-acp -- --help scripts/dg_agent.sh openhands-mcp -- --repo /path/to/repo --dry-run scripts/dg_agent.sh qwen-code -- --repo /path/to/repo --dry-run scripts/dg_agent.sh autogen -- --repo /path/to/repo --dry-run scripts/dg_agent.sh smolagents -- --repo /path/to/repo --dry-run scripts/dg_agent.sh langgraph -- --repo /path/to/repo --dry-run scripts/dg_agent.sh crewai -- --repo /path/to/repo --dry-run scripts/dg_agent.sh open-interpreter -- --repo /path/to/repo --dry-run scripts/dg_agent.sh llamaindex -- --repo /path/to/repo --dry-run scripts/dg_agent.sh haystack -- --repo /path/to/repo --dry-run scripts/dg_agent.sh capabilities scripts/dg_agent.sh capabilities --live ``` Checks: - backend on `127.0.0.1:4100` - safe agent gateway / Aider-compatible proxy on `127.0.0.1:8090` - Aider install - AgentAPI install and running state - OpenCode and local Node install - Goose install - LiteLLM gateway install - Serena semantic MCP install - wrapper/smoke script presence Bootstrap checks local OSS-wrapper installs and can reinstall missing wrappers: ```bash scripts/dg_agent.sh bootstrap scripts/dg_agent.sh bootstrap --json scripts/dg_agent.sh bootstrap --install scripts/dg_agent.sh bootstrap --external scripts/dg_agent.sh bootstrap --only openhands,mini-swe-agent --install scripts/dg_agent.sh bootstrap --smoke-static ``` By default, `bootstrap` audits the already recommended core wrappers. Pass `--external` to include optional OpenHands/SWE-family CLI wrappers. External installers are isolated under repo-local `.tools/` or `.venv-*` paths and are not required for the default reliable `agent/session/task` path. Client pack exports endpoint and launch profiles for external clients: ```bash scripts/dg_agent.sh client-pack scripts/dg_agent.sh client-pack --json scripts/dg_agent.sh client-pack --env scripts/dg_agent.sh client-pack --write scripts/dg_agent.sh client-init --repo /path/to/repo --client cursor scripts/dg_agent.sh client-smoke --repo /path/to/repo --client cursor --live scripts/dg_agent.sh client-report --repo /path/to/repo --client cursor --live scripts/dg_agent.sh agent-commands --repo /path/to/repo --target all scripts/dg_agent.sh codex-profile --repo /path/to/repo --target all scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server opencode-acp scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server openhands-acp scripts/dg_agent.sh mcp-client-config --repo /path/to/repo --client cursor scripts/dg_agent.sh mcp-client-config --repo /path/to/repo --client cursor --with-serena scripts/dg_agent.sh mcp-client-config --repo /path/to/repo --client cursor --with-oss-stack scripts/dg_agent.sh agent-rules --repo /path/to/repo --target all ``` The safe gateway exposes OpenAI-compatible discovery endpoints: ```text http://127.0.0.1:8090/v1/model_card http://127.0.0.1:8090/v1/capabilities http://127.0.0.1:8090/v1/agent/routes http://127.0.0.1:8090/v1/agent/session http://127.0.0.1:8090/v1/agent/tool http://127.0.0.1:8090/v1/agent/context http://127.0.0.1:8090/v1/agent/rag http://127.0.0.1:8090/v1/agent/sessions http://127.0.0.1:8090/v1/agent/sessions/latest http://127.0.0.1:8090/v1/agent/sessions/latest/diff http://127.0.0.1:8090/v1/agent/sessions/latest/artifacts/{artifact} http://127.0.0.1:8090/v1/agent/runs http://127.0.0.1:8090/v1/agent/runs/latest http://127.0.0.1:8090/v1/agent/runs/latest/artifacts/{artifact} http://127.0.0.1:8090/v1/agent/tool_manifest http://127.0.0.1:8090/.well-known/agent.json ``` Use these when an external OSS agent needs to discover the recommended local route, model limits, tool-call delegation behavior, or MCP resources without opening `.dg-agent` files directly. The tool manifest includes copy-ready OpenAI Chat Completions and Responses API tool schemas for safe `execute_command` delegation through `dg_agent.sh session`. It also includes DG-specific OpenAI function tools for clients that can call tools but cannot mount MCP: ```text dg_repo_status dg_git_diff dg_list_files dg_read_file dg_search dg_repo_pack dg_repo_map dg_ast_grep dg_code_outline dg_agent dg_session dg_context dg_rag_context dg_session_artifact dg_agent_run_artifact ``` The repo tools are fixed read-only `git`/`rg`/file-read operations for clients without MCP. The OSS repo tools delegate to Repomix, Aider repo-map, and ast-grep/code-outline. `dg_agent` is the high-level HTTP facade over `scripts/dg_agent.sh agent --mode auto/read/edit`. `dg_context` and `dg_rag_context` are read-only; `dg_session` defaults to dry-run unless HTTP execution is explicitly enabled; `dg_session_artifact` reads preserved session outputs such as `final_diff`, `context_md`, `stdout`, and `stderr`; `dg_agent_run_artifact` reads preserved high-level `agent` run reports and tool-loop transcripts from `runlogs/dg-agent-runs/`. `/v1/agent/tool` executes those DG-specific tool calls and returns a ready `role=tool` response payload for the next OpenAI-compatible turn. It accepts either `{name, arguments}` or a full OpenAI `tool_call` object. Arbitrary `execute_command` shell execution is blocked there; use repo tools for read-only navigation and `dg_session` for bounded repo changes. `/v1/agent/session` returns a dry-run session command by default; real HTTP execution requires `DG_AIDER_PROXY_ENABLE_AGENT_EXEC=1` and `execute=true`. `/v1/agent/context` and `/v1/agent/rag` are read-only HTTP versions of `dg_agent.sh context` and `dg_agent.sh rag --print-context`; use them when a client has no MCP support but still needs bounded repo context before deciding what to edit. The RAG endpoint is retrieve-only and does not call the model. `/v1/agent/sessions*` is read-only and exposes preserved session artifacts for HTTP-only clients that cannot mount the DG MCP resources. Artifact names match the CLI names below, including `context_md`, `plan`, `task_report`, `verify_report`, `final_diff`, `stdout`, and `stderr`. `/v1/agent/runs*` is the matching read-only surface for high-level `scripts/dg_agent.sh agent` runs. Artifact names include `agent_json`, `transcript`, `stdout`, and `stderr`. The same artifacts are available from the CLI through `scripts/dg_agent.sh agent-runs list`, `agent-runs show --latest`, and `agent-runs artifact transcript --latest`. MCP clients get the same surface through `dg_agent_runs`, `dg_agent_run_artifact`, `dg://agent-runs`, `dg://agent-runs/latest`, and `dg://agent-runs/latest/transcript`. Use `client-init` as the highest-level client bootstrap. It runs `workspace-init`, installs the default DG+Repomix+Serena MCP bundle for the chosen client, and writes the repo instruction files used by Claude/Cursor/VS Code/Copilot-compatible agents. Use `client-smoke` as a target-repo readiness gate before connecting an external client. It can prepare the repo through `client-init`, then validates hub files, MCP config, agent rules, key launchers, and optionally live endpoints with `--live`. Use `client-report` after `client-smoke` when an IDE, ACP server, or another agent needs a portable handoff. It writes `.dg-agent/CLIENT_HANDOFF.md` and `.dg-agent/client-handoff.json` with the ready commands, route map, MCP config, latest capability snapshot, and live endpoint status when `--live` is set. Use `agent-commands` to install a project command layer for existing clients. It keeps generic snippets under `.dg-agent/commands/` and installs the Claude Code project skill `.claude/skills/dg-local-agent/SKILL.md`. Use `agent-bridge` when the client speaks ACP and needs a running agent server instead of only MCP tools. It prepares the repo through `client-init`, then prints or starts an upstream OpenCode ACP, Goose ACP, or OpenHands ACP server over the same local model/tool bundle. Every `workspace-init` also writes `.dg-agent/AGENT_HUB.md` and `.dg-agent/agent-hub.json`. Open those first when connecting a new external agent; they summarize the recommended route, endpoint, MCP bundle, ACP bridge, and fallback order for the current repo. The client pack includes OpenAI SDK, Aider, OpenCode, Goose, Continue, Cline/Roo/Kilo, OpenHands, SWE-agent, mini-swe-agent, MCP stdio profiles, Serena semantic MCP, and copy-ready MCP client configs for Claude Code, Claude Desktop, Cursor, and VS Code. The OpenHands/SWE/MCP profiles are copied into `.dg-agent/` by `workspace-init` as experimental heavy-agent entrypoints over the same local LiteLLM gateway. Use `agent-rules` to install client instruction files (`AGENTS.md`, `CLAUDE.md`, GitHub Copilot, VS Code instructions, and Cursor rules) that tell external clients to use DG MCP repo tools and bounded sessions instead of pasting large repository context. The Aider profile is exported as `.dg-agent/aider.dg-fast.conf.yml` with local model settings/metadata copies, so upstream Aider can also be launched directly: ```bash aider --config .dg-agent/aider.dg-fast.conf.yml path/to/file ``` External OSS-agent launchers: ```bash scripts/dg_agent.sh openhands -- --repo /path/to/repo --task "..." --dry-run scripts/dg_agent.sh openhands-acp -- --repo /path/to/repo --dry-run scripts/dg_agent.sh openhands-mcp -- --repo /path/to/repo --reset scripts/dg_agent.sh qwen-code -- --repo /path/to/repo --dry-run scripts/dg_agent.sh autogen -- --repo /path/to/repo --dry-run scripts/dg_agent.sh smolagents -- --repo /path/to/repo --dry-run scripts/dg_agent.sh langgraph -- --repo /path/to/repo --dry-run scripts/dg_agent.sh crewai -- --repo /path/to/repo --dry-run scripts/dg_agent.sh open-interpreter -- --repo /path/to/repo --dry-run scripts/dg_agent.sh llamaindex -- --repo /path/to/repo --dry-run scripts/dg_agent.sh swe-agent -- --repo /path/to/repo --task "..." --dry-run scripts/dg_agent.sh mini-swe-agent -- --repo /path/to/repo --task "..." --dry-run scripts/dg_agent.sh mini-swe-run --repo /path/to/repo --task "..." --dry-run --json scripts/dg_agent.sh mini-swe-runs list scripts/dg_agent.sh mini-swe-runs show --latest scripts/dg_agent.sh mini-swe-runs artifact report --latest --path-only scripts/dg_agent.sh goose-mcp -- info -v scripts/dg_agent.sh goose-acp -- --help scripts/dg_agent.sh goose-serve -- --help ``` These wrappers use installed upstream CLIs when present. Without the CLI they print the exact local profile, model, endpoint, and command to run after installation. The MCP-enabled OpenCode profile mounts `dg_agent` and `repomix`. Serena is available through the separate IDE MCP bundle because its cold start exceeds OpenCode's MCP connection budget on this host. The MCP-enabled Goose profile mounts `dg_agent` and `serena`. `mini-swe-run` uses the upstream mini-SWE CLI but, in the default safe gateway mode, the proxy adapts mini-SWE text actions into a delegated `dg_agent.sh session` command. This avoids enabling unsafe generic generation while preserving mini-SWE trajectory, stdout/stderr, command and JSON report artifacts. Workspace init writes repo-local `.dg-agent/` profiles: ```bash scripts/dg_agent.sh workspace-init --repo /path/to/repo scripts/dg_agent.sh workspace-init --repo /path/to/repo --force ``` For git repositories, `.dg-agent/` is added to the repo-local `.git/info/exclude`. This keeps the launchers available in the workspace without changing the project's tracked `.gitignore` or making normal agent runs start from a dirty tree. It also writes repo-local launchers: ```bash .dg-agent/bin/run --task "..." --file path --start .dg-agent/bin/agent --task "..." --file path .dg-agent/bin/preflight --task "..." --file path .dg-agent/bin/capabilities --latest .dg-agent/bin/doctor .dg-agent/bin/up .dg-agent/bin/down .dg-agent/bin/plan --task "..." --file path --auto-test .dg-agent/bin/edit --task "..." --file path --auto-test .dg-agent/bin/task --plan plan.json --rollback-on-failure .dg-agent/bin/supervisor --task "..." --file path .dg-agent/bin/web --port 3284 .dg-agent/bin/context --task "..." .dg-agent/bin/repo-map --map-tokens 512 .dg-agent/bin/ast-grep --lang python --pattern 'return $X' --json .dg-agent/bin/code-outline --lang python --json .dg-agent/bin/client-init --client cursor .dg-agent/bin/client-smoke --client cursor --live .dg-agent/bin/client-report --client cursor --live .dg-agent/bin/agent-commands --target all .dg-agent/bin/codex-profile --target all .dg-agent/bin/agent-bridge --server opencode-acp .dg-agent/bin/agent-bridge --server openhands-acp .dg-agent/bin/hub .dg-agent/bin/verify --file path .dg-agent/bin/sessions list .dg-agent/bin/aider --help-local .dg-agent/bin/openhands --help-local .dg-agent/bin/openhands-acp --help-local .dg-agent/bin/swe-agent --help-local .dg-agent/bin/mini-swe-agent --help-local .dg-agent/bin/mini-swe-run --task "..." --dry-run --json .dg-agent/bin/mini-swe-runs list .dg-agent/bin/mcp --list-tools .dg-agent/bin/mcp-http --help-local .dg-agent/bin/serena-mcp --help-local .dg-agent/bin/goose-mcp --help-local .dg-agent/bin/goose-acp --help .dg-agent/bin/goose-serve --help ``` Preflight checks a target repo before a live agent run: ```bash scripts/dg_agent.sh preflight --repo /path/to/repo scripts/dg_agent.sh preflight --repo /path/to/repo --task "..." --file path --json ``` It reports whether the repo is `needs-setup`, `static-ready`, or `live-ready`. `static-ready` means the wrapper/repo setup is valid but the backend model is not loaded yet. One-command run combines workspace init, preflight, optional service startup, and the reliable agent path: ```bash scripts/dg_agent.sh run --repo /path/to/repo --task "..." --file path scripts/dg_agent.sh run --repo /path/to/repo --task "..." --file path --start scripts/dg_agent.sh run --repo /path/to/repo --task "..." --file path --dry-run --json ``` `run` does not load the model unless `--start` is passed. `agent` is the highest-level local facade: ```bash scripts/dg_agent.sh agent --repo /path/to/repo --task "Find where add(a, b) is implemented" --mode auto scripts/dg_agent.sh agent --repo /path/to/repo --task "Fix add(a, b)" --mode edit --file calc.py ``` `--mode auto` routes inspection tasks to the read-only OpenAI tool-loop and edit tasks to the artifacted `session` runner. `--mode read` always uses bounded repo tools and writes `runlogs/dg-agent-runs/*/agent.json` plus the tool-loop transcript. `--mode edit` keeps the older session behavior: context, plan, task runner, verification, rollback, and `session.json`. `tool-loop` is the reference OpenAI-compatible tool-calling client. It fetches DG tool schemas from `/v1/agent/tool_manifest`, calls Chat Completions through LiteLLM, executes returned tool calls through `/v1/agent/tool`, appends `role=tool` messages, and can save the full transcript: ```bash scripts/dg_agent.sh tool-loop \ --repo /path/to/repo \ --task "Find the implementation of add(a, b)" \ --out runlogs/tool-loop/latest.json ``` Use `--stop-after-tool` when the caller wants only the raw tool transcript. Without it, the proxy turns the final `role=tool` payload into a deterministic summary response. Use `--tool dg_read_file` or `--read-only` to constrain the loop to repo inspection tools when connecting a cautious external agent. The reliable edit path is intentionally layered. It tries the Aider-compatible OSS wrapper first, then verifies syntax/tests, then applies small deterministic repairs when the model call produced no usable diff but the task states an exact code constraint. It also adds transient `.aider.dg-local/` metadata to the target repo's local `.git/info/exclude`, so repeated runs do not start from a dirty tree. Session reports mark repaired model attempts as `aider-with-deterministic-repair`. Capability probes run a small end-to-end audit of the wrapper stack: ```bash scripts/dg_agent.sh capabilities scripts/dg_agent.sh capabilities --json scripts/dg_agent.sh capabilities --live --json scripts/dg_agent.sh capabilities --latest scripts/dg_agent.sh capabilities --latest --path-only ``` Without `--live`, this checks repo-local workspace bootstrapping, every repo-local `.dg-agent/bin/*` launcher, the installed OSS wrapper matrix, OpenHands/SWE-family profile launchers, the proxy adapter, and exact replace repair without loading the model. With `--live`, it also runs a real GPU-backed Aider edit where malformed model output is repaired by the proxy and then applied as an Aider diff. Capability reports are saved under: ```text runlogs/dg-agent-capabilities/latest.json runlogs/dg-agent-capabilities/YYYYMMDD-HHMMSS-{static,live}.json ``` Use `--no-save` to skip writing these files for a one-off probe. Short stack commands: - `status`: check backend, proxy and LiteLLM - `up`: ensure backend, proxy and LiteLLM are running - `down`: stop backend, proxy and LiteLLM ## Smoke ```bash scripts/dg_agent.sh smoke scripts/dg_agent.sh smoke --suite context scripts/dg_agent.sh smoke --suite auto-test scripts/dg_agent.sh smoke --suite verify scripts/dg_agent.sh smoke --suite session scripts/dg_agent.sh smoke --suite sessions scripts/dg_agent.sh smoke --suite session-artifacts scripts/dg_agent.sh smoke --suite agent scripts/dg_agent.sh smoke --suite capabilities scripts/dg_agent.sh smoke --suite proxy-adapter scripts/dg_agent.sh smoke --suite supervisor scripts/dg_agent.sh smoke --suite wrappers scripts/dg_agent.sh smoke --suite bootstrap scripts/dg_agent.sh smoke --suite client-pack scripts/dg_agent.sh smoke --suite workspace-init scripts/dg_agent.sh smoke --suite client-init scripts/dg_agent.sh smoke --suite client-smoke scripts/dg_agent.sh smoke --suite client-report scripts/dg_agent.sh smoke --suite agent-commands scripts/dg_agent.sh smoke --suite codex-profile scripts/dg_agent.sh smoke --suite ide-clients scripts/dg_agent.sh smoke --suite agent-bridge scripts/dg_agent.sh smoke --suite external-agents scripts/dg_agent.sh smoke --suite mini-swe-runner scripts/dg_agent.sh smoke --suite preflight scripts/dg_agent.sh smoke --suite run scripts/dg_agent.sh smoke --suite task scripts/dg_agent.sh smoke --suite goose scripts/dg_agent.sh smoke --suite goose-mcp scripts/dg_agent.sh smoke --suite goose-acp scripts/dg_agent.sh smoke --suite openhands-acp scripts/dg_agent.sh smoke --suite openhands-mcp scripts/dg_agent.sh smoke --suite qwen-code scripts/dg_agent.sh smoke --suite autogen scripts/dg_agent.sh smoke --suite smolagents scripts/dg_agent.sh smoke --suite langgraph scripts/dg_agent.sh smoke --suite crewai scripts/dg_agent.sh smoke --suite open-interpreter scripts/dg_agent.sh smoke --suite llamaindex scripts/dg_agent.sh smoke --suite haystack scripts/dg_agent.sh smoke --suite litellm scripts/dg_agent.sh smoke --suite gateway-clients scripts/dg_agent.sh smoke --suite openai-sdk scripts/dg_agent.sh smoke --suite mcp scripts/dg_agent.sh smoke --suite mcp-http scripts/dg_agent.sh smoke --suite serena-mcp scripts/dg_agent.sh smoke --suite watchdog scripts/dg_agent.sh smoke --suite stack-control scripts/dg_agent.sh smoke --suite agentapi --suite opencode-provider ``` Suites: - `context`: context pack and generated task-runner plan - `auto-test`: automatic verification command inference - `verify`: standalone verification command runner - `session`: full context->plan->task->verify artifacted run - `sessions`: session history listing and inspection - `session-artifacts`: direct retrieval of preserved session artifacts - `agent`: recommended local coding-agent mode - `capabilities`: compact capability harness for workspace launchers, installed OSS wrappers, external-agent profiles, proxy, and live-ready paths - `proxy-adapter`: file-listing normalization and exact repair fallback in the Aider proxy - `supervisor`: rg + Aider/model + verification + deterministic repair fallback - `wrappers`: installed OSS-wrapper matrix and recommended routing - `bootstrap`: audit/install wrapper control path without loading the model - `client-pack`: OpenAI-compatible client/IDE/agent profile export - `workspace-init`: repo-local `.dg-agent/` client pack and quickstart files - `client-init`: one-shot workspace + MCP bundle + client rules bootstrap - `client-smoke`: target-repo readiness gate for external IDE/agent clients - `client-report`: portable Markdown/JSON handoff for external clients - `agent-commands`: repo-local command kit and Claude Code project skill - `codex-profile`: project-local Codex CLI config for the DG safe proxy - `ide-clients`: Continue/Cline/Roo/Kilo/OpenAI-compatible repo-local profile snippets - `agent-bridge`: one-shot ACP bridge over OpenCode/Goose/OpenHands OSS agent servers - `external-agents`: OpenHands/SWE/mini-SWE local profile wrappers and launchers - `mini-swe-runner`: artifacted mini-SWE runner dry-run contract - `preflight`: target-repo readiness check before agent execution - `run`: one-command workspace-init -> preflight -> optional start -> agent - `edit`: natural-language `dg_agent.sh edit` - `task`: multi-step task runner - `agentapi`: AgentAPI over Aider - `goose`: Goose over the local OpenAI-compatible proxy - `litellm`: LiteLLM gateway over the local OpenAI-compatible proxy - `gateway-clients`: checked-in IDE/OpenAI-compatible client profiles - `openai-sdk`: real Python OpenAI SDK chat completion through LiteLLM - `mcp`: MCP stdio server initialize, tools/list, and `dg_context` tool call - `watchdog`: backend/proxy/LiteLLM watchdog status and ensure - `stack-control`: one-command `status`, `up` and `ensure` aliases - `opencode-provider`: OpenCode provider discovery - `opencode-run`: minimal OpenCode run fallback ## Agent Mode Use `run` as the default local coding-agent entrypoint: ```bash scripts/dg_agent.sh run \ --repo /path/to/repo \ --task "Fix hello.py so greet('Ada') returns exactly hello, Ada!" \ --file hello.py \ --start ``` Use `agent` directly when workspace/preflight/service startup are already handled: ```bash scripts/dg_agent.sh agent \ --repo /path/to/repo \ --task "Fix hello.py so greet('Ada') returns exactly hello, Ada!" \ --file hello.py ``` `agent` is a conservative profile over the artifacted `session` path. It builds a compact repo context pack, generates a task-runner plan, enables auto-test inference, verifies after the edit, rolls back failed task-runner edits, uses deterministic repair fallbacks for exact small Python edits, and preserves all artifacts under `runlogs/dg-agent-sessions/`. Useful options: - `--file path`: repeatable file hints for small-context work - `--test-cmd "..."`: explicit verification from the target repo - `--max-files N`: default `3`, for bounded repo-RAG context - `--no-auto-test`: disable inferred verification - `--no-rollback`: keep failed edits for inspection - `--out-dir /path`: write session artifacts outside the default runlog Smoke: ```bash scripts/dg_agent.sh smoke --suite agent ``` ## Reliable Edits Run the full artifacted agent session: ```bash scripts/dg_agent.sh session \ --repo /path/to/repo \ --task "Fix hello.py so greet('Ada') returns exactly hello, Ada!" \ --file hello.py \ --auto-test \ --rollback-on-failure ``` The session writes a directory under `runlogs/dg-agent-sessions/` by default: - `context.md` - `context.json` - `plan.json` - `task-report.json` - `verify.json` - `before.status.txt` - `after.status.txt` - `before.diff` - `final.diff` - `session.json` List and inspect prior sessions: ```bash scripts/dg_agent.sh sessions list scripts/dg_agent.sh sessions show --latest scripts/dg_agent.sh sessions show /path/to/session-or-session.json scripts/dg_agent.sh sessions list --json ``` Print the latest session diff or a specific preserved artifact: ```bash scripts/dg_agent.sh sessions diff --latest scripts/dg_agent.sh sessions diff 1 scripts/dg_agent.sh sessions artifact context_md --latest scripts/dg_agent.sh sessions artifact plan --latest --path-only scripts/dg_agent.sh sessions artifact stdout --latest --path-only ``` The same preserved artifacts are available through the safe gateway: ```text GET http://127.0.0.1:8090/v1/agent/sessions GET http://127.0.0.1:8090/v1/agent/sessions/latest GET http://127.0.0.1:8090/v1/agent/sessions/latest/diff GET http://127.0.0.1:8090/v1/agent/sessions/latest/artifacts/context_md GET http://127.0.0.1:8090/v1/agent/sessions/{session_id}/artifacts/final_diff ``` Useful artifact names: - `context_md` - `context_json` - `plan` - `task_report` - `verify_report` - `before_diff` - `final_diff` - `task_stdout` - `task_stderr` Build a compact repo context pack without calling the model: ```bash scripts/dg_agent.sh context \ --repo /path/to/repo \ --task "Find where health response is built" \ --max-files 3 \ --out /tmp/dg-context.md ``` Generate a task-runner plan from a normal task: ```bash scripts/dg_agent.sh plan \ --repo /path/to/repo \ --task "Add uptime_ms to the health response" \ --file server.py \ --auto-test \ --out /tmp/dg-plan.json ``` Natural-language one-step edit without writing a JSON plan: ```bash scripts/dg_agent.sh edit \ --repo /path/to/repo \ --task "Fix hello.py so greet('Ada') returns exactly hello, Ada!" \ --file hello.py \ --auto-test \ --rollback-on-failure ``` This creates a temporary task-runner plan and delegates to `scripts/run_task_runner.sh`. `--auto-test` currently infers conservative commands such as: - `python3 -m py_compile file.py` - `bash -n file.sh` - `python3 -m json.tool file.json >/dev/null` - `go test ./...` - `cargo test` - `npm test -- --runInBand` - `python3 -m pytest -q` Run the same verification layer directly: ```bash scripts/dg_agent.sh verify \ --repo /path/to/repo \ --file server.py \ --report /tmp/dg-verify.json ``` or with an explicit command: ```bash scripts/dg_agent.sh verify \ --repo /path/to/repo \ --test-cmd "python3 -m pytest -q" \ --json ``` Explicit multi-step plan: ```bash scripts/dg_agent.sh task \ --repo /path/to/repo \ --plan /path/to/plan.json \ --report /tmp/dg-task-report.json \ --rollback-on-failure ``` This delegates to `scripts/run_task_runner.sh`. ## Web/API Agent ```bash scripts/dg_agent.sh web --repo /path/to/repo --port 3284 ``` Open: ```text http://127.0.0.1:3284/chat ``` This delegates to AgentAPI over Aider. ## OpenCode ```bash scripts/dg_agent.sh opencode-agent -- /path/to/repo scripts/dg_agent.sh opencode -- /path/to/repo scripts/dg_agent.sh opencode-mcp -- /path/to/repo scripts/dg_agent.sh opencode-acp -- --cwd /path/to/repo --hostname 127.0.0.1 --port 3295 scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server opencode-acp --start ``` For the primary bounded terminal workflow on Windows, use `scripts/dg_agent.sh opencode-agent -- /path/to/repo` or `scripts/run_opencode_agent_windows.ps1` from the target repository. It keeps only OpenCode's Bash tool and routes it through the verified DG read/session delegate. Generic OpenCode/MCP/ACP remain separate OSS integration paths. OpenCode is available as an experimental TUI, MCP-enabled TUI, and ACP server. The current local package includes the Windows OpenCode payload for PowerShell usage and `opencode-linux-x64` for WSL MCP process spawning. Provider/run, ACP, and live MCP smokes pass; `opencode mcp list` verifies `dg_agent`, `repomix`, and `serena` as connected. For reliable edits, prefer `dg_agent.sh task`. ## Goose Experiment ```bash scripts/dg_agent.sh goose -- run \ --no-profile \ --max-turns 1 \ --text "Reply exactly OK." ``` Goose is available as an experimental ready-made OSS agent shell over the same local OpenAI-compatible proxy. It brings sessions, MCP/extensions, review, and TUI commands, but the current local DG profile is not reliable enough at native tool-calling to replace the Aider/task-runner path. Keep `--max-turns` and an external `timeout` around non-interactive `goose run` experiments. `scripts/dg_agent.sh goose-mcp -- ...` runs Goose with an isolated Goose HOME and mounts both the local DG MCP SDK server and upstream Serena semantic/LSP MCP as stdio extensions. `scripts/dg_agent.sh goose-acp` exposes that same profile as a stdio ACP agent server; `scripts/dg_agent.sh goose-serve -- --port 3294` exposes Goose's HTTP/WebSocket ACP server. OpenHands is also available as an ACP stdio server: ```bash scripts/dg_agent.sh openhands-acp -- --help scripts/dg_agent.sh agent-bridge --repo /path/to/repo --server openhands-acp --start ``` This route uses `openhands acp --override-with-envs` under the hood because the standalone `openhands-acp` entrypoint is not reliable in the current package. OpenHands can also consume the repo-local MCP stack directly through its own MCP config: ```bash scripts/dg_agent.sh openhands-mcp -- --repo /path/to/repo --reset .dg-agent/bin/openhands-mcp --reset ``` This writes `.dg-agent/openhands-persistence/mcp.json` with `diffusiongemma-local-agent`, `repomix`, and `serena`. Qwen Code is available on this Windows host as a bounded terminal inspection experiment. The unified entrypoint prefers the WSL runner with DG, Repomix, and Serena MCP mounted; the native Windows launcher remains a read-only fallback on the safe GPU gateway. Edit requests stay on the Aider/session path: ```bash scripts/dg_agent.sh qwen-code -- --repo /path/to/repo --dry-run .dg-agent/bin/qwen-code --dry-run python scripts/dg_agent.py qwen-code -- --repo . --dry-run -- --help ``` Use an explicit file path in the prompt, for example `--prompt "Read src/app.py. Summarize the request flow."`. See `docs/qwen_code_local.md` for the current runner and verified behavior. AutoGen AgentChat is available as a Python framework route: ```bash scripts/dg_agent.sh autogen -- --repo /path/to/repo --dry-run .dg-agent/bin/autogen --dry-run ``` It uses `autogen-agentchat`, `autogen-ext[openai]`, and `configs/client_profiles/autogen.dg.json`. Hugging Face smolagents is available as another Python framework route: ```bash scripts/dg_agent.sh smolagents -- --repo /path/to/repo --dry-run .dg-agent/bin/smolagents --dry-run ``` It uses `smolagents[toolkit]`, `openai`, and `configs/client_profiles/smolagents.dg.json`. LangGraph/LangChain is available as another Python graph-agent framework route: ```bash scripts/dg_agent.sh langgraph -- --repo /path/to/repo --dry-run .dg-agent/bin/langgraph --dry-run ``` It uses `langgraph`, `langchain`, `langchain-openai`, and `configs/client_profiles/langgraph.dg.json`. The working local route uses WSL Python 3.14 plus Linux cp314 wheels in `.wheelhouse/langgraph-wsl-cp314`; the Windows venv is not used for imports because Windows App Control blocks `pydantic_core`. CrewAI is available as another Python multi-agent framework route: ```bash scripts/dg_agent.sh crewai -- --repo /path/to/repo --dry-run .dg-agent/bin/crewai --dry-run ``` It uses `crewai.Agent`, `Task`, `Crew`, `LLM`, and `configs/client_profiles/crewai.dg.json`. Open Interpreter is available as an OSS code-execution shell route: ```bash scripts/dg_agent.sh open-interpreter -- --repo /path/to/repo --dry-run .dg-agent/bin/open-interpreter --dry-run ``` It uses `open-interpreter` with `auto_run=false`, `safe_mode=ask`, and `configs/client_profiles/open-interpreter.dg.json`. LlamaIndex is available as a RAG/agent workflow framework route: ```bash scripts/dg_agent.sh llamaindex -- --repo /path/to/repo --dry-run .dg-agent/bin/llamaindex --dry-run ``` It uses `OpenAILike` plus `AgentWorkflow.from_tools_or_functions`, which selects `ReActAgent` for the current non-function-calling model profile. Haystack is available as a BM25 RAG pipeline over repository files: ```bash scripts/dg_agent.sh haystack -- --repo /path/to/repo --dry-run .dg-agent/bin/haystack --dry-run ``` It uses `haystack-ai` with `InMemoryDocumentStore`, `InMemoryBM25Retriever`, and `OpenAIChatGenerator`. Docs: `docs/goose_local.md`, `docs/qwen_code_local.md`, `docs/autogen_local.md`, `docs/smolagents_local.md`, `docs/langgraph_local.md`, `docs/crewai_local.md`, `docs/open_interpreter_local.md`, `docs/llamaindex_local.md`, `docs/haystack_local.md`. ## LiteLLM Gateway ```bash scripts/dg_agent.sh litellm ``` Then point OpenAI-compatible clients at: ```text base_url: http://127.0.0.1:4100/v1 api_key: dummy model: diffusiongemma-local ``` This is the preferred compatibility endpoint for external IDE clients and agent shells. It routes to the local Aider-compatible proxy and keeps a stable model alias in `configs/litellm.dg.yaml`. In safe mode, generic chat still avoids raw backend generation. If a client sends a command-like OpenAI `tools` schema, the proxy returns a `tool_calls` response that delegates to `dg_agent.sh session --rollback-on-failure`. The same delegate is available through non-streaming `POST /v1/responses` as a Responses API `function_call` output item. Docs: `docs/litellm_gateway.md`. Client profiles for Continue, Cline/Roo/Kilo style OpenAI-compatible clients, and OpenAI SDK scripts are in `configs/client_profiles/`. ## RAG Context ```bash scripts/dg_agent.sh rag --repo /repo --task "..." --print-context scripts/dg_agent.sh rag --repo /repo --task "..." --max-context-chars 650 --max-files 3 --max-tokens 128 scripts/dg_agent.sh repo-pack --repo /repo --include "src/**" --style markdown --stdout ``` This wraps `scripts/rag_code_agent.py`, the read-only `rg` retrieval layer for small-context use. Use `--print-context` when an outer agent should inspect the selected file map and snippets before planning edits. `repo-pack` wraps upstream Repomix through local `npx --yes repomix`. Use tight `--include` filters, `--compress`, and `--token-budget` when the client needs a packed artifact rather than ranked snippets. For MCP-capable clients, `configs/client_profiles/mcp-client-snippets.json` also includes optional native Repomix MCP server snippets using `scripts/run_repomix_mcp.sh`. The wrapper pins the local Node path before launching upstream `repomix --mcp`, which is more reliable from IDE-launched MCP processes than calling `npx` directly. Docs: `docs/rag_agent.md`. ## MCP Server ```bash scripts/dg_agent.sh mcp --list-tools scripts/dg_agent.sh mcp scripts/dg_agent.sh mcp-http -- --host 127.0.0.1 --port 8765 scripts/dg_agent.sh serena-mcp --help-local ``` The MCP server is a local stdio bridge for clients that can launch MCP tools. The default implementation uses the official `modelcontextprotocol/python-sdk` `FastMCP` server; `--legacy` keeps the dependency-free JSON-RPC fallback for debugging. It exposes reliable DG wrapper commands as tools instead of asking the model to invent tool calls: `mcp-http` exposes the same tools over the official streamable HTTP transport at `http://127.0.0.1:8765/mcp` for clients that cannot spawn stdio servers. `serena-mcp` is an optional upstream semantic/LSP MCP server. Its active WSL runtime is currently available; `client-init` includes it only after the live `serena-mcp --check-installed` probe succeeds. The core DG MCP server remains available independently. - `dg_repo_status` - `dg_list_files` - `dg_search` - `dg_read_file` - `dg_git_diff` - `dg_task_note` - `dg_task_notes` - `dg_status` - `dg_context` - `dg_rag_context` - `dg_rag_answer` - `dg_repo_pack` - `dg_preflight` - `dg_plan` - `dg_task` - `dg_session` - `dg_verify` - `dg_capabilities` - `dg_client_smoke` - `dg_client_report` - `dg_sessions` - `dg_session_artifact` It also exposes resources `dg://client-pack`, `dg://status`, `dg://usage`, `dg://sessions`, `dg://sessions/latest`, `dg://sessions/latest/diff`, `dg://capabilities/latest`, `dg://client-handoff`, and `dg://client-handoff/markdown`; repo-local handoff resources `dg://agent-hub`, `dg://agent-hub/markdown`, `dg://command-kit`, `dg://command-kit/markdown`, `dg://ide-clients`, `dg://ide-clients/markdown`, `dg://codex-profile`, and `dg://codex-profile/config`; and prompts `dg_agent_session`, `dg_agent_context`, `dg_agent_continue_latest` for MCP clients that support prompt/resource discovery. Use `dg_client_report` first when an MCP client needs a portable repo handoff, then read `dg://client-handoff` or `dg://client-handoff/markdown`. For a broader bootstrap, read `dg://agent-hub/markdown`, then use the command, IDE, or Codex resources matching the external client. Use `dg_rag_context` for compact repository-scale retrieval without model generation, or `dg_repo_pack` for bounded Repomix packed context. Use `dg_session` for one-shot bounded edits. Use `dg_preflight`, `dg_context`, `dg_plan`, and `dg_task` when an MCP client should inspect or persist a task plan before execution. Use `configs/client_profiles/mcp-server.json` or the workspace-local `.dg-agent/mcp-server.json` profile in MCP-capable clients. Copy-ready client templates are exported as `.dg-agent/claude-code.mcp.json`, `.dg-agent/claude-desktop-mcp.json`, `.dg-agent/cursor.mcp.json`, `.dg-agent/vscode.mcp.json`, and `.dg-agent/mcp-client-snippets.json`. Use `scripts/dg_agent.sh mcp-client-config --repo /path/to/repo --client cursor` or `.dg-agent/bin/mcp-client-config --client cursor` to merge the local server entry into project client configs without removing unrelated MCP servers. Add `--with-repomix` to install the optional native Repomix MCP server in the same config. Add `--with-serena` to install the optional native Serena MCP server; the flags can be combined. Use `--with-oss-stack` for the recommended full bundle: DG workflow tools, Repomix repository packing, and Serena semantic/LSP tools. Docs: `docs/mcp_server.md`. Docs: `docs/ide_client_profiles.md`. ## Watchdog ```bash scripts/dg_agent.sh status scripts/dg_agent.sh up scripts/dg_agent.sh watchdog -- status scripts/dg_agent.sh watchdog -- ensure scripts/dg_agent.sh watchdog -- watch --interval 30 --restart ``` Docs: `docs/stack_watchdog.md`. ## Windows ```powershell powershell -ExecutionPolicy Bypass -File \\wsl.localhost\Ubuntu-24.04\root\diffusiongemma-agent\scripts\dg_agent_windows.ps1 doctor ```