vaalrl27 downloadsRun AI coding agents such as Claude Code, Codex and opencode in a terminal inside your vault, with one-click launch and shared instructions.
Run AI coding agents — Claude Code, Codex CLI, opencode, Antigravity CLI or any other command-line tool, with cloud or local models through Ollama — in a real terminal inside Obsidian, right next to your notes.
CLAUDE.md, AGENTS.md, GEMINI.md and shares skills with each agent.
Demos recorded in Obsidian 1.15.0 on Linux. The mouse pointer is drawn in afterwards at the position of the element that was clicked.
npm install -g @anthropic-ai/claude-code, @openai/codex or opencode-ai).From Community plugins (once the plugin is listed): Settings → Community plugins → Browse, search for "Agent Terminal", install and enable.
Manually: download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/agent-terminal/, then enable the plugin in Settings → Community plugins.
The first time you open a terminal, the plugin asks to download its terminal engine (see Privacy and network use).
The bot button opens a menu of commands, grouped per agent. Every entry is plain text you can edit in the settings, and each one is also available in the command palette as "Run quick command: …", so you can bind it to a hotkey.
Out of the box the menu has Claude Code and Antigravity CLI. In the settings, under Agent presets, press Add next to Codex CLI presets or opencode presets to add the others (or Claude Code / Antigravity CLI again, if you removed them), and next to Ollama presets for local and cloud models:
| Claude Code | Antigravity CLI | Codex CLI | opencode | |
|---|---|---|---|---|
| New session | claude |
agy |
codex |
opencode |
| Continue last session | claude --continue |
agy --continue |
codex resume --last |
opencode --continue |
| Skip permission prompts | claude --dangerously-skip-permissions |
agy --dangerously-skip-permissions |
codex --dangerously-bypass-approvals-and-sandbox |
opencode --auto |
| Continue + skip prompts | claude --continue --dangerously-skip-permissions |
agy --continue --dangerously-skip-permissions |
codex resume --last --dangerously-bypass-approvals-and-sandbox |
opencode --continue --auto |

.obsidian folder. If you share the vault (git, Syncthing, …), review them like any other script before running.Every quick command is an Obsidian command named Agent Terminal: Run quick command: …, including its options (for example claude --continue --dangerously-skip-permissions). Bind any of them in Settings → Hotkeys, and Agent Terminal: Run default button action to whatever the bot button runs.
Ollama is not an agent itself: ollama launch starts Claude Code, Codex CLI or opencode with a local model or an Ollama cloud model. Add the Ollama presets in the settings (Agent presets):
| Claude Code | Codex CLI | opencode | |
|---|---|---|---|
| New session | ollama launch claude |
ollama launch codex |
ollama launch opencode |
| Continue last session | ollama launch claude -- --continue |
ollama launch codex -- resume --last |
ollama launch opencode -- --continue |
ollama run <model> only chats.--model <name> to pin one, for example ollama launch claude --model qwen3.5.-- go to the agent, so you can add its options, such as ollama launch claude -- --dangerously-skip-permissions. The presets leave out permission-skipping variants, because smaller local models misuse tools more often.ollama serve). Models ending in :cloud run on ollama.com, so your prompts leave your computer.Bootstrap AI core writes one instruction file and a set of skills into the vault and links them to the places each agent reads:

