System proxy detection (scutil/env/PAC) with a status tool and a proxy_export bash snippet tool.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:DamonKoy/dsh-plugins#path:/packages/dsh-system-proxy
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
System proxy support for DeepSeek Harness. Inspired by the PAC/WPAD system proxy routing in Codex 0.143 — implemented as a user-space plugin.
English | 中文
What it does
- System proxy detection:
- macOS: reads
scutil --proxyand extracts the HTTP/HTTPS proxies and the PAC/WPAD URL (HTTPEnable/HTTPProxy/HTTPPort,HTTPSEnable/HTTPSProxy/HTTPSPort,ProxyAutoConfigEnable/ProxyAutoConfigURLString). Degrades gracefully to environment variables whenscutilis unavailable. - Linux / other: reads
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXYfrom the environment (both cases,ALL_PROXYas fallback).
- macOS: reads
system_proxy_statusmodel tool: read-only report of the detected proxy, the plugin-config overrides in effect, detection source (scutil/env/none) and theno_proxylist.proxy_exportmodel tool: returns a bash snippet (export http_proxy=... https_proxy=... no_proxy=...) the model can paste into a terminal command so child processes use the proxy.- Package-private RPC (
harness.handle, sandbox realm only; skipped when loaded via CLI):system-proxy/statusfor client halves and other plugins — same payload assystem_proxy_status.
Install
dsh plugin --profile web add github:DamonKoy/dsh-plugins#path:/packages/dsh-system-proxy
Restart dsh web.
Config
Optional file ~/.dsh/dsh-system-proxy.json:
{
"overrideHttp": "",
"overrideHttps": "",
"overridePac": "",
"noProxy": "localhost,127.0.0.1,.local",
"allowExportEnv": true
}
| Field | Default | Meaning |
|---|---|---|
overrideHttp |
"" |
Overrides the detected HTTP proxy (empty = use detection) |
overrideHttps |
"" |
Overrides the detected HTTPS proxy |
overridePac |
"" |
Overrides the detected PAC/WPAD URL |
noProxy |
"localhost,127.0.0.1,.local" |
no_proxy list used by proxy_export |
allowExportEnv |
true |
false disables proxy_export (see Security notes) |
Config is re-read on every call, so edits apply without a restart. The
detected system values stay visible read-only in the detected field; the
override* fields only win when non-empty.
Example outputs
system_proxy_status (macOS with scutil):
{
"platform": "darwin",
"source": "scutil",
"viaEnv": false,
"httpProxy": "http://192.168.1.1:8080",
"httpsProxy": "http://192.168.1.1:8443",
"pacUrl": null,
"noProxy": "localhost,127.0.0.1,.local",
"detected": {
"httpProxy": "http://192.168.1.1:8080",
"httpsProxy": "http://192.168.1.1:8443",
"pacUrl": null
},
"override": { "httpProxy": "", "httpsProxy": "", "pacUrl": "" },
"allowExportEnv": true,
"configPath": "/Users/you/.dsh/dsh-system-proxy.json"
}
proxy_export (success):
{
"exported": true,
"shell": "bash",
"command": "export http_proxy='http://192.168.1.1:8080'\nexport https_proxy='http://192.168.1.1:8443'\nexport no_proxy='localhost,127.0.0.1,.local'",
"exportedVars": ["http_proxy", "https_proxy", "no_proxy"]
}
proxy_export returns { "exported": false, "reason": "..." } when no proxy
is detected, when only a PAC URL is present (PAC cannot be expressed as
environment variables), or when allowExportEnv is false.
Platform differences
| Platform | Detection | Notes |
|---|---|---|
| macOS | scutil --proxy |
Falls back to env vars when scutil fails or is absent |
| Linux | env vars only | HTTP_PROXY / HTTPS_PROXY / ALL_PROXY / NO_PROXY |
| Windows | env vars only | Same as Linux (no registry/WinINET probing) |
HTTPS proxies are reported as http:// URLs — HTTPS traffic goes through an
HTTP proxy via CONNECT, which is what https_proxy means everywhere.
Security notes
proxy_exportwrites the proxy into child-process environment variables, which changes their network egress — that is a security-sensitive operation. Set"allowExportEnv": falsein the config to disable it entirely; the tool then returns a denial reason.- Proxy values may contain credentials (
user:pass@host) if you put them inoverride*fields or the environment; they are stored in your home-dir config file and appear in tool output. - This plugin does not modify the DSH host process's own LLM request
network stack — that belongs to the core
llmlayer and is not reachable from a plugin. It is the user-space version of Codex system proxy support: detection, status queries, and explicit opt-in for child processes / terminal commands. - Detection is read-only; nothing is persisted or uploaded.
License
MIT
Links
More in this category
strukto-ai/mirage#dsh★ 3479
Swaps the filesystem and bash providers for a mirage virtual workspace: file tools and shell commands run over mounted resources (RAM, S3, Redis, Slack, Gmail, Notion, Postgres) instead of the host disk, with per-mount read/write/exec modes, per-command sandbox routing (monty, pyodide, quickjs in process; docker, e2b, daytona remote), and installed CLIs (git, gh, slack, linear, ntn, gws, or one you register) as head words in the virtual terminal.
hust-open-atom-club/oh-dsh★ 225
Community distribution: TUI, desktop, and Web UI as one bundle with layered installation.
Jayden-X-L/forkprobe★ 66
Compare multiple skills on the same task and pick the winner.
vlln/plugin-registry★ 50
Ecosystem infrastructure: a thin browser console for managing official repository plugins (zero patches) plus a make-dsh-plugin skill for guided plugin development.
forrestchang/dsh-multica-runtime★ 41
Run the dsh runtime on Multica.
omdsh-dev/dsh-plugin-check★ 23
Plugin health checks: manifest protocol / patch format / build traps, zero-dependency and read-only.