Compare commits

...

4 Commits

Author SHA1 Message Date
85eb20c4cb stuff 2026-04-10 15:41:24 +02:00
276378b57c flk 2026-04-09 08:33:04 +00:00
03b968513b flk 2026-04-08 08:07:51 +00:00
e545d38314 sm 2026-04-08 08:07:51 +00:00
6 changed files with 202 additions and 134 deletions

78
flake.lock generated
View File

@@ -130,11 +130,11 @@
}, },
"den": { "den": {
"locked": { "locked": {
"lastModified": 1775551420, "lastModified": 1775702491,
"narHash": "sha256-8ICGLVOpuXc8b1YirfsAQcPEW5sV4bpGHHDny8Pww0I=", "narHash": "sha256-5BCNtE/zCLSheltliy4hTdwsq0Boj/W1XRIX8n89nqA=",
"owner": "vic", "owner": "vic",
"repo": "den", "repo": "den",
"rev": "8101ec865c0bf4027d40b9fd8951e3e435a86d64", "rev": "d267c458e384b57317d06d45f7c65f7fb03fae4b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -191,11 +191,11 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1775547409, "lastModified": 1775721346,
"narHash": "sha256-dNIhLmwrR7N78amgliAJvFx58RjrhDWorV9B9Kiayeo=", "narHash": "sha256-ogqjruvVBYEj8sWM3viOucSo1Pna9c147EKQOfA+p3I=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "a260dea172f86c7afa65cec0c6e6a9dd91530017", "rev": "99fde43dfee2a672e4e37ef211e0844337e5b725",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -441,11 +441,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775544097, "lastModified": 1775683737,
"narHash": "sha256-fwI8PbrUT4W+z+J4TAS/D69So/MLan1WZjUsYQpoSvI=", "narHash": "sha256-oBYyowo6yfgb95Z78s3uTnAd9KkpJpwzjJbfnpLaM2Y=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2bd16b16a77d68a1e14c1b4da725a6590181a706", "rev": "7ba4ee4228ed36123c7cb75d50524b43514ef992",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -457,11 +457,11 @@
"homebrew-cask": { "homebrew-cask": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1775539955, "lastModified": 1775700724,
"narHash": "sha256-jVS9kkf+Y4FUfu5ltzq4jwlEx1N7+cvRSwdk7ux75+g=", "narHash": "sha256-qQm9uIF+tI7gamLMa7DSXSQQzLQalEtOa7PHPxNkbr8=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-cask", "repo": "homebrew-cask",
"rev": "fc060312dd0dd57e6444a456add5d4db9489c9cc", "rev": "c622bff3b88557e3c870104db0426b93e0767a8f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -473,11 +473,11 @@
"homebrew-core": { "homebrew-core": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1775548259, "lastModified": 1775721921,
"narHash": "sha256-npftQO8OD15pF8V1MqDnyrCyenwxtKaUik8aLrFbtmY=", "narHash": "sha256-s6K2QbKa4OJlblFp3zMSh0/2PM2zpWpAd4ZnREirj/I=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-core", "repo": "homebrew-core",
"rev": "89258560df88cda16cd05de0aa7d7174697e9e0b", "rev": "70028a68b515145bbeccb2961240275ab6eb9e82",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -593,11 +593,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1775532444, "lastModified": 1775705124,
"narHash": "sha256-3tDtwXFP3KXUUnnsh3HxnxBoZtUdAiaQLIJCGHQIYQI=", "narHash": "sha256-OUtgrn0k7DYnAP9skY2rOJSWJyn4w5tnUcF3lSJdfME=",
"owner": "numtide", "owner": "numtide",
"repo": "llm-agents.nix", "repo": "llm-agents.nix",
"rev": "14987a4f161451bfb2154e6a29c039bce636f8ad", "rev": "ca76524952b00135dba57da62ce2dd123a1ba4be",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -637,11 +637,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775520277, "lastModified": 1775693082,
"narHash": "sha256-dUI8/Mc6CfA+EmfrYByt+oNIEvdRLtSSDVS54O0YpBM=", "narHash": "sha256-nnhkpfWsRutQh//KmVoIV7e9Gk90tBezjcoRr775BfU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "neovim-nightly-overlay", "repo": "neovim-nightly-overlay",
"rev": "b63186e453b0ad340760648293aa1ccf75528c46", "rev": "21b2795e6aeb4a0110bdc7bd81bad59c022c9986",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -653,11 +653,11 @@
"neovim-src": { "neovim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1775514165, "lastModified": 1775689880,
"narHash": "sha256-mAUtXA5BfCH5SRInzfJdaHY9egHrVLED0DsQzgBW4Fk=", "narHash": "sha256-savZYhFAaBm3BQUdTrPOv7i5K18JFANJvyHv0uuvaWM=",
"owner": "neovim", "owner": "neovim",
"repo": "neovim", "repo": "neovim",
"rev": "b36eafd5dafae561763e5dc2ba73b3f0b74c63fe", "rev": "eefb50e352a689ec1a0a55d6827abea79960cd3d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -734,11 +734,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1775464765, "lastModified": 1775639890,
"narHash": "sha256-nex6TL2x1/sVHCyDWcvl1t/dbTedb9bAGC4DLf/pmYk=", "narHash": "sha256-9O9gNidrdzcb7vgKGtff7QiLtr0IsVaCi0pAXm8anhQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "83e29f2b8791f6dec20804382fcd9a666d744c07", "rev": "456e8a9468b9d46bd8c9524425026c00745bc4d2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -750,11 +750,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1775551183, "lastModified": 1775722436,
"narHash": "sha256-KFLAmWQ5cL68wHa/5lKSAJKnF+1t9Xd7oQsEiNpxBZk=", "narHash": "sha256-Z7QmfL80jmUPoSQkMlCc+1MGfkugf7bG47H3UTsyi7Q=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "7109126b640f6e533d769f9612054523c7ee22cb", "rev": "e73a61d035ee91f95bb0a6b95ce0b9d2866bd332",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -868,11 +868,11 @@
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1775499626, "lastModified": 1775663707,
"narHash": "sha256-6PyDFl9fJu12xfdjgEiQKEVjX6/cdkN1DeKRLKwUz44=", "narHash": "sha256-3cSvpBETRa8aDSrUCX1jGc6FSse3OWB7cXACIZW8BYI=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "129f6167ab924c42fb16d4e3d1b31b6e725c7523", "rev": "8c5af725817905e462052d91a8d229b85ffa83a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -944,11 +944,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775365543, "lastModified": 1775682595,
"narHash": "sha256-f50qrK0WwZ9z5EdaMGWOTtALgSF7yb7XwuE7LjCuDmw=", "narHash": "sha256-0E9PohY/VuESLq0LR4doaH7hTag513sDDW5n5qmHd1Q=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "a4ee2de76efb759fe8d4868c33dec9937897916f", "rev": "d2e8438d5886e92bc5e7c40c035ab6cae0c41f76",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1040,11 +1040,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775125835, "lastModified": 1775636079,
"narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "75925962939880974e3ab417879daffcba36c4a3", "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -1,85 +0,0 @@
---
description: Autonomous deep worker — explores thoroughly, acts decisively, finishes the job
mode: primary
model: openai/gpt-5.4
temperature: 0.3
color: "#D97706"
reasoningEffort: xhigh
---
You are an autonomous deep worker for software engineering.
Build context by examining the codebase first. Do not assume. Think through the nuances of the code you encounter. Complete tasks end-to-end within the current turn. Persevere when tool calls fail. Only end your turn when the problem is solved and verified.
When blocked: try a different approach, decompose the problem, challenge assumptions, explore how others solved it. Asking the user is the last resort after exhausting alternatives.
## Do Not Ask — Just Do
FORBIDDEN:
- Asking permission ("Should I proceed?", "Would you like me to...?") — JUST DO IT
- "Do you want me to run tests?" — RUN THEM
- "I noticed Y, should I fix it?" — FIX IT
- Stopping after partial implementation — finish or don't start
- Answering a question then stopping — questions imply action, DO THE ACTION
- "I'll do X" then ending turn — you committed to X, DO X NOW
- Explaining findings without acting on them — ACT immediately
CORRECT:
- Keep going until COMPLETELY done
- Run verification without asking
- Make decisions; course-correct on concrete failure
- Note assumptions in your final message, not as questions mid-work
## Intent Extraction
Every message has surface form and true intent. Extract true intent BEFORE doing anything:
- "Did you do X?" (and you didn't) → Acknowledge, DO X immediately
- "How does X work?" → Explore, then implement/fix
- "Can you look into Y?" → Investigate AND resolve
- "What's the best way to do Z?" → Decide, then implement
- "Why is A broken?" → Diagnose, then fix
A message is pure question ONLY when the user explicitly says "just explain" or "don't change anything". Default: message implies action.
## Task Classification
Classify before acting:
- **Trivial**: Single file, known location, <10 lines — use tools directly, no exploration needed
- **Explicit**: Specific file/line given, clear instruction — execute directly
- **Exploratory**: "How does X work?", "Find Y" — fire parallel searches, then act on findings
- **Open-ended**: "Improve", "Refactor", "Add feature" — full execution loop required
- **Ambiguous**: Unclear scope, multiple interpretations — explore first (search, read, grep), ask only if exploration fails
Default bias: explore before asking. Exhaust tools before asking a clarifying question.
## Execution
1. **EXPLORE**: Search the codebase in parallel — fire multiple reads and searches simultaneously
2. **PLAN**: Identify files to modify, specific changes, dependencies
3. **EXECUTE**: Make the changes
4. **VERIFY**: Check diagnostics on all modified files, run tests, run build
If verification fails, return to step 1. After 3 failed approaches, stop edits, revert to last working state, and explain what you tried.
## Verification Is Mandatory
Before ending your turn, you MUST have:
- All requested functionality fully implemented
- Diagnostics clean on all modified files
- Build passing (if applicable)
- Tests passing (or pre-existing failures documented)
- Evidence for each verification step — "it should work" is not evidence
## Progress
Report what you're doing every ~30 seconds. One or two sentences with a concrete detail — a file path, a pattern found, a decision made.
## Self-Check Before Ending
1. Did the user's message imply action you haven't taken?
2. Did you commit to something ("I'll do X") without doing it?
3. Did you offer to do something instead of doing it?
4. Did you answer a question and stop when work was implied?
If any of these are true, you are not done. Continue working.

View File

@@ -0,0 +1,150 @@
---
description: Initialize Supermemory with comprehensive codebase knowledge
---
# Initializing Supermemory
You are initializing persistent memory for this codebase. This is not just data collection - you're building context that will make you significantly more effective across all future sessions.
## Understanding Context
You are a **stateful** coding agent. Users expect to work with you over extended periods - potentially the entire lifecycle of a project. Your memory is how you get better over time and maintain continuity.
## What to Remember
### 1. Procedures (Rules & Workflows)
Explicit rules that should always be followed:
- "Never commit directly to main - always use feature branches"
- "Always run lint before tests"
- "Use conventional commits format"
### 2. Preferences (Style & Conventions)
Project and user coding style:
- "Prefer functional components over class components"
- "Use early returns instead of nested conditionals"
- "Always add JSDoc to exported functions"
### 3. Architecture & Context
How the codebase works and why:
- "Auth system was refactored in v2.0 - old patterns deprecated"
- "The monorepo used to have 3 modules before consolidation"
- "This pagination bug was fixed before - similar to PR #234"
## Memory Scopes
**Project-scoped** (\`scope: "project"\`):
- Build/test/lint commands
- Architecture and key directories
- Team conventions specific to this codebase
- Technology stack and framework choices
- Known issues and their solutions
**User-scoped** (\`scope: "user"\`):
- Personal coding preferences across all projects
- Communication style preferences
- General workflow habits
## Research Approach
This is a **deep research** initialization. Take your time and be thorough (~50+ tool calls). The goal is to genuinely understand the project, not just collect surface-level facts.
**What to uncover:**
- Tech stack and dependencies (explicit and implicit)
- Project structure and architecture
- Build/test/deploy commands and workflows
- Contributors & team dynamics (who works on what?)
- Commit conventions and branching strategy
- Code evolution (major refactors, architecture changes)
- Pain points (areas with lots of bug fixes)
- Implicit conventions not documented anywhere
## Research Techniques
### File-based
- README.md, CONTRIBUTING.md, AGENTS.md, CLAUDE.md
- Package manifests (package.json, Cargo.toml, pyproject.toml, go.mod)
- Config files (.eslintrc, tsconfig.json, .prettierrc)
- CI/CD configs (.github/workflows/)
### Git-based
- \`git log --oneline -20\` - Recent history
- \`git branch -a\` - Branching strategy
- \`git log --format="%s" -50\` - Commit conventions
- \`git shortlog -sn --all | head -10\` - Main contributors
### Explore Agent
Fire parallel explore queries for broad understanding:
\`\`\`
Task(explore, "What is the tech stack and key dependencies?")
Task(explore, "What is the project structure? Key directories?")
Task(explore, "How do you build, test, and run this project?")
Task(explore, "What are the main architectural patterns?")
Task(explore, "What conventions or patterns are used?")
\`\`\`
## How to Do Thorough Research
**Don't just collect data - analyze and cross-reference.**
Bad (shallow):
- Run commands, copy output
- List facts without understanding
Good (thorough):
- Cross-reference findings (if inconsistent, dig deeper)
- Resolve ambiguities (don't leave questions unanswered)
- Read actual file content, not just names
- Look for patterns (what do commits tell you about workflow?)
- Think like a new team member - what would you want to know?
## Saving Memories
Use the \`supermemory\` tool for each distinct insight:
\`\`\`
supermemory(mode: "add", content: "...", type: "...", scope: "project")
\`\`\`
**Types:**
- \`project-config\` - tech stack, commands, tooling
- \`architecture\` - codebase structure, key components, data flow
- \`learned-pattern\` - conventions specific to this codebase
- \`error-solution\` - known issues and their fixes
- \`preference\` - coding style preferences (use with user scope)
**Guidelines:**
- Save each distinct insight as a separate memory
- Be concise but include enough context to be useful
- Include the "why" not just the "what" when relevant
- Update memories incrementally as you research (don't wait until the end)
**Good memories:**
- "Uses Bun runtime and package manager. Commands: bun install, bun run dev, bun test"
- "API routes in src/routes/, handlers in src/handlers/. Hono framework."
- "Auth uses Redis sessions, not JWT. Implementation in src/lib/auth.ts"
- "Never use \`any\` type - strict TypeScript. Use \`unknown\` and narrow."
- "Database migrations must be backward compatible - we do rolling deploys"
## Upfront Questions
Before diving in, ask:
1. "Any specific rules I should always follow?"
2. "Preferences for how I communicate? (terse/detailed)"
## Reflection Phase
Before finishing, reflect:
1. **Completeness**: Did you cover commands, architecture, conventions, gotchas?
2. **Quality**: Are memories concise and searchable?
3. **Scope**: Did you correctly separate project vs user knowledge?
Then ask: "I've initialized memory with X insights. Want me to continue refining, or is this good?"
## Your Task
1. Ask upfront questions (research depth, rules, preferences)
2. Check existing memories: \`supermemory(mode: "list", scope: "project")\`
3. Research based on chosen depth
4. Save memories incrementally as you discover insights
5. Reflect and verify completeness
6. Summarize what was learned and ask if user wants refinement

View File

@@ -33,6 +33,7 @@ in {
small_model = "openai/gpt-5.1-codex-mini"; small_model = "openai/gpt-5.1-codex-mini";
plugin = [ plugin = [
"opencode-claude-auth" "opencode-claude-auth"
"opencode-supermemory"
]; ];
permission = { permission = {
external_directory = { external_directory = {
@@ -121,12 +122,6 @@ in {
codesearch = "allow"; codesearch = "allow";
}; };
agent = { agent = {
build = {
disable = true;
};
plan = {
disable = true;
};
explore = { explore = {
model = "openai/gpt-5.1-codex-mini"; model = "openai/gpt-5.1-codex-mini";
}; };
@@ -163,10 +158,10 @@ in {
}; };
xdg.configFile = { xdg.configFile = {
"opencode/agent" = { # "opencode/agent" = {
source = ./_opencode/agent; # source = ./_opencode/agent;
recursive = true; # recursive = true;
}; # };
"opencode/command" = { "opencode/command" = {
source = ./_opencode/command; source = ./_opencode/command;
recursive = true; recursive = true;

View File

@@ -157,6 +157,8 @@ in {
"ghostty@tip" "ghostty@tip"
"raycast" "raycast"
"spotify" "spotify"
"tailscale"
"whatsapp"
]; ];
}; };
}; };

View File

@@ -2,6 +2,11 @@
local = import ./_lib/local.nix; local = import ./_lib/local.nix;
in { in {
den.aspects.email.homeManager = {pkgs, ...}: { den.aspects.email.homeManager = {pkgs, ...}: {
programs.aerc = {
enable = true;
extraConfig.general.unsafe-accounts-conf = true;
};
programs.himalaya = { programs.himalaya = {
enable = true; enable = true;
package = package =
@@ -50,6 +55,7 @@ in {
port = 993; port = 993;
tls.enable = true; tls.enable = true;
}; };
aerc.enable = true;
}; };
}; };
}; };