From c296d22788af6c9f86298e6f38667db49e1d6cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Wi=C4=85cek?= Date: Mon, 20 Apr 2026 15:14:20 +0200 Subject: [PATCH 1/3] Add AI plugins --- lua/plugins/99.lua | 100 +++++++++++++++++++++++++++++++++++++ lua/plugins/claudecode.lua | 24 +++++++++ lua/plugins/claudecode.rs | 34 +++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 lua/plugins/99.lua create mode 100644 lua/plugins/claudecode.lua create mode 100644 lua/plugins/claudecode.rs diff --git a/lua/plugins/99.lua b/lua/plugins/99.lua new file mode 100644 index 0000000..c70dd16 --- /dev/null +++ b/lua/plugins/99.lua @@ -0,0 +1,100 @@ +return { + "ThePrimeagen/99", + config = function() + local _99 = require("99") + + -- For logging that is to a file if you wish to trace through requests + -- for reporting bugs, i would not rely on this, but instead the provided + -- logging mechanisms within 99. This is for more debugging purposes + local cwd = vim.uv.cwd() + local basename = vim.fs.basename(cwd) + _99.setup({ + provider = _99.Providers.ClaudeCodeProvider, + model = "claude-opus-4-6", + logger = { + level = _99.DEBUG, + path = "/tmp/" .. basename .. ".99.debug", + print_on_error = true, + }, + -- When setting this to something that is not inside the CWD tools + -- such as claude code or opencode will have permission issues + -- and generation will fail refer to tool documentation to resolve + -- https://opencode.ai/docs/permissions/#external-directories + -- https://code.claude.com/docs/en/permissions#read-and-edit + tmp_dir = "./tmp", + + --- Completions: #rules and @files in the prompt buffer + completion = { + -- I am going to disable these until i understand the + -- problem better. Inside of cursor rules there is also + -- application rules, which means i need to apply these + -- differently + -- cursor_rules = "" + + --- A list of folders where you have your own SKILL.md + --- Expected format: + --- /path/to/dir//SKILL.md + --- + --- Example: + --- Input Path: + --- "scratch/custom_rules/" + --- + --- Output Rules: + --- {path = "scratch/custom_rules/vim/SKILL.md", name = "vim"}, + --- ... the other rules in that dir ... + --- + custom_rules = { + "scratch/custom_rules/", + }, + + --- Configure @file completion (all fields optional, sensible defaults) + files = { + -- enabled = true, + -- max_file_size = 102400, -- bytes, skip files larger than this + -- max_files = 5000, -- cap on total discovered files + -- exclude = { ".env", ".env.*", "node_modules", ".git", ... }, + }, + --- File Discovery: + --- - In git repos: Uses `git ls-files` which automatically respects .gitignore + --- - Non-git repos: Falls back to filesystem scanning with manual excludes + --- - Both methods apply the configured `exclude` list on top of gitignore + + --- What autocomplete engine to use. Defaults to native (built-in) if not specified. + source = "native", -- "native" (default), "cmp", or "blink" + }, + + --- WARNING: if you change cwd then this is likely broken + --- ill likely fix this in a later change + --- + --- md_files is a list of files to look for and auto add based on the location + --- of the originating request. That means if you are at /foo/bar/baz.lua + --- the system will automagically look for: + --- /foo/bar/AGENT.md + --- /foo/AGENT.md + --- assuming that /foo is project root (based on cwd) + md_files = { + "CLAUDE.md", + }, + }) + + -- take extra note that i have visual selection only in v mode + -- technically whatever your last visual selection is, will be used + -- so i have this set to visual mode so i dont screw up and use an + -- old visual selection + -- + -- likely ill add a mode check and assert on required visual mode + -- so just prepare for it now + vim.keymap.set("v", "9v", function() + _99.visual() + end) + + --- if you have a request you dont want to make any changes, just cancel it + vim.keymap.set("n", "9x", function() + _99.stop_all_requests() + end) + + vim.keymap.set("n", "9s", function() + _99.search() + end) + end, +} diff --git a/lua/plugins/claudecode.lua b/lua/plugins/claudecode.lua new file mode 100644 index 0000000..9a7cf8f --- /dev/null +++ b/lua/plugins/claudecode.lua @@ -0,0 +1,24 @@ +return { + "coder/claudecode.nvim", + dependencies = { "folke/snacks.nvim" }, + config = true, + keys = { + { "a", nil, desc = "AI/Claude Code" }, + { "ac", "ClaudeCode", desc = "Toggle Claude" }, + { "af", "ClaudeCodeFocus", desc = "Focus Claude" }, + { "ar", "ClaudeCode --resume", desc = "Resume Claude" }, + { "aC", "ClaudeCode --continue", desc = "Continue Claude" }, + { "am", "ClaudeCodeSelectModel", desc = "Select Claude model" }, + { "ab", "ClaudeCodeAdd %", desc = "Add current buffer" }, + { "as", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, + { + "as", + "ClaudeCodeTreeAdd", + desc = "Add file", + ft = { "NvimTree", "neo-tree", "oil", "minifiles", "netrw" }, + }, + -- Diff management + { "aa", "ClaudeCodeDiffAccept", desc = "Accept diff" }, + { "ad", "ClaudeCodeDiffDeny", desc = "Deny diff" }, + }, +} diff --git a/lua/plugins/claudecode.rs b/lua/plugins/claudecode.rs new file mode 100644 index 0000000..e41fa16 --- /dev/null +++ b/lua/plugins/claudecode.rs @@ -0,0 +1,34 @@ +struct Key { + lhs: &'static str, + rhs: Option<&'static str>, + desc: &'static str, + mode: Option<&'static str>, + ft: Option<&'static [&'static str]>, +} + +struct Plugin { + name: &'static str, + dependencies: &'static [&'static str], + config: bool, + keys: &'static [Key], +} + +const CLAUDE_CODE: Plugin = Plugin { + name: "coder/claudecode.nvim", + dependencies: &["folke/snacks.nvim"], + config: true, + keys: &[ + Key { lhs: "a", rhs: None, desc: "AI/Claude Code", mode: None, ft: None }, + Key { lhs: "ac", rhs: Some("ClaudeCode"), desc: "Toggle Claude", mode: None, ft: None }, + Key { lhs: "af", rhs: Some("ClaudeCodeFocus"), desc: "Focus Claude", mode: None, ft: None }, + Key { lhs: "ar", rhs: Some("ClaudeCode --resume"), desc: "Resume Claude", mode: None, ft: None }, + Key { lhs: "aC", rhs: Some("ClaudeCode --continue"), desc: "Continue Claude", mode: None, ft: None }, + Key { lhs: "am", rhs: Some("ClaudeCodeSelectModel"), desc: "Select Claude model", mode: None, ft: None }, + Key { lhs: "ab", rhs: Some("ClaudeCodeAdd %"), desc: "Add current buffer", mode: None, ft: None }, + Key { lhs: "as", rhs: Some("ClaudeCodeSend"), desc: "Send to Claude", mode: Some("v"), ft: None }, + Key { lhs: "as", rhs: Some("ClaudeCodeTreeAdd"), desc: "Add file", mode: None, ft: Some(&["NvimTree", "neo-tree", "oil", "minifiles", "netrw"]) }, + // Diff management + Key { lhs: "aa", rhs: Some("ClaudeCodeDiffAccept"), desc: "Accept diff", mode: None, ft: None }, + Key { lhs: "ad", rhs: Some("ClaudeCodeDiffDeny"), desc: "Deny diff", mode: None, ft: None }, + ], +}; \ No newline at end of file From 18d8045ef23f22afacfde749e406abd285315877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Wi=C4=85cek?= Date: Tue, 5 May 2026 21:05:52 +0200 Subject: [PATCH 2/3] Update model and lint --- lua/plugins/99.lua | 6 +++--- lua/plugins/claudecode.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/plugins/99.lua b/lua/plugins/99.lua index c70dd16..38c6ece 100644 --- a/lua/plugins/99.lua +++ b/lua/plugins/99.lua @@ -8,9 +8,9 @@ return { -- logging mechanisms within 99. This is for more debugging purposes local cwd = vim.uv.cwd() local basename = vim.fs.basename(cwd) - _99.setup({ + _99.setup { provider = _99.Providers.ClaudeCodeProvider, - model = "claude-opus-4-6", + model = "claude-opus-4-7", logger = { level = _99.DEBUG, path = "/tmp/" .. basename .. ".99.debug", @@ -75,7 +75,7 @@ return { md_files = { "CLAUDE.md", }, - }) + } -- take extra note that i have visual selection only in v mode -- technically whatever your last visual selection is, will be used diff --git a/lua/plugins/claudecode.rs b/lua/plugins/claudecode.rs index e41fa16..a2ec49b 100644 --- a/lua/plugins/claudecode.rs +++ b/lua/plugins/claudecode.rs @@ -31,4 +31,4 @@ const CLAUDE_CODE: Plugin = Plugin { Key { lhs: "aa", rhs: Some("ClaudeCodeDiffAccept"), desc: "Accept diff", mode: None, ft: None }, Key { lhs: "ad", rhs: Some("ClaudeCodeDiffDeny"), desc: "Deny diff", mode: None, ft: None }, ], -}; \ No newline at end of file +}; From e5bf1155f88bc5d33b1cbc796be3ea31db750c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Wi=C4=85cek?= Date: Tue, 5 May 2026 21:08:12 +0200 Subject: [PATCH 3/3] Stylua fixes --- lua/plugins/claudecode.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/plugins/claudecode.lua b/lua/plugins/claudecode.lua index 9a7cf8f..8360b0c 100644 --- a/lua/plugins/claudecode.lua +++ b/lua/plugins/claudecode.lua @@ -3,14 +3,14 @@ return { dependencies = { "folke/snacks.nvim" }, config = true, keys = { - { "a", nil, desc = "AI/Claude Code" }, - { "ac", "ClaudeCode", desc = "Toggle Claude" }, - { "af", "ClaudeCodeFocus", desc = "Focus Claude" }, - { "ar", "ClaudeCode --resume", desc = "Resume Claude" }, + { "a", nil, desc = "AI/Claude Code" }, + { "ac", "ClaudeCode", desc = "Toggle Claude" }, + { "af", "ClaudeCodeFocus", desc = "Focus Claude" }, + { "ar", "ClaudeCode --resume", desc = "Resume Claude" }, { "aC", "ClaudeCode --continue", desc = "Continue Claude" }, { "am", "ClaudeCodeSelectModel", desc = "Select Claude model" }, - { "ab", "ClaudeCodeAdd %", desc = "Add current buffer" }, - { "as", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, + { "ab", "ClaudeCodeAdd %", desc = "Add current buffer" }, + { "as", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, { "as", "ClaudeCodeTreeAdd", @@ -19,6 +19,6 @@ return { }, -- Diff management { "aa", "ClaudeCodeDiffAccept", desc = "Accept diff" }, - { "ad", "ClaudeCodeDiffDeny", desc = "Deny diff" }, + { "ad", "ClaudeCodeDiffDeny", desc = "Deny diff" }, }, }