| Agent | Instructions | Skills |
|---|---|---|
| Claude Code | CLAUDE.md |
.claude/skills/ |
| Codex CLI | AGENTS.md |
.agents/skills/ |
| opencode | AGENTS.md |
.agents/skills/, .claude/skills/ |
| Antigravity CLI | GEMINI.md, AGENTS.md |
.agents/skills/ |
| Cursor, Windsurf | .cursorrules, .windsurfrules |
— |
ai-core.md; every name in the table is a link to it, so editing any of them edits all. Shared skills live in .ai-core/skills/<name>/SKILL.md, and anything you put there is linked to every agent too.CLAUDE.md are renamed to .bak first, never deleted, and you are asked before that happens: a dialog lists every file that would be replaced, and nothing changes if you cancel. On Windows and macOS, where file names are case-insensitive, a file of yours that differs only in case (for example gemini.md) is left as it is and that name is not linked.ai-core.md), Obsidian Markdown conventions, a vault map (a snapshot of the folders, refreshed each time you run it), the Obsidian CLI and, when the Dataview plugin is enabled, Dataview queries.ai-core.md and the included skills. If one of them was edited since it was generated (for example the directory definitions written by the explore-vault skill), the dialog lists it and it is first copied to .bak (ai-core.md.bak, SKILL.md.bak). Keep your own rules and skills in separate files (for example your own skill folder), which are never touched.Agents can drive the Obsidian window through the official Obsidian CLI:
| Ask the agent to… | It runs |
|---|---|
| Open today's daily note | obsidian daily |
| Toggle reading view ↔ editing view | obsidian command id=markdown:toggle-preview |
| Toggle Live Preview ↔ Source mode | obsidian command id=editor:toggle-source |
| Run any other command | obsidian commands to find its ID, then obsidian command id=<id> |
Set it up once:
obsidian-cli skill teaches the agents the commands above, including the vault="…" argument so the right vault responds, and tells them to ask before anything destructive.The plugin settings show whether the CLI is available (Obsidian CLI for AI agents → Status). When the CLI folder is not on Obsidian's own PATH yet (an app started from the Dock, or Windows before Obsidian is restarted), Agent Terminal adds it to the terminal's PATH, so restarting the terminal is enough.
Allow the commands without skipping every prompt:
"Bash(obsidian daily*)" and "Bash(obsidian command *)" to permissions.allow in .claude/settings.json."permission": { "bash": { "obsidian *": "allow" } } to opencode.json in the vault.obsidian outside the sandbox when Codex asks.Shell: pick any detected shell from a dropdown (Windows: PowerShell, Command Prompt, WSL, Git Bash; macOS and Linux: from /etc/shells) or enter a path.
Starting folder: the vault root, the current note's folder, or a custom path (with folder suggestions and a folder browser).
Auto-sync (optional): follow the current note's folder when you switch notes. This happens only while the shell is waiting for a command, so it never types into a running agent or editor (macOS and Linux).
Copy and paste:
| Copy | Paste | |
|---|---|---|
| Windows | Ctrl+Shift+C, Ctrl+Insert, Ctrl+C while text is selected |
Ctrl+V, Ctrl+Shift+V, Shift+Insert |
| Linux | Ctrl+Shift+C, Ctrl+Insert, Ctrl+C while text is selected |
Ctrl+Shift+V, Shift+Insert |
| macOS | Cmd+C |
Cmd+V |
Without a selection, Ctrl+C interrupts the running command as usual. On Linux, Ctrl+V keeps its terminal meaning (for example block selection in vim).
Obsidian installs only main.js, manifest.json and styles.css for a plugin. The terminal also needs node-pty, a small native module that differs per operating system, so:
This is the plugin's only network request. If you decline, nothing is downloaded and the terminal stays unavailable; press the restart button in the terminal to be asked again. The plugin collects no data. The agents you run are separate programs with their own network use and terms.
Offline or unsupported platforms: run npm install node-pty inside <vault>/.obsidian/plugins/agent-terminal/. This needs Node.js and, on Linux and unsupported platforms, a C++ build toolchain.
A terminal runs programs on your computer, so the plugin works with files outside the vault:
/etc/shells on macOS and Linux, and checks the usual install locations of PowerShell, Command Prompt, WSL and Git Bash on Windows, to list the shells you can pick.node from your PATH if Obsidian does not allow that, and then starts the shell you chose. The terminal opens in the vault, the current note's folder or a custom folder you set, which can be outside the vault.obsidian command in the folders on your PATH and where Obsidian registers it (/usr/local/bin on macOS, ~/.local/bin on Linux, next to Obsidian.exe on Windows) to show its status and add it to the terminal's PATH.bridge.js and node_modules/node-pty) and, when you run Bootstrap AI core, in the vault.The shell and the agents you start in it run with your user account's permissions and can read and change any file you can. That is what a terminal is for; review what you allow an agent to do.
node on your PATH; then install Node.js and restart the terminal.~/.zprofile, ~/.bash_profile) are missing. Add them in ~/.zshrc / ~/.bashrc instead, or use the full path in the quick command..bak files: those are your own files that had the same name, or an ai-core.md or skill that was edited after it was generated (the confirmation dialog listed them). Merge what you need into ai-core.md and delete the backups.Bug reports and pull requests are welcome. See CONTRIBUTING.md for development, tests and releases, and ARCHITECTURE.md for how the plugin is built.