Several updates at once
This commit is contained in:
1 parent
6b9b1697f2
commit
0a42f1547f
12 files changed
+396
-170
No files matched your search
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: Designs the change without making it. Produces a plan someone else could execute.
|
||||
mode: primary
|
||||
color: "#0ea5e9"
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": deny
|
||||
"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 *": 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
|
||||
"find *": allow
|
||||
"which *": allow
|
||||
"echo *": allow
|
||||
---
|
||||
|
||||
You are the architect agent. You design the change. You do not make it.
|
||||
|
||||
Produce a plan someone else could execute:
|
||||
|
||||
- The problem, in a sentence or two.
|
||||
- The approach, with the alternatives you rejected and why.
|
||||
- Concrete steps in order, each naming the files it touches.
|
||||
- The risks, and what would have to be true for this plan to be wrong.
|
||||
|
||||
Ground it in the actual code. Read what you are planning against and cite it by
|
||||
path and line. Where you are guessing, mark it as a guess.
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
description: Widens the option space before anything is committed to. Ideas and trade-offs, no code.
|
||||
mode: primary
|
||||
color: "#fbbf24"
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": deny
|
||||
"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 *": 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
|
||||
"find *": allow
|
||||
"which *": allow
|
||||
"echo *": allow
|
||||
---
|
||||
|
||||
You are the brainstorm agent. Widen the option space before anything gets
|
||||
committed to.
|
||||
|
||||
- Offer several genuinely different directions, not one idea with variations.
|
||||
- Give each its strongest case and its real cost, briefly.
|
||||
- Include at least one option that questions the framing of the request itself.
|
||||
- Do not converge on a recommendation unless asked. Breadth is the point.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: Hands-on development. Reads, edits, builds, and verifies, asking before it changes anything.
|
||||
mode: primary
|
||||
color: "#38bdf8"
|
||||
permission:
|
||||
edit: ask
|
||||
bash:
|
||||
"*": 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 *": 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
|
||||
"find *": allow
|
||||
"which *": allow
|
||||
"echo *": allow
|
||||
---
|
||||
|
||||
You are the dev agent: hands-on implementation in an existing codebase.
|
||||
|
||||
Work in small, reviewable steps. Prefer the smallest change that fully solves
|
||||
the problem, and match the conventions of the code you are editing rather than
|
||||
importing your own.
|
||||
|
||||
Verify before you report. Run the build or the tests that cover what you
|
||||
touched, and quote the actual output. If something failed, or you skipped a
|
||||
step, say so plainly instead of reporting success.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: Rubber duck. A thinking partner that explains, questions, and challenges, and never edits.
|
||||
mode: primary
|
||||
color: "#7dd3fc"
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": deny
|
||||
"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 *": 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
|
||||
"find *": allow
|
||||
"which *": allow
|
||||
"echo *": allow
|
||||
---
|
||||
|
||||
You are the rubber duck: a thinking partner, not an implementer.
|
||||
|
||||
- Ask before you answer when the question is ambiguous. One good clarifying
|
||||
question beats a confident guess.
|
||||
- Push back on weak reasoning. If a design carries a trade-off the user has not
|
||||
named, name it.
|
||||
- Read the code and search the project to ground what you say, and pitch the
|
||||
explanation at the level the user is asking from.
|
||||
- You are not here to agree. When the user is right, say so briefly and move on.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: Reviews code for defects and reports them with file and line references, without editing.
|
||||
mode: primary
|
||||
color: "#34d399"
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": deny
|
||||
"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 *": 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
|
||||
"find *": allow
|
||||
"which *": allow
|
||||
"echo *": allow
|
||||
---
|
||||
|
||||
You are the review agent. Read the code and report what is wrong with it.
|
||||
|
||||
- Order findings by severity, worst first. Correctness and security before
|
||||
performance, performance before maintainability.
|
||||
- Anchor every finding to a `path:line`, and state the concrete failure: the
|
||||
input or the state that produces the wrong result.
|
||||
- Describe the fix. Do not apply it.
|
||||
- Say when you are unsure rather than padding the list. A short review of real
|
||||
defects beats a long one of style opinions.
|
||||
+39
-65
@@ -3,16 +3,42 @@
|
||||
"provider": {
|
||||
"litellm": {
|
||||
"npm": "@ai-sdk/openai-compatible",
|
||||
"name": "LiteLLM \u00b7 LOCAL-ONLY",
|
||||
"name": "LiteLLM · LOCAL-ONLY",
|
||||
"options": {
|
||||
"baseURL": "{env:LITELLM_BASE}/v1",
|
||||
"apiKey": "{env:LITELLM_KEY}"
|
||||
},
|
||||
"models": {
|
||||
"gpt-oss-20b": {
|
||||
"name": "gpt-oss-20b (local, resident)",
|
||||
"qwen3.8-flash-next-iq3s-med": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, medium reasoning)",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3.8-flash-next-iq3s": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, full reasoning - slow)",
|
||||
"limit": {
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3-next-80b-128k": {
|
||||
"name": "qwen3-next-80b (local, 128k agentic)",
|
||||
"limit": {
|
||||
"context": 131072,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
@@ -22,8 +48,8 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3-coder-30b": {
|
||||
"name": "qwen3-coder-30b (local, on demand)",
|
||||
"qwen3-next-80b": {
|
||||
"name": "qwen3-next-80b (local, 32k)",
|
||||
"limit": {
|
||||
"context": 32768,
|
||||
"output": 8192
|
||||
@@ -48,32 +74,6 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/librarian": {
|
||||
"name": "Librarian - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/explore": {
|
||||
"name": "Explore - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"muse-glimmer-30b-low": {
|
||||
"name": "Muse Glimmer 30B (local, low reasoning)",
|
||||
"limit": {
|
||||
@@ -87,32 +87,6 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3.8-27b-gsq-s-low": {
|
||||
"name": "Qwen3.8-27B GSQ IQ3_S (local, low reasoning)",
|
||||
"limit": {
|
||||
"context": 131072,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3.8-27b-gsq-s-med": {
|
||||
"name": "Qwen3.8-27B GSQ IQ3_S (local, medium reasoning)",
|
||||
"limit": {
|
||||
"context": 131072,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"muse-glimmer-30b": {
|
||||
"name": "Muse Glimmer 30B (local, full reasoning - slow)",
|
||||
"limit": {
|
||||
@@ -132,23 +106,23 @@
|
||||
"enabled_providers": [
|
||||
"litellm"
|
||||
],
|
||||
"model": "litellm/local/librarian",
|
||||
"small_model": "litellm/local/librarian",
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"small_model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"agent": {
|
||||
"dev": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"architect": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"review": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"duck": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"brainstorm": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,17 +3,17 @@
|
||||
"provider": {
|
||||
"litellm": {
|
||||
"npm": "@ai-sdk/openai-compatible",
|
||||
"name": "LiteLLM \u00b7 PERSONAL",
|
||||
"name": "LiteLLM · PERSONAL",
|
||||
"options": {
|
||||
"baseURL": "{env:LITELLM_BASE}/v1",
|
||||
"apiKey": "{env:LITELLM_KEY}"
|
||||
},
|
||||
"models": {
|
||||
"gpt-oss-20b": {
|
||||
"name": "gpt-oss-20b (local, resident)",
|
||||
"qwen3.8-flash-next-iq3s-med": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, medium reasoning)",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 8192
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
@@ -22,11 +22,11 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3-coder-30b": {
|
||||
"name": "qwen3-coder-30b (local, on demand)",
|
||||
"qwen3.8-flash-next-iq3s": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, full reasoning - slow)",
|
||||
"limit": {
|
||||
"context": 32768,
|
||||
"output": 8192
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
@@ -48,32 +48,6 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/librarian": {
|
||||
"name": "Librarian - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 4096
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/explore": {
|
||||
"name": "Explore - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 4096
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"anthropic/claude-opus-5": {
|
||||
"name": "claude-opus-5 (Anthropic direct)",
|
||||
"limit": {
|
||||
@@ -243,32 +217,6 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3.8-27b-gsq-s-low": {
|
||||
"name": "Qwen3.8-27B GSQ IQ3_S (local, low reasoning)",
|
||||
"limit": {
|
||||
"context": 131072,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3.8-27b-gsq-s-med": {
|
||||
"name": "Qwen3.8-27B GSQ IQ3_S (local, medium reasoning)",
|
||||
"limit": {
|
||||
"context": 131072,
|
||||
"output": 8192
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"muse-glimmer-30b": {
|
||||
"name": "Muse Glimmer 30B (local, full reasoning - slow)",
|
||||
"limit": {
|
||||
@@ -288,23 +236,23 @@
|
||||
"enabled_providers": [
|
||||
"litellm"
|
||||
],
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med",
|
||||
"small_model": "litellm/local/librarian",
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"small_model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"agent": {
|
||||
"dev": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"architect": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"review": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"duck": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
},
|
||||
"brainstorm": {
|
||||
"model": "litellm/qwen3.8-27b-gsq-s-med"
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med"
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
-37
@@ -3,17 +3,17 @@
|
||||
"provider": {
|
||||
"litellm": {
|
||||
"npm": "@ai-sdk/openai-compatible",
|
||||
"name": "LiteLLM \u00b7 WORK",
|
||||
"name": "LiteLLM · WORK",
|
||||
"options": {
|
||||
"baseURL": "{env:LITELLM_BASE}/v1",
|
||||
"apiKey": "{env:LITELLM_KEY}"
|
||||
},
|
||||
"models": {
|
||||
"gpt-oss-20b": {
|
||||
"name": "gpt-oss-20b (local, resident)",
|
||||
"qwen3.8-flash-next-iq3s-med": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, medium reasoning)",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 8192
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
@@ -22,11 +22,11 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"qwen3-coder-30b": {
|
||||
"name": "qwen3-coder-30b (local, on demand)",
|
||||
"qwen3.8-flash-next-iq3s": {
|
||||
"name": "Qwen3.8-Flash-Next IQ3_S (local Strata, full reasoning - slow)",
|
||||
"limit": {
|
||||
"context": 32768,
|
||||
"output": 8192
|
||||
"context": 196608,
|
||||
"output": 32768
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
@@ -61,32 +61,6 @@
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/librarian": {
|
||||
"name": "Librarian - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 4096
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"local/explore": {
|
||||
"name": "Explore - local gpt-oss",
|
||||
"limit": {
|
||||
"context": 65536,
|
||||
"output": 4096
|
||||
},
|
||||
"cost": {
|
||||
"input": 0.0,
|
||||
"output": 0.0,
|
||||
"cache_read": 0.0,
|
||||
"cache_write": 0.0
|
||||
}
|
||||
},
|
||||
"chatgpt/gpt-5.6-sol": {
|
||||
"name": "gpt-5.6-sol (ChatGPT Plus, flat fee)",
|
||||
"limit": {
|
||||
@@ -223,8 +197,8 @@
|
||||
"enabled_providers": [
|
||||
"litellm"
|
||||
],
|
||||
"model": "litellm/chatgpt/gpt-5.6-terra-low",
|
||||
"small_model": "litellm/local/librarian",
|
||||
"model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"small_model": "litellm/qwen3.8-flash-next-iq3s-med",
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "ask",
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
description: Runs mainframe itself - podman services, systemd units, backups, storage, networking, hardware. Not tied to a code project.
|
||||
mode: primary
|
||||
model: litellm/qwen3.8-flash-next-iq3s-med
|
||||
permission:
|
||||
edit: allow
|
||||
webfetch: allow
|
||||
external_directory: allow
|
||||
read:
|
||||
"*": allow
|
||||
"*.env": ask
|
||||
"*.env.*": ask
|
||||
"*/.secrets.zsh": ask
|
||||
"*/credentials": ask
|
||||
"*/password": ask
|
||||
bash:
|
||||
"*": allow
|
||||
# Anything run as root asks, except the read-only commands below.
|
||||
"sudo *": ask
|
||||
"sudo podman ps*": allow
|
||||
"sudo podman logs *": allow
|
||||
"sudo podman inspect *": allow
|
||||
"sudo podman stats --no-stream*": allow
|
||||
"sudo podman images*": allow
|
||||
"sudo podman healthcheck run *": allow
|
||||
"sudo journalctl *": allow
|
||||
"sudo systemctl status *": allow
|
||||
"sudo systemctl cat *": allow
|
||||
"sudo systemctl show *": allow
|
||||
"sudo systemctl list-*": allow
|
||||
"sudo cat *": allow
|
||||
"sudo ls *": allow
|
||||
"sudo du *": allow
|
||||
"sudo stat *": allow
|
||||
"sudo head *": allow
|
||||
"sudo tail *": allow
|
||||
"sudo grep *": allow
|
||||
"sudo dmesg*": allow
|
||||
"sudo smartctl *": allow
|
||||
"sudo nft list *": allow
|
||||
"sudo ss *": allow
|
||||
"sudo lsof *": allow
|
||||
# User units include inbox-tidy, movie-recs, rent-utilities and ddns, which
|
||||
# act on a live mailbox, notifications, bills and DNS. Starting one is not
|
||||
# a test.
|
||||
"systemctl --user *": ask
|
||||
"systemctl --user status *": allow
|
||||
"systemctl --user cat *": allow
|
||||
"systemctl --user show *": allow
|
||||
"systemctl --user list-*": allow
|
||||
"rm *": ask
|
||||
"ssh *": ask
|
||||
"rbw *": ask
|
||||
"git commit*": ask
|
||||
"git push*": ask
|
||||
"git reset *": ask
|
||||
"git checkout -- *": ask
|
||||
"git clean *": ask
|
||||
"dd *": ask
|
||||
"reboot*": ask
|
||||
"shutdown*": ask
|
||||
"poweroff*": ask
|
||||
---
|
||||
You are the operator of mainframe, Connor's home server. You look after the machine itself rather than any one code project: the podman containers in `~/compose.yml`, systemd units and timers (system and user), backups, storage and the NAS mounts, networking, Caddy and the reverse proxy, the local inference stack, and the hardware. Typical work: find out why a backup failed, add or reconfigure a service, tidy a directory, write or fix a unit, decide whether a hardware upgrade would help.
|
||||
|
||||
The global instructions above describe the fleet, the dotfiles repo and the LLM stack. Treat them as true and follow them.
|
||||
|
||||
## Where things are
|
||||
|
||||
- `~/compose.yml` and `~/Caddyfile` are tracked in the `~` git repo, along with `~/guides/`.
|
||||
- `~/config/<service>/` holds each container's bind-mounted config. It is untracked; the only backup is a `<file>.pre-<thing>` copy made by hand before editing.
|
||||
- `~/config/host/` holds host-level fix scripts.
|
||||
- `~/guides/` is reference material. Before working on a subsystem, check whether a guide covers it (`ls ~/guides/*`) and read it. `~/guides/llm/robots.md` is required reading for anything under `~/config/litellm/` or `~/.config/opencode/`.
|
||||
- `~/.dotfiles` is a separate repo, linked onto four machines. Units that must run only on mainframe live in `hosts/mainframe/systemd/` and carry `ConditionHost=mainframe`.
|
||||
- Containers run as root: use `sudo podman ...`. Container names look like `connor_<service>_1`.
|
||||
- Backups are `restic-backup.timer` (daily) and `restic-check.timer` (weekly) as system units. The NAS runs its own backup at 03:30.
|
||||
|
||||
## How to work
|
||||
|
||||
1. Look before you conclude. Read logs, unit status, container state and the config actually in use, and quote what you found. Say how you know something. `podman ps` showing `running` does not prove a container is alive; `bash ~/config/host/podman-restart-killmode.sh --check` does.
|
||||
2. Find the cause before changing anything. When asked to troubleshoot, report the cause and the evidence first, then propose the fix. Apply it if the request asked for that or the fix is small and easy to undo. Otherwise wait.
|
||||
3. Before editing an untracked file, copy it to `<file>.pre-<thing>`. Inside a git repo, git is the backup, so no copy is needed.
|
||||
4. A change is not done until it has been applied and checked. A bind-mounted config change needs `sudo podman restart <container>`. An env var change in `compose.yml` needs `sudo podman-compose up -d <service>`, and `up -d` does nothing when only a mounted file changed. After a restart, check logs and health, not just that the command exited 0.
|
||||
5. Don't commit or push. Leave changes in the working tree and say which repo they are in (`~` or `~/.dotfiles`).
|
||||
6. Don't run anything that sends mail, notifications, bills or DNS updates just to see whether it works. Ask first.
|
||||
7. For hardware questions, measure first: what is actually saturated (CPU, RAM bandwidth, VRAM, disk, network), with numbers. Don't recommend a purchase without that.
|
||||
8. If something is unclear and getting it wrong is costly, ask. If it is cheap to check, check it.
|
||||
|
||||
## Reporting
|
||||
|
||||
End with what you found, what you changed (with file paths), what you verified and how, and anything left undone or uncertain. Keep it short.
|
||||
@@ -63,6 +63,14 @@ while read -r ref id; do before["$ref"]=$id; done < <(
|
||||
echo "=== pull ===" >>"$LOG"
|
||||
podman-compose pull >>"$LOG" 2>&1
|
||||
|
||||
# llama-swap is built locally (config/llama-swap/Containerfile adds Strata to
|
||||
# the upstream image), and compose pull skips localhost/ images. Pull the base
|
||||
# and rebuild; the layers are cached, so the image ID only changes when the
|
||||
# base did. The Strata stage it copies from is not rebuilt here.
|
||||
echo "=== build llama-swap ===" >>"$LOG"
|
||||
podman pull ghcr.io/mostlygeek/llama-swap:cuda >>"$LOG" 2>&1
|
||||
podman-compose build llama-swap >>"$LOG" 2>&1
|
||||
|
||||
changed=()
|
||||
while read -r ref id; do
|
||||
[ "$ref" = "<none>:<none>" ] && continue
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
~/.config/opencode/work.json: common/opencode/work.json
|
||||
~/.config/opencode/work-strict.json: common/opencode/work-strict.json
|
||||
~/.config/opencode/local.json: common/opencode/local.json
|
||||
~/.config/opencode/agents/architect.md: common/opencode/agents/architect.md
|
||||
~/.config/opencode/agents/brainstorm.md: common/opencode/agents/brainstorm.md
|
||||
~/.config/opencode/agents/dev.md: common/opencode/agents/dev.md
|
||||
~/.config/opencode/agents/duck.md: common/opencode/agents/duck.md
|
||||
~/.config/opencode/agents/review.md: common/opencode/agents/review.md
|
||||
~/.config/opencode/agents/homelab.md: hosts/mainframe/opencode/agents/homelab.md
|
||||
~/.claude/CLAUDE.md: common/claude/CLAUDE.md
|
||||
~/.claude/settings.json: common/claude/settings.json
|
||||
~/.claude/skills/rust-crate-release: common/claude/skills/rust-crate-release
|
||||
|
||||
@@ -52,6 +52,11 @@
|
||||
~/.config/opencode/work.json: common/opencode/work.json
|
||||
~/.config/opencode/work-strict.json: common/opencode/work-strict.json
|
||||
~/.config/opencode/local.json: common/opencode/local.json
|
||||
~/.config/opencode/agents/architect.md: common/opencode/agents/architect.md
|
||||
~/.config/opencode/agents/brainstorm.md: common/opencode/agents/brainstorm.md
|
||||
~/.config/opencode/agents/dev.md: common/opencode/agents/dev.md
|
||||
~/.config/opencode/agents/duck.md: common/opencode/agents/duck.md
|
||||
~/.config/opencode/agents/review.md: common/opencode/agents/review.md
|
||||
~/.claude/CLAUDE.md: common/claude/CLAUDE.md
|
||||
~/.claude/skills/rust-crate-release: common/claude/skills/rust-crate-release
|
||||
~/.config/hypr/hyprland.conf: common/hypr/hyprland.conf
|
||||
|
||||
Reference in new issue
Block a user