This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

tools.claude: use llm.claude-code, add skills and permissions

- Package from llm.claude-code (llm-agents.nix)
- Skills: websearch (kagi-search), nix-workflow, hedgedoc,
reverse-engineering
- Comprehensive permission allow-list: nix/clan, git, common
CLI tools, file operations, dev tools
- Extra packages on PATH: kagi-search, curl, jq, ripgrep, fd, tree

+239 -56
+45 -45
flake.lock
··· 92 92 "treefmt-nix": "treefmt-nix" 93 93 }, 94 94 "locked": { 95 - "lastModified": 1775143262, 96 - "narHash": "sha256-znGwc79sRyn6IwrdO6uI9SstoE4MWwEVd0Er81KEzug=", 95 + "lastModified": 1775664377, 96 + "narHash": "sha256-1srV3lK8xwguIwfdO4zNGfM76pIDDGLquot1n9v/xjo=", 97 97 "ref": "refs/heads/main", 98 - "rev": "e6d60e141ddb458e79c3c7a956ee2e10b8f7af96", 99 - "revCount": 13869, 98 + "rev": "483257b61d17a14993dbd3aab02766a7240fe82d", 99 + "revCount": 13991, 100 100 "type": "git", 101 101 "url": "https://git.clan.lol/clan/clan-core" 102 102 }, ··· 121 121 ] 122 122 }, 123 123 "locked": { 124 - "lastModified": 1774796937, 125 - "narHash": "sha256-uDcgnNHK1D2oTHOQKsqQUPdDGMuG94dp3Nv8LsnqkEM=", 126 - "rev": "04e10e10c7b4bbf2930f24d139326707a43cbb54", 124 + "lastModified": 1775649020, 125 + "narHash": "sha256-9R5lihseRUmo5tXqfk3Ql5UoNMnJAEi8hyicsDxAWNs=", 126 + "rev": "f31c4e88afe48e8e88d165bea59f775d531dbc7a", 127 127 "type": "tarball", 128 - "url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/04e10e10c7b4bbf2930f24d139326707a43cbb54.tar.gz" 128 + "url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/f31c4e88afe48e8e88d165bea59f775d531dbc7a.tar.gz" 129 129 }, 130 130 "original": { 131 131 "type": "tarball", ··· 424 424 "treefmt-nix": "treefmt-nix_3" 425 425 }, 426 426 "locked": { 427 - "lastModified": 1775141156, 428 - "narHash": "sha256-tNpLkiOtmxCxCch4zPLoEGyaZK16ryOpQuujtix0AqY=", 427 + "lastModified": 1775668779, 428 + "narHash": "sha256-N+9jpq3ZqMpqqxhrGVUNSxtRX3p2Xw+WgQSMT5Ndx5I=", 429 429 "owner": "numtide", 430 430 "repo": "llm-agents.nix", 431 - "rev": "09cd3ef62649bc47fa3eb34318bb6ef5096654dd", 431 + "rev": "302d760e9370236420768013a5a9d8e0d13c5d34", 432 432 "type": "github" 433 433 }, 434 434 "original": { ··· 511 511 ] 512 512 }, 513 513 "locked": { 514 - "lastModified": 1774762074, 515 - "narHash": "sha256-89Mh4Eb/5stVJX6kGagVMijcU2FmfeD8Qv7UXc5d92o=", 514 + "lastModified": 1775365369, 515 + "narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=", 516 516 "owner": "nix-community", 517 517 "repo": "nix-index-database", 518 - "rev": "bc13aeaed568be76eab84df88ff39261bb52ff70", 518 + "rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3", 519 519 "type": "github" 520 520 }, 521 521 "original": { ··· 596 596 }, 597 597 "nixos-hardware": { 598 598 "locked": { 599 - "lastModified": 1774933469, 600 - "narHash": "sha256-OrnCQeUO2bqaWUl0lkDWyGWjKsOhtCyd7JSfTedQNUE=", 599 + "lastModified": 1775490113, 600 + "narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=", 601 601 "owner": "nixos", 602 602 "repo": "nixos-hardware", 603 - "rev": "f4c4c2c0c923d7811ac2a63ccc154767e4195337", 603 + "rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7", 604 604 "type": "github" 605 605 }, 606 606 "original": { ··· 619 619 ] 620 620 }, 621 621 "locked": { 622 - "lastModified": 1774999302, 623 - "narHash": "sha256-KJfDmGLMVO8Hr4TrTwOAQpOykLLOSgk9dxkaf2dHzFU=", 622 + "lastModified": 1775244324, 623 + "narHash": "sha256-TSAozmLyWCRbUJu6tXQvhTjsDKNj9q1CsEqwhhh9kMU=", 624 624 "owner": "simple-nixos-mailserver", 625 625 "repo": "nixos-mailserver", 626 - "rev": "493f0ff8a7571cc4ddd190babfa447489f41c752", 626 + "rev": "c45a1e4385e81b937b353ee4ce97f5cfd60ceff2", 627 627 "type": "gitlab" 628 628 }, 629 629 "original": { ··· 635 635 }, 636 636 "nixpkgs": { 637 637 "locked": { 638 - "lastModified": 1775036866, 639 - "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", 638 + "lastModified": 1775423009, 639 + "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", 640 640 "owner": "nixos", 641 641 "repo": "nixpkgs", 642 - "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", 642 + "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", 643 643 "type": "github" 644 644 }, 645 645 "original": { ··· 658 658 "systems": "systems_4" 659 659 }, 660 660 "locked": { 661 - "lastModified": 1774802402, 662 - "narHash": "sha256-L1UJ/zxKTyyaGGmytH6OYlgQ0HGSMhvPkvU+iz4Mkb8=", 661 + "lastModified": 1775307257, 662 + "narHash": "sha256-y9hEecHH4ennFwIcw1n480YCGh73DkEmizmQnyXuvgg=", 663 663 "owner": "nix-community", 664 664 "repo": "nixvim", 665 - "rev": "cbd8536a05d1aae2593cb5c9ace1010c8c5845cb", 665 + "rev": "2e008bb941f72379d5b935d5bfe70ed8b7c793ff", 666 666 "type": "github" 667 667 }, 668 668 "original": { ··· 745 745 ] 746 746 }, 747 747 "locked": { 748 - "lastModified": 1774910634, 749 - "narHash": "sha256-B+rZDPyktGEjOMt8PcHKYmgmKoF+GaNAFJhguktXAo0=", 748 + "lastModified": 1775619836, 749 + "narHash": "sha256-VcC/+MMMldwQKcST2y/QTndGLusSxjeUvYwFwzZKKko=", 750 750 "owner": "Mic92", 751 751 "repo": "sops-nix", 752 - "rev": "19bf3d8678fbbfbc173beaa0b5b37d37938db301", 752 + "rev": "de5f2d596eb896a5728afcd15f823f59cb9ecfdb", 753 753 "type": "github" 754 754 }, 755 755 "original": { ··· 787 787 ] 788 788 }, 789 789 "locked": { 790 - "lastModified": 1771846963, 791 - "narHash": "sha256-s7xYP8TrSn3TKdGo+DB72SDUx4zGSvft18iggv/ggnM=", 790 + "lastModified": 1775247935, 791 + "narHash": "sha256-tv9UdbreLJpIPXw50w3x/CAFSdJ3gKNCIFA8mdT4lV8=", 792 792 "ref": "refs/heads/master", 793 - "rev": "bab362d0f6fcde28ac41716ca15cc552d4659ec5", 794 - "revCount": 12186, 793 + "rev": "7ab1e601a6d06e52ea82a35f6d5c5679988803ad", 794 + "revCount": 12188, 795 795 "submodules": true, 796 796 "type": "git", 797 797 "url": "https://github.com/krebs/stockholm" ··· 870 870 ] 871 871 }, 872 872 "locked": { 873 - "lastModified": 1775125835, 874 - "narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", 873 + "lastModified": 1775636079, 874 + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", 875 875 "owner": "numtide", 876 876 "repo": "treefmt-nix", 877 - "rev": "75925962939880974e3ab417879daffcba36c4a3", 877 + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", 878 878 "type": "github" 879 879 }, 880 880 "original": { ··· 912 912 ] 913 913 }, 914 914 "locked": { 915 - "lastModified": 1775125835, 916 - "narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", 915 + "lastModified": 1775636079, 916 + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", 917 917 "owner": "numtide", 918 918 "repo": "treefmt-nix", 919 - "rev": "75925962939880974e3ab417879daffcba36c4a3", 919 + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", 920 920 "type": "github" 921 921 }, 922 922 "original": { ··· 995 995 ] 996 996 }, 997 997 "locked": { 998 - "lastModified": 1775125835, 999 - "narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", 998 + "lastModified": 1775636079, 999 + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", 1000 1000 "owner": "numtide", 1001 1001 "repo": "treefmt-nix", 1002 - "rev": "75925962939880974e3ab417879daffcba36c4a3", 1002 + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", 1003 1003 "type": "github" 1004 1004 }, 1005 1005 "original": { ··· 1015 1015 ] 1016 1016 }, 1017 1017 "locked": { 1018 - "lastModified": 1774293387, 1019 - "narHash": "sha256-yVekLWxKTUfUyuvo9HVihtOK8llIP3IZCrJmftxT+Nc=", 1018 + "lastModified": 1775600302, 1019 + "narHash": "sha256-2fgKImv78CXIcfo1RsY7EI4uMZ84x/MggA5rrusYc7c=", 1020 1020 "owner": "lassulus", 1021 1021 "repo": "wrappers", 1022 - "rev": "3cf1e8371129e8746d37c863c5d56a81fb16caa0", 1022 + "rev": "9d8397d8ef1ac35763085f3338589f558128f7db", 1023 1023 "type": "github" 1024 1024 }, 1025 1025 "original": {
+46
skills/websearch/SKILL.md
··· 1 + --- 2 + name: websearch 3 + description: Search the web using Kagi and fetch page contents. Use when you need current information, documentation, or to look up APIs/libraries. 4 + --- 5 + 6 + # Web Search Skill 7 + 8 + Search the web using Kagi and fetch/extract page contents. 9 + 10 + ## Search 11 + 12 + ```bash 13 + kagi-search "your query" 14 + ``` 15 + 16 + Returns search results with titles, URLs, and snippets. 17 + 18 + ### JSON output with quick answer 19 + 20 + ```bash 21 + kagi-search --json "your query" 22 + ``` 23 + 24 + Returns JSON with: 25 + - `quick_answer.markdown` — AI-generated summary 26 + - `results[].title`, `results[].url`, `results[].snippet` 27 + 28 + ### Get more results 29 + 30 + ```bash 31 + kagi-search --json --links 10 "your query" 32 + ``` 33 + 34 + ## Fetch a page 35 + 36 + ```bash 37 + curl -sL "https://example.com" | head -500 38 + ``` 39 + 40 + For cleaner extraction from HTML, pipe through a text extractor or use `curl` with appropriate flags. 41 + 42 + ## Typical workflow 43 + 44 + 1. Search: `kagi-search --json "nix flake lock update single input"` — get overview + links 45 + 2. Fetch: `curl -sL "<url>"` — get full page content from a promising result 46 + 3. Use the information to answer the question or solve the task
+16
skills/websearch/default.nix
··· 1 + { stdenv, ... }: 2 + 3 + stdenv.mkDerivation { 4 + pname = "websearch-skill"; 5 + version = "0.1.0"; 6 + src = ./.; 7 + 8 + installPhase = '' 9 + mkdir -p $out/share/websearch 10 + cp SKILL.md $out/share/websearch/SKILL.md 11 + ''; 12 + 13 + meta = { 14 + description = "Search the web via Kagi and fetch page contents"; 15 + }; 16 + }
+15 -9
tools/claude/CLAUDE.md
··· 1 1 # CLAUDE.md 2 2 3 - This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. 3 + Global guidance for Claude Code across all projects. 4 4 5 5 ## Instructions 6 6 7 - - Use `--log-format bar-with-logs` with Nix for improved build log output. 8 - - Add new untracked files in Nix flakes with `git add`. 9 - - Format code with `nix fmt` if available. 7 + - Format code with the project's formatter before committing (e.g. `nix fmt`, `ruff format`, `prettier`). 10 8 - Write shell scripts that pass ShellCheck. 11 9 - Write Python code for 3.12 that conforms to `ruff format` and passes `ruff check`. 12 10 - Always test/lint/format your code before committing. 13 11 - Add debug output or unit tests when troubleshooting. 14 12 - Avoid mocking in tests. 15 13 - Use the `gh` tool to interact with GitHub. 16 - - Use `nix-locate` to find packages by file path. 17 - - Use `nix run` to execute applications that are not installed. 18 14 - Do not include "claude" in commit messages. 15 + - Take extra care not to commit lines with trailing whitespace. 16 + - Use tmux-mcp for long-running tasks. Use a session with a `claude-` prefix — create one if no idle session exists. 17 + - Use git-mcp for advanced git operations (interactive staging, stash management, bisecting). 18 + 19 + ## Nix 20 + 21 + When working in a Nix flake: 22 + 23 + - Use `--log-format bar-with-logs` with `nix build` for improved build log output. 24 + - Add new untracked files with `git add` — flake eval only sees tracked files. 25 + - Use `nix-locate` to find packages by file path. 26 + - Use `nix run nixpkgs#foo` to execute tools that aren't installed. 19 27 - Use `nix eval` instead of `nix flake show` to look up attributes in a flake. 20 - - Use tmux-mcp for long running tasks, use a session with a claude- prefix, create a session if you can't find any one that is idle 21 - - Use git-mcp for advanced git operations like interactive staging, stash management, and bisecting 22 - - Take extra care that we don't commit lines with trailing whitespaces 28 + For listing: `nix eval .#packages.<system> --apply builtins.attrNames --json | jq`.
+116 -1
tools/claude/flake-module.nix
··· 7 7 imports = [ self.wrapperModules.claude-code ]; 8 8 inherit pkgs; 9 9 10 + package = self.lib.halalify self.legacyPackages.${system}.llm.claude-code; 11 + 10 12 claudeMd = ./CLAUDE.md; 11 13 12 14 mcpServers = { ··· 18 20 }; 19 21 }; 20 22 21 - # Seed permission rules from the same set we trust in pi. 23 + skills = { 24 + hedgedoc = "${self.legacyPackages.${system}.skills.hedgedoc}/share/hedgedoc"; 25 + reverse-engineering = "${ 26 + self.legacyPackages.${system}.skills.reverse-engineering 27 + }/share/reverse-engineering"; 28 + websearch = "${self.legacyPackages.${system}.skills.websearch}/share/websearch"; 29 + }; 30 + 22 31 permissions = { 23 32 allow = [ 33 + # nix operations 24 34 "Bash(nix build:*)" 25 35 "Bash(nix eval:*)" 26 36 "Bash(nix fmt:*)" 37 + "Bash(nix flake:*)" 38 + "Bash(nix develop:*)" 39 + "Bash(nix run:*)" 40 + "Bash(nix search:*)" 41 + "Bash(nix log:*)" 42 + "Bash(nix path-info:*)" 43 + "Bash(nix store:*)" 44 + "Bash(nix derivation:*)" 45 + "Bash(nix hash:*)" 46 + "Bash(nix-build:*)" 47 + "Bash(nix-instantiate:*)" 48 + "Bash(nix-locate:*)" 49 + "Bash(nix-prefetch-url:*)" 50 + "Bash(nixos-rebuild:*)" 51 + "Bash(darwin-rebuild:*)" 52 + # clan 53 + "Bash(clan:*)" 54 + # git read operations 55 + "Bash(git status:*)" 56 + "Bash(git diff:*)" 57 + "Bash(git log:*)" 58 + "Bash(git show:*)" 59 + "Bash(git branch:*)" 60 + "Bash(git remote:*)" 61 + "Bash(git stash list:*)" 62 + "Bash(git rev-parse:*)" 63 + "Bash(git describe:*)" 64 + "Bash(git tag:*)" 65 + "Bash(git ls-files:*)" 66 + "Bash(git ls-remote:*)" 67 + # git write operations 68 + "Bash(git add:*)" 69 + "Bash(git commit:*)" 70 + "Bash(git checkout:*)" 71 + "Bash(git switch:*)" 72 + "Bash(git merge:*)" 73 + "Bash(git rebase:*)" 74 + "Bash(git stash:*)" 75 + "Bash(git cherry-pick:*)" 76 + "Bash(git fetch:*)" 77 + "Bash(git pull:*)" 78 + # common read-only tools 79 + "Bash(cat:*)" 80 + "Bash(ls:*)" 81 + "Bash(find:*)" 82 + "Bash(grep:*)" 83 + "Bash(rg:*)" 84 + "Bash(fd:*)" 85 + "Bash(head:*)" 86 + "Bash(tail:*)" 87 + "Bash(wc:*)" 88 + "Bash(sort:*)" 89 + "Bash(uniq:*)" 90 + "Bash(jq:*)" 91 + "Bash(tree:*)" 92 + "Bash(file:*)" 93 + "Bash(which:*)" 94 + "Bash(realpath:*)" 95 + "Bash(readlink:*)" 96 + "Bash(dirname:*)" 97 + "Bash(basename:*)" 98 + "Bash(stat:*)" 99 + "Bash(du:*)" 100 + "Bash(df:*)" 101 + "Bash(env:*)" 102 + "Bash(echo:*)" 103 + "Bash(printf:*)" 104 + "Bash(test:*)" 105 + "Bash(tr:*)" 106 + "Bash(sed:*)" 107 + "Bash(awk:*)" 108 + "Bash(cut:*)" 109 + "Bash(diff:*)" 110 + "Bash(tee:*)" 111 + "Bash(xargs:*)" 112 + "Bash(mkdir:*)" 113 + "Bash(cp:*)" 114 + "Bash(mv:*)" 115 + "Bash(touch:*)" 116 + "Bash(chmod:*)" 117 + "Bash(ln:*)" 118 + # dev tools 119 + "Bash(gh:*)" 120 + "Bash(shellcheck:*)" 121 + "Bash(ruff:*)" 122 + "Bash(kagi-search:*)" 123 + "Bash(curl:*)" 124 + # file edits 125 + "Edit" 126 + "Write" 127 + "Read" 27 128 ]; 129 + }; 130 + 131 + extraPackages = [ 132 + self.packages.${system}.kagi-search 133 + pkgs.curl 134 + pkgs.jq 135 + pkgs.ripgrep 136 + pkgs.fd 137 + pkgs.tree 138 + ]; 139 + 140 + settings = { 141 + # Prefer compact output for better context usage 142 + verbose = true; 28 143 }; 29 144 }; 30 145 in
+1 -1
2configs/services/flix/ipfs.nix
··· 134 134 ]; 135 135 }; 136 136 Datastore.StorageMax = "100GB"; 137 + # limit bandwidth: 5MB/s out, 5MB/s in 137 138 Swarm.ConnMgr = { 138 139 LowWater = 20; 139 140 HighWater = 50; 140 141 GracePeriod = "10s"; 141 142 }; 142 - # limit bandwidth: 5MB/s out, 5MB/s in 143 143 Swarm.Transports.Network.TCP = true; 144 144 Swarm.Transports.Network.QUIC = false; 145 145 Swarm.ResourceMgr = {