The VS Code edition of the Agent YOLO family. It opens an embedded terminal panel that launches AI CLI agents (Claude Code, Codex, Cursor CLI, …) with a one-click Skip permissions (YOLO) toggle, and makes terminal output clickable: file paths, stack-trace frames, type/member names, and URLs all become navigation links.
Extension ID:
cnsharp.agentyolo— display name Agent YOLO.
Agents panel — embedded multi-tab agent terminal with clickable links:
- Agents panel: a docked activity-bar view with an agent dropdown, populated from the built-in catalog in
agents.json+ youryolo.agentsoverrides, filtered by what is actually installed on PATH. - Embedded interactive terminal: a real PTY (node-pty + bundled xterm.js) launched inside a login shell, so rc-defined PATH (nvm / fnm / npm global bin) is honoured. Several agents run side by side as tabs; each tab keeps its own scrollback and input history.
- YOLO toggle injects the per-agent skip-permission flag (e.g.
--dangerously-skip-permissions,-y,--yolo) or environment variable (GOOSE_MODE=auto) so agents run without permission prompts. - Resume toggle continues the agent's most recent session via its
resumeFlag(e.g. Claude-r, Codex--resume). - Clickable terminal links with de-duplication / priority:
path:line:col, quoted paths, stack-trace frames, bare file names, Python tracebacks, type names (com.foo.Bar),Class.memberrefs, andhttp(s)://URLs. (Type / member links need a language server — see Language support.) - Settings-driven: agent configuration (skip flags / base args / resume flags, global YOLO & Resume defaults, shell) lives in VS Code Settings — edit
yolo.agentsand the otheryolo.*settings insettings.json. There is no in-panel Settings UI. (Internal extension IDs/settings keep theyolo.prefix — e.g. the view isyolo.panel, settings areyolo.*— while the product is branded Agent YOLO.)
Panel location. The Agents panel opens in the Primary Side Bar (the activity bar, on the left) by default. To dock it on the right instead, right-click the panel header and choose Move to Secondary Side Bar — VS Code remembers the choice.
Co-existence. Agent YOLO (
cnsharp.agentyolo) uses the dedicatedyolo.*settings namespace and its own commands/views, so it can be installed alongside other agent-launcher extensions without conflict.
File-path links work out of the box (they are resolved on the filesystem). Type and member links
(com.foo.Bar, Class.member) are different: they are resolved through
vscode.executeWorkspaceSymbolProvider, i.e. the LSP workspace/symbol — so a language server must
be running and must have indexed the symbol for the link to open. Without one you get
"no symbol found".
Install the language server for the languages you actually work in:
| Language | Extension | Extension ID |
|---|---|---|
| Java | Language Support for Java (Red Hat) | redhat.java |
| TypeScript / JavaScript | built in — nothing to install | — |
| Python | Python + Pylance (Pylance provides the symbols) | ms-python.python, ms-python.vscode-pylance |
| Go | Go (gopls) | golang.go |
| Rust | rust-analyzer | rust-lang.rust-analyzer |
| C / C++ | C/C++ | ms-vscode.cpptools |
| C# | C# | ms-dotnettools.csharp |
| Kotlin | Kotlin | fwcd.kotlin |
| PHP | Intelephense | bmewburn.vscode-intelephense-client |
| Ruby | Ruby LSP | shopify.ruby-lsp |
| Scala | Metals | scalameta.metals |
| Swift | Swift | sswg.swift-lang |
| Lua | Lua | sumneko.lua |
| Dart / Flutter | Dart | Dart-Code.dart-code |
| Shell | Bash IDE | mads-hartmann.bash-ide-vscode |
Notes:
- Open the code as a workspace folder and let the language server finish indexing (large Java/Python projects can take a while on first open) — unindexed symbols cannot be resolved.
- A plain syntax-highlighter or formatter is not enough; it must be a real language server.
- Install only what you need: each one is a resident process with its own memory, which adds up alongside several open agent terminals.
- For Java, prefer Red Hat (
redhat.java); the Oracle Java extension'sworkspace/symbolsupport is unreliable.
-
Open the Agent YOLO Marketplace page and click Install.
-
Or in VS Code: open the Extensions view, search for
Agent YOLO, and click Install. -
Or from the command line:
code --install-extension cnsharp.agentyolo
- Install dependencies:
npm install(also runspostinstallto fix node-pty'sspawn-helperpermissions). - Build:
npm run build(tsc for the extension + esbuild to bundle the webview intomedia/dist). - Press F5 to open the Extension Development Host; the Agent YOLO icon appears in the activity bar.
- Package:
npx @vscode/vsce package(produces a*.vsix) - Install: in VS Code run
Extensions: Install from VSIX...and pick the generated file.
- Click the Agent YOLO icon in the activity bar, or run
Agent YOLO: Open Agents Panelfrom the Command Palette (command idyolo.openPanel).
- Pick an agent from the dropdown in the panel header and click Launch — it opens in a new terminal tab. Only agents detected on PATH are shown.
- Open more agents to run several side by side; switch tabs like any IDE terminal.
- Click the
$(zap)button in the panel header to toggle YOLO mode. When on, launching an agent appends that agent'sskipFlag(orGOOSE_MODE=autofor Goose). - The global default can also be set via the
yolo.skipEnabledsetting.
- Click the
$(history)button in the panel header to toggle Resume mode. When on, launching an agent appends that agent'sresumeFlagto continue the previous session. Agents without aresumeFlaglaunch normally even when on. - YOLO and Resume can be on together; args are ordered
baseArgs→skipFlag→resumeFlag. - The global default can also be set via the
yolo.resumeModesetting.
The yolo.agents setting is a list of overrides / additions merged with the built-in catalog in agents.json: match a built-in by command (or id) to override it (only the fields you set are replaced); set enabled to false to hide a built-in; use a command not present in agents.json to add a custom agent.
-
Edit: the built-ins live in the root
agents.json; to tweak a built-in, append an override entry with the samecommand(only the fields you want to change). -
Override params: change only the fields you want, e.g. set
claude'sskipFlagto"--new-flag". -
Hide: set
enabledtofalse(or delete the entry). -
Add a custom agent: append an entry whose
commandisn't built-in, e.g.:{ "command": "myagent", "displayName": "My Agent", "baseArgs": "run", "iconFile": "myagent.png" }(omit
iconFileto use the default terminal icon.) -
When it takes effect: changes apply the next time the panel refreshes (read live at runtime; no window reload needed).
Fields: command (required) / displayName / baseArgs / skipFlag / resumeFlag / iconFile / enabled / id.
Uniqueness:
command,displayName, andidmust each be unique. On duplicates the extension warns and drops the duplicate (keeping the first occurrence).
Logos live in
media/agents/(PNG). The picker shows only the display name, not the command / id.
| Setting | Type | Default | Description |
|---|---|---|---|
yolo.skipEnabled |
boolean | false |
Master switch for YOLO mode; when on, agents launch with their respective skipFlag |
yolo.resumeMode |
boolean | false |
Master switch for Resume mode; when on, agents launch with their respective resumeFlag |
yolo.agents |
array | [] |
Overrides / additions merged with agents.json (see above) |
yolo.permissionRules |
array | [] |
Per-agent skip flag as { agentId, flag }; takes precedence over yolo.agents skipFlag |
yolo.agentResumeFlags |
object | {} |
Per-agent resume-flag override, keyed by command / id; precedence over resumeFlag |
yolo.agentBaseArgs |
object | {} |
Extra launch args per agent, keyed by id (command fallback); appended after baseArgs |
yolo.shell |
string | "" |
Override the shell used to launch agents / probe PATH (absolute path or PATH binary; on Windows auto-detects a POSIX shell when empty) |
yolo.shellArgs |
array | [] |
Extra args passed to the shell before the agent command (ignored on Windows cmd.exe) |
yolo.installedCommands |
array (internal) | [] |
Cache of agent commands detected on PATH — maintained automatically, do not edit by hand |
yolo.lastAgentId |
string (internal) | "" |
Last-selected agent id, so the panel can pre-select it — set automatically |
Commands:
| Command id | Title | Trigger |
|---|---|---|
yolo.openPanel |
Agent YOLO: Open Agents Panel | activity-bar icon / Command Palette |
npm install # installs deps + runs postinstall (node-pty spawn-helper chmod)
npm run build # tsc (extension + webview entries) + esbuild (bundle xterm into media/dist)
npm test # unit tests for the link engine
# Press F5 in VS Code with this folder open -> "Run Extension" launches a new Extension Development Host.
# Run the command: Agent YOLO: Open Agents Panelsrc/
extension.ts activation + command + view-provider registration
agents.ts loads the built-in catalog from agents.json + resolveAgents()/getAgentConfigWarnings()
agentDetector.ts install detection (resolvePath / canExecute), login shell so rc PATH is honoured
settings/ settings.json-backed config (schema in package.json contributes.configuration)
links/ link regex patterns (ported) + line parser
navigation/ file open + workspace-symbol lookup (gotoClassContributor equivalent)
terminal/
terminalProvider.ts node-pty spawn (ported launch path)
panel.ts WebviewViewProvider owning the PTY + message bridge
panelHtml.ts CSP-safe HTML renderer for the bundled webview
shell.ts shell resolution (yolo.shell / yolo.shellArgs)
webview/
panel.ts bundled webview entry: xterm + combined link provider
media/dist/ esbuild output (bundled xterm) — referenced by the webview
media/agents/ agent logos (PNG)
media/icons/ activity-bar / panel icons + Y/R toggle SVGs
scripts/
ensure-node-pty-exec.cjs postinstall: chmod node-pty's spawn-helper executable
test/ node:test unit tests (linkPatterns / linkParser)
The webview is bundled with esbuild (no CDN) and served from localResourceRoots with a strict CSP.
- Panel (activity bar):
activate()loads the built-in catalog (initBuiltInAgents), refreshes the installed cache, and registersYoloViewProviderfor theyolo.panelwebview view inside theyolo-agentsactivity-bar container. The panel'syolo.openPanelcommand reveals/focuses it. - Install detection:
canExecute(command)runs<command> --versionin a login-interactive shell, treating exit code 0 as installed; results are cached in theyolo.installedCommandssetting so PATH isn't re-probed per window. It uses$SHELL -lcon macOS/Linux andwhereon Windows, so it honours PATH injected by rc files (nvm / fnm / brew / npm-global, etc.). - Embedded terminal:
terminalProvider.tsspawns the agent via node-pty inside a login shell; the PTY output is bridged to the bundled xterm webview, and user input is written back. Each Launch opens a new tab with its own scrollback. - Clickable links: the webview's combined link provider scans terminal output with the patterns in
links/and turns matches into navigable links — file paths open in the editor, type/member links resolve via the workspace-symbol provider (needs a language server), and URLs open in the browser. - Settings-driven:
resolveAgents()merges theagents.jsonbuilt-in catalog with theyolo.agentssetting bycommand/id, and validatescommand/displayName/iduniqueness (getAgentConfigWarningsemits the warnings).
Two paths, depending on whether you want to ship code:
Path A: settings only (recommended, user-side, no rebuild)
Append an entry to yolo.agents in your settings.json:
{ "command": "myagent", "displayName": "My Agent", "baseArgs": "", "skipFlag": "--auto", "iconFile": "myagent.png" }Drop the logo into media/agents/myagent.png — no recompile needed.
Path B: add as a built-in (code-side)
- Edit the root
agents.jsonand append an entry (id/command/displayName/baseArgs/skipFlag/resumeFlag/iconFile). - Put the corresponding PNG into
media/agents/. npm run build, then reload the window.
Note: the runtime setting is authoritative. If a user has overridden
yolo.agents, a newly added built-in only appears once they also add it to their setting (or remove the override to restore the defaults).
