Dotagent.Nvim banner
0xble 0xble

Dotagent.Nvim

Development community

Description

Neovim completion for local agent commands and skills, with env-gated Claude/Codex editor integration

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

dotagent.nvim

`dotagent.nvim` adds Claude Code and Codex-style `/command`, `/skill`, and `/prompt` completion to your Ctrl+G prompt editor in Neovim, configured to your local agent directories.

[![dotagent.nvim demo](assets/dotagent-demo.gif)](assets/dotagent-demo.mp4)

Requirements

  • Neovim 0.10+
  • saghen/blink.cmp

Release Status

The current recommended public tag is `v0.4.0`.

The plugin uses git tags for releases. There is no separate version file in the repo.

Features

  • Scans native agent roots for commands/, skills/, and optional prompts/
  • Supports explicit command_dirs, skill_dirs, and prompt_dirs overrides
  • Provides a Blink source for /command, /skill, and /prompt completion
  • Uses distinct Dotagent menu icons by default: for commands, 󰧑 for skills, 󰘧 for prompts
  • Auto-attaches only when the editor session is launched with DOTAGENT_EDITOR_PROMPT=1
  • Supports manual :DotagentAttach and :DotagentDetach
  • Includes :DotagentRefresh, :DotagentBrowse, and :DotagentHealth

Install

Lazy example:

{
  "0xble/dotagent.nvim",
  config = function()
    require("dotagent").setup()
  end,
}

By default `dotagent.nvim` looks for native Codex and Claude roots:

  • ~/.agent/shared
  • ~/.agent/runtimes/codex
  • ~/.agent/runtimes/claude
  • ~/.claude

For each root it reads:

  • commands/*.md
  • skills/*/SKILL.md
  • prompts/*.md, only when the prompts/ folder exists

Blink setup:

{
  "saghen/blink.cmp",
  opts = function(_, opts)
    opts.sources = opts.sources or {}
    opts.sources.default = function()
      local sources = { "lsp", "path", "snippets" }
      if require("dotagent").is_buffer_enabled(0) then
        table.insert(sources, 1, "dotagent")
      elseif vim.bo.filetype ~= ""
        and vim.bo.filetype ~= "markdown"
        and vim.bo.filetype ~= "text"
        and vim.bo.filetype ~= "gitcommit"
      then
        table.insert(sources, "buffer")
      end
      return