Compare commits

..

2 commits

Author SHA1 Message Date
Paul-Henri Froidmont
c5abace3d9
fix(nvim): use opencode server fallback in kitty and move mappings to <leader>o 2026-03-25 01:03:37 +01:00
Paul-Henri Froidmont
3416f8a013
refine opencode config: stricter permissions, better debug defaults 2026-03-25 00:35:00 +01:00
4 changed files with 82 additions and 49 deletions

View file

@ -23,6 +23,11 @@ in
settings = { settings = {
model = "minimax_m2_1"; model = "minimax_m2_1";
permission = { permission = {
external_directory = {
"*" = "ask";
"/nix/store/**" = "allow";
};
bash = { bash = {
"*" = "ask"; "*" = "ask";
@ -32,16 +37,30 @@ in
"uname*" = "allow"; "uname*" = "allow";
"date*" = "allow"; "date*" = "allow";
"ls*" = "allow"; "ls*" = "allow";
"stat*" = "allow";
"readlink*" = "allow";
"realpath*" = "allow";
"tree*" = "allow";
"du -sh*" = "allow";
"rg*" = "allow";
"fd*" = "allow";
"find*" = "allow"; "find*" = "allow";
"cat*" = "allow";
"head*" = "allow"; "head*" = "allow";
"wc*" = "allow"; "wc*" = "allow";
"tail*" = "allow"; "tail*" = "allow";
"sort*" = "allow"; "sort*" = "allow";
"uniq*" = "allow";
"cut*" = "allow";
"git status*" = "allow"; "git status*" = "allow";
"git diff*" = "allow"; "git diff*" = "allow";
"git log*" = "allow"; "git log*" = "allow";
"git show*" = "allow";
"git ls-files*" = "allow";
"git blame*" = "allow";
"git branch*" = "allow"; "git branch*" = "allow";
"git tag*" = "allow";
"git rev-parse*" = "allow"; "git rev-parse*" = "allow";
"git remote -v" = "allow"; "git remote -v" = "allow";
@ -49,9 +68,30 @@ in
"npm -v" = "allow"; "npm -v" = "allow";
"python --version" = "allow"; "python --version" = "allow";
"pip --version" = "allow"; "pip --version" = "allow";
"nix --version" = "allow";
"nix path-info*" = "allow";
"nix-store --query*" = "allow";
"nix-store -q*" = "allow";
"nix eval*" = "allow";
"nix search*" = "allow";
"nix flake show*" = "allow";
"git commit*" = "ask";
"git push*" = "ask";
"npm install*" = "ask";
"nixos-rebuild*" = "ask";
"systemctl*" = "ask";
"rm *" = "ask";
}; };
edit = "ask"; edit = {
"*" = "ask";
"/nix/store/**" = "deny";
"/run/current-system/**" = "deny";
"/nix/var/nix/profiles/system/**" = "deny";
"/etc/static/**" = "deny";
};
skill = { skill = {
"*" = "allow"; "*" = "allow";
@ -68,12 +108,6 @@ in
}; };
models = { models = {
glm_4_5_air = {
name = "GLM 4.5 Air (local)";
temperature = true;
default = true;
};
minimax_m2_1 = { minimax_m2_1 = {
name = "MiniMax M2.1 (local)"; name = "MiniMax M2.1 (local)";
temperature = true; temperature = true;
@ -81,31 +115,11 @@ in
}; };
}; };
}; };
openai = {
models = {
"gpt-5.1-codex" = {
options = {
store = false;
# reasoningEffort = "high";
# textVerbosity = "medium";
# reasoningSummary = "auto";
include = [ "reasoning.encrypted_content" ];
};
};
"gpt-5.1-codex-max" = {
options = {
store = false;
include = [ "reasoning.encrypted_content" ];
};
};
};
};
}; };
agent = { agent = {
build = { build = {
mode = "primary"; mode = "primary";
temperature = 0.1; temperature = 0.1;
prompt = "{file:${./prompts/basic-rules.txt}}";
}; };
plan = { plan = {
mode = "primary"; mode = "primary";
@ -113,6 +127,17 @@ in
}; };
debug = { debug = {
disable = false; disable = false;
temperature = 0.15;
steps = 12;
prompt = "{file:${./prompts/debug-rules.txt}}";
permission = {
edit = "deny";
task = {
"*" = "deny";
"explore" = "allow";
"general" = "ask";
};
};
}; };
review = { review = {
disable = false; disable = false;

View file

@ -1,13 +0,0 @@
- No artifacts
- Less code is better than more code
- No fallback mechanisms — they hide real failures
- Rewrite existing components over adding new ones
- Flag obsolete files to keep the codebase lightweight
- Avoid race conditions at all costs
- Take your time to ultrathink when on extended thinking mode — thinking is cheaper than fixing bugs
- Add comments only when necessary — the code should speak for itself
- Always add meaningful logs — but only where it brings value
- Always do production ready code
- Code in a modular way to promote collaboration between agents - Adding features must not break the rest of the system
These rules aim to maintain a clean, modular and maintainable codebase while promoting effective collaboration between different agents and developers. Don't write/change any code until you're very confident (95% or more) in what needs to be done. If unclear, ask for more info.

View file

@ -0,0 +1,8 @@
- Reproduce first, change nothing until the failure is understood
- Identify exact failing path, inputs, and assumptions
- Collect concrete evidence first (failing command, logs, stack trace)
- Prefer minimal, high-signal checks over broad scans
- State root cause confidence and alternative hypotheses
- Prefer temporary instrumentation over broad refactors
- Propose the smallest safe fix and verification steps
- If confidence <95%, ask for one missing fact

View file

@ -1,13 +1,26 @@
return { return {
"NickvanDyke/opencode.nvim", "NickvanDyke/opencode.nvim",
config = function() config = function()
local function open_opencode_in_kitty_tab()
vim.fn.jobstart({
"kitty",
"@",
"launch",
"--type=tab",
"--cwd",
vim.fn.getcwd(),
"sh",
"-lc",
"opencode --port",
}, { detach = true })
end
---@type opencode.Opts ---@type opencode.Opts
vim.g.opencode_opts = { vim.g.opencode_opts = {
provider = { server = {
enabled = "kitty", start = open_opencode_in_kitty_tab,
kitty = { toggle = open_opencode_in_kitty_tab,
location = "tab" stop = function() end,
}
}, },
events = { events = {
permissions = { permissions = {
@ -17,19 +30,19 @@ return {
} }
vim.o.autoread = true vim.o.autoread = true
vim.keymap.set({ "n", "x" }, "<leader>aa", function() vim.keymap.set({ "n", "x" }, "<leader>oa", function()
require("opencode").ask("@this: ", { submit = true }) require("opencode").ask("@this: ", { submit = true })
end, { desc = "Ask opencode" }) end, { desc = "Ask opencode" })
vim.keymap.set({ "n", "x" }, "<leader>ao", function() vim.keymap.set({ "n", "x" }, "<leader>oo", function()
require("opencode").select() require("opencode").select()
end, { desc = "Execute opencode action…" }) end, { desc = "Execute opencode action…" })
vim.keymap.set({ "n", "x" }, "<leader>as", function() vim.keymap.set({ "n", "x" }, "<leader>os", function()
require("opencode").prompt("@this") require("opencode").prompt("@this")
end, { desc = "Add to opencode" }) end, { desc = "Add to opencode" })
vim.keymap.set({ "n", "t" }, "<leader>a.", function() vim.keymap.set({ "n", "t" }, "<leader>o.", function()
require("opencode").toggle() require("opencode").toggle()
end, { desc = "Toggle opencode" }) end, { desc = "Toggle opencode" })
end, end,