opencode: two profiles, per-profile permissions, shared agent prompts

oc-work: local models only on the local key, edits and most commands ask,
loads instructions/work.md. oc-local (also oc, opencode): every model,
defaults to qwen3.8-flash-next-iq3s-med, edits and commands run except
destructive and outward-facing ones. On sctfw004 oc-local presents the work
key. personal.json and work-strict.json removed.

Agents: drop variant, which has no effect on LiteLLM models. dev takes its
permissions from the profile. The read-only agents deny redirects and the
write/exec flags of allowed commands, swap find for fd, and only allow
listing forms of git branch. review defaults to the uncommitted diff.

CLAUDE.md: add the comment, process and shell-tool rules from the laptop's
AGENTS.md, and note that OpenCode reads this file.
This commit is contained in:
connor committed 2026-11-02 10:34:38 -05:00
1 parent 7ad155c4b2
commit 275a5bfb2b
16 files changed
+439 -680

No files matched your search

+68 -112
View File
@@ -3,7 +3,7 @@
"provider": {
"litellm": {
"npm": "@ai-sdk/openai-compatible",
"name": "LiteLLM · WORK",
"name": "LiteLLM · WORK (local models)",
"options": {
"baseURL": "{env:LITELLM_BASE}/v1",
"apiKey": "{env:LITELLM_KEY}"
@@ -35,19 +35,6 @@
"cache_write": 0.0
}
},
"gemma3-12b": {
"name": "gemma3-12b (local, on demand)",
"limit": {
"context": 32768,
"output": 8192
},
"cost": {
"input": 0.0,
"output": 0.0,
"cache_read": 0.0,
"cache_write": 0.0
}
},
"qwen3.8-flash-next": {
"name": "qwen3.8-flash-next (rented MI325X; run gi up on mainframe first)",
"limit": {
@@ -61,11 +48,11 @@
"cache_write": 0.0
}
},
"chatgpt/gpt-5.6-sol": {
"name": "gpt-5.6-sol (ChatGPT Plus, flat fee)",
"qwen3-next-80b-128k": {
"name": "qwen3-next-80b (local, 128k agentic)",
"limit": {
"context": 272000,
"output": 128000
"context": 131072,
"output": 8192
},
"cost": {
"input": 0.0,
@@ -74,11 +61,11 @@
"cache_write": 0.0
}
},
"chatgpt/gpt-5.6-terra": {
"name": "gpt-5.6-terra (ChatGPT Plus, flat fee)",
"qwen3-next-80b": {
"name": "qwen3-next-80b (local, 32k)",
"limit": {
"context": 272000,
"output": 128000
"context": 32768,
"output": 8192
},
"cost": {
"input": 0.0,
@@ -87,11 +74,11 @@
"cache_write": 0.0
}
},
"chatgpt/gpt-5.6-luna": {
"name": "gpt-5.6-luna (ChatGPT Plus, flat fee)",
"gemma3-12b": {
"name": "gemma3-12b (local, on demand)",
"limit": {
"context": 272000,
"output": 128000
"context": 32768,
"output": 8192
},
"cost": {
"input": 0.0,
@@ -100,11 +87,11 @@
"cache_write": 0.0
}
},
"chatgpt/gpt-5.5": {
"name": "gpt-5.5 (ChatGPT Plus, flat fee)",
"muse-glimmer-30b-low": {
"name": "Muse Glimmer 30B (local, low reasoning)",
"limit": {
"context": 272000,
"output": 128000
"context": 131072,
"output": 8192
},
"cost": {
"input": 0.0,
@@ -113,76 +100,11 @@
"cache_write": 0.0
}
},
"openai/gpt-5.6-sol": {
"name": "gpt-5.6-sol (OpenAI direct)",
"muse-glimmer-30b": {
"name": "Muse Glimmer 30B (local, full reasoning - slow)",
"limit": {
"context": 1050000,
"output": 128000
},
"cost": {
"input": 4.0,
"output": 20.0,
"cache_read": 0.4,
"cache_write": 5.0
}
},
"openai/gpt-5.5": {
"name": "gpt-5.5 (OpenAI direct)",
"limit": {
"context": 1050000,
"output": 128000
},
"cost": {
"input": 5.0,
"output": 30.0,
"cache_read": 0.5,
"cache_write": 0.0
}
},
"openai/gpt-5.4": {
"name": "gpt-5.4 (OpenAI direct)",
"limit": {
"context": 1050000,
"output": 128000
},
"cost": {
"input": 2.5,
"output": 15.0,
"cache_read": 0.25,
"cache_write": 0.0
}
},
"openai/gpt-5.4-mini": {
"name": "gpt-5.4-mini (OpenAI direct)",
"limit": {
"context": 1050000,
"output": 128000
},
"cost": {
"input": 0.75,
"output": 4.5,
"cache_read": 0.075,
"cache_write": 0.0
}
},
"openai/gpt-5.3-codex": {
"name": "gpt-5.3-codex (OpenAI direct)",
"limit": {
"context": 200000,
"output": 64000
},
"cost": {
"input": 1.75,
"output": 14.0,
"cache_read": 0.175,
"cache_write": 0.0
}
},
"chatgpt/gpt-5.6-terra-low": {
"name": "GPT-5.6 Terra (reasoning_effort=low)",
"limit": {
"context": 272000,
"output": 128000
"context": 131072,
"output": 8192
},
"cost": {
"input": 0.0,
@@ -199,27 +121,61 @@
],
"model": "litellm/qwen3.8-flash-next-iq3s-med",
"small_model": "litellm/qwen3.8-flash-next-iq3s-med",
"instructions": [
"~/.dotfiles/common/opencode/instructions/work.md"
],
"permission": {
"edit": "ask",
"webfetch": "ask",
"external_directory": "ask",
"read": {
"*": "ask",
"*": "allow",
"*.env": "ask",
"*.env.*": "ask",
"*.env.example": "ask"
"*.env.example": "allow"
},
"bash": {
"cat *": "ask",
"head *": "ask",
"tail *": "ask",
"rg *": "ask",
"grep *": "ask",
"find *": "ask"
"*": "ask",
"git status": "allow",
"git status *": "allow",
"git diff": "allow",
"git diff *": "allow",
"git log": "allow",
"git log *": "allow",
"git show": "allow",
"git show *": "allow",
"git branch": "allow",
"git branch --list*": "allow",
"git branch -a*": "allow",
"git branch -r*": "allow",
"git branch -v*": "allow",
"git blame *": "allow",
"git rev-parse *": "allow",
"git stash list": "allow",
"ls": "allow",
"ls *": "allow",
"pwd": "allow",
"cat *": "allow",
"head *": "allow",
"tail *": "allow",
"wc *": "allow",
"rg *": "allow",
"grep *": "allow",
"fd *": "allow",
"which *": "allow",
"file *": "allow",
"stat *": "allow",
"*>*": "ask",
"git * --output*": "ask",
"rg *--pre*": "ask",
"fd *-x *": "ask",
"fd *-X *": "ask",
"fd *--exec*": "ask"
}
},
"agent": {
"dev": {},
"architect": {},
"review": {},
"duck": {},
"brainstorm": {}
"homelab": {
"disable": true
}
}
}