> For the complete documentation index, see [llms.txt](https://dotagent.avelino.run/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dotagent.avelino.run/built-in-plugins/plugins.md).

# Overview

dotagent ships with first-party plugins, installed alongside the `dotagent` binary by the Homebrew formula. Each has its own page below with full config schema, behavior details, examples, and troubleshooting.

For the **concept** (what a plugin is, how to use one, how to write one), see [`docs/plugins.md`](/concepts/plugins.md). For the **protocol spec** (verbs, JSON shape, exit codes), see [`docs/reference/plugin-protocol.md`](/reference/plugin-protocol.md).

> **Note on notifications.** Notifications **used to be plugins** (`notify-imessage`, `notify-desktop`, etc). They are now **built into the daemon** under the `[[notifiers]]` array — no plugin subprocess, native APIs (NSUserNotification on macOS, D-Bus on Linux, HTTPS for Slack/ntfy/Pushover/Telegram). See [`docs/concepts/notifications.md`](/concepts/notifications.md) for the new shape.

## Preflight plugins (`kind = "preflight"`)

Run BEFORE the agent. If any returns `ok=false`, the agent is aborted and `on_failure` fires with `event = "preflight"`.

| Plugin                                                            | Platforms     | When to pick                                                      |
| ----------------------------------------------------------------- | ------------- | ----------------------------------------------------------------- |
| [`preflight-warp`](/built-in-plugins/preflight/preflight-warp.md) | macOS + Linux | Agent depends on a corporate VPN routed via Cloudflare WARP.      |
| [`preflight-cmd`](/built-in-plugins/preflight/preflight-cmd.md)   | macOS + Linux | Generic: run any shell command, gate on exit code + stdout match. |

## Sink plugins (`kind = "sink"`)

Run AFTER a successful agent run. Persist the captured stdout somewhere.

| Plugin                                             | Platforms     | When to pick                                                             |
| -------------------------------------------------- | ------------- | ------------------------------------------------------------------------ |
| [`sink-roam`](/built-in-plugins/sink/sink-roam.md) | macOS + Linux | Output is hierarchical markdown destined for Roam Research.              |
| [`sink-outl`](/built-in-plugins/sink/sink-outl.md) | macOS + Linux | Output is hierarchical markdown destined for Outl (single batched call). |
| [`sink-file`](/built-in-plugins/sink/sink-file.md) | macOS + Linux | Output is a single file (overwrite or append).                           |

## Discovery

dotagent finds these binaries via `$PATH` (Homebrew installs them in `/opt/homebrew/bin/` on Apple silicon / `/usr/local/bin/` on Intel / Linux). Custom plugins go in `~/.config/dotagent/plugins/` or anywhere listed in `$DOTAGENT_PLUGIN_PATH`.

Verify what's available:

```bash
dotagent plugin list
dotagent doctor                                 # validates every reference in your manifests
dotagent-plugin-<name> info | jq .              # raw metadata for any plugin
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://dotagent.avelino.run/built-in-plugins/plugins.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
