diff --git a/.pi/skills/grill b/.pi/skills/grill new file mode 120000 index 0000000..2806aae --- /dev/null +++ b/.pi/skills/grill @@ -0,0 +1 @@ +../../src/skills/grill \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 169ea08..bb3f712 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,6 +19,8 @@ ## Pull requests +- Always create a new branch before opening a pull request. + Never open a pull request directly from a shared or existing work branch. - During pull-request development, add follow-up commits instead of amending existing commits. Preserve review history until the pull request is ready to merge. - When the user says a pull request is merged, clean up the local branch without waiting for an explicit request. diff --git a/configs/nixos/modules/shell/pi/default.nix b/configs/nixos/modules/shell/pi/default.nix index 17921b9..fcc514d 100644 --- a/configs/nixos/modules/shell/pi/default.nix +++ b/configs/nixos/modules/shell/pi/default.nix @@ -13,7 +13,6 @@ let piDir = "${config.users.users.${user}.home}/.pi/agent"; patchedPi = pkgs.pi-coding-agent.overrideAttrs (old: { patches = (old.patches or [ ]) ++ [ - ./patches/pi-flex-spacer.patch ./patches/pi-tool-lookup-validation.patch ]; }); @@ -37,6 +36,7 @@ in theme = "dark"; enableInstallTelemetry = false; enableAnalytics = false; + terminal.clearOnShrink = true; }; }; diff --git a/flake.lock b/flake.lock index f4a9da7..9f2cb26 100644 --- a/flake.lock +++ b/flake.lock @@ -75,11 +75,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1788557821, - "narHash": "sha256-ieUlwx/W3ZI3/Bwf+nysU5K7Z/f83aiVTo3nLa5130g=", + "lastModified": 1788822539, + "narHash": "sha256-4uHv/J9uCV2+K1L26suAEL0zSWIcQW41MTginPJdXP0=", "owner": "chaotic-cx", "repo": "nyx", - "rev": "50086a7f3d00e4125c446a41713c56247e837a5b", + "rev": "2e71ba63d8222bb3c4da2d8fac2b05844924fa02", "type": "github" }, "original": { @@ -117,11 +117,11 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1785384175, - "narHash": "sha256-sWSJPXpQwKJstL4rdhpAQYCYlHK5wOkEHR8/lNHBVb4=", + "lastModified": 1788753789, + "narHash": "sha256-fF3kADy1rDKsDUB393y7z4ft9wu4Hw5vAOYk1VYH/ak=", "owner": "rycee", "repo": "nur-expressions", - "rev": "db607f3d0afe811bcb3b16266f28b2fc5af4e74f", + "rev": "3edc116eae1af5c2cc785691f5fdc129073bef1a", "type": "gitlab" }, "original": { @@ -134,11 +134,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1782007937, - "narHash": "sha256-PbnJr+eB+9Czol3ReI83dUgEhcn0sDK6TSy6ODTQm88=", + "lastModified": 1783570805, + "narHash": "sha256-ptl5aRlCv9/uRSv2u8Hq8UFVFeZ6Q/bT049bpqNgc3w=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "981bd332015397fb1ca033fa982bd61635160c78", + "rev": "5602ed62d638142c1ab31dccd01dfbfb28841225", "type": "github" }, "original": { @@ -155,11 +155,11 @@ ] }, "locked": { - "lastModified": 1782949081, - "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", + "lastModified": 1787559586, + "narHash": "sha256-onL0VLf9vPllmT0H/OlURIU5r5t5WIEl7t4tVNKT0Nw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", + "rev": "9d0d87172c374f89da73c1cfe6d81ae62feac1f1", "type": "github" }, "original": { @@ -227,11 +227,11 @@ ] }, "locked": { - "lastModified": 1785340481, - "narHash": "sha256-GSxdQ7w8yYfZnfkXUuZ2fYIKibe9ZU8xDGyqpeTb2tE=", + "lastModified": 1788831961, + "narHash": "sha256-7Cyv2aEX65TTn671JRdetD+v64EwgchOD1+Mp2tRdiY=", "ref": "refs/heads/main", - "rev": "627fc9a32bb80d97923540fc0d3e9661961462ba", - "revCount": 83, + "rev": "8415d446e3e8d07df006da9fc7fe35b203b88cb6", + "revCount": 84, "type": "git", "url": "https://git.alexion.dev/alexion/gitea-axi" }, @@ -267,11 +267,11 @@ ] }, "locked": { - "lastModified": 1788487777, - "narHash": "sha256-Ro/e1N4ZR8/XaFF+sF9SgfPK79HM5YNEppzFj8p+0Ak=", + "lastModified": 1788651960, + "narHash": "sha256-v9wJd32eZ2bvhBzVOd7TIjLQd011P7nwOhjKtWlci5I=", "owner": "nix-community", "repo": "home-manager", - "rev": "693e8ce0fb240a73c116a03cfd7b19269c87af88", + "rev": "2c0350c759688177331b8f5242311fae8877bdb3", "type": "github" }, "original": { @@ -288,11 +288,11 @@ ] }, "locked": { - "lastModified": 1784588016, - "narHash": "sha256-ouZe80aWEhMLVMkqICFDN+JUw+0FJtCr/bh+hHtRtMg=", + "lastModified": 1788651960, + "narHash": "sha256-v9wJd32eZ2bvhBzVOd7TIjLQd011P7nwOhjKtWlci5I=", "owner": "nix-community", "repo": "home-manager", - "rev": "deeb6b7eb7e0c44ae1819c051ce175bd92a85100", + "rev": "2c0350c759688177331b8f5242311fae8877bdb3", "type": "github" }, "original": { @@ -308,11 +308,11 @@ ] }, "locked": { - "lastModified": 1785306346, - "narHash": "sha256-DScBkW0fOgpGPK2trNoX3ryLTlaC14+gglFo/BhGJ4g=", + "lastModified": 1788651960, + "narHash": "sha256-v9wJd32eZ2bvhBzVOd7TIjLQd011P7nwOhjKtWlci5I=", "owner": "nix-community", "repo": "home-manager", - "rev": "e705714e918c3b11affcdd15db2cbe3a070420a0", + "rev": "2c0350c759688177331b8f5242311fae8877bdb3", "type": "github" }, "original": { @@ -328,11 +328,11 @@ ] }, "locked": { - "lastModified": 1785232496, - "narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=", + "lastModified": 1788335262, + "narHash": "sha256-3jBEq8avfzlrsY4UpW4d5TOmm7ocseZfnitEJhqauyc=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98", + "rev": "44d95795ee2d475b3d687325e26dcf4ca9104557", "type": "github" }, "original": { @@ -343,11 +343,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1788316716, - "narHash": "sha256-bc7rSpXIdn9QWGNqfWcPZWOhEVF8NoeAZkWq0XWnf/k=", + "lastModified": 1788752844, + "narHash": "sha256-VaWGJ6+cIYN2erfSecbRV+4ljI185Ty2wUrXyvQbgOw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3ed67ec0a4d3c7ab4ae1f04f8ee8df07bfa506a2", + "rev": "dc5d91f840324650bac8c379428c7037a416959a", "type": "github" }, "original": { @@ -359,11 +359,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1785133411, - "narHash": "sha256-Yjv0WEg39KRYS0rBdTbu6Fc/or/ihAKk13W9sQ6VWd0=", + "lastModified": 1788690626, + "narHash": "sha256-+v4I4LawmRD/mVxO7QIAerRrCkElp3YImzWkkUnvOTg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2f5a153c270b70cb0f8c11f46d96d6d3bc39f4e3", + "rev": "c25784012c9982bca5b3e0de87e90bbdac8927d3", "type": "github" }, "original": { @@ -375,11 +375,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1785301185, - "narHash": "sha256-eoS3KQTO0aPWXZvIaRbRAzSSHW3l5wdMFXtT1ISfoKA=", + "lastModified": 1788746152, + "narHash": "sha256-RaKngusl5I8pNi8RfrVvsHq3NZe7eFWzDlb01+hEVqY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9bc02893134c733dd85de46ee4fb2fac696b5529", + "rev": "42f17a57f4f6e33b3de3dca0a2a5ea5233169d02", "type": "github" }, "original": { @@ -391,11 +391,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1785318670, - "narHash": "sha256-dN6Ou5x/+23FZLEpYP3IffO+NyJFzUlGumt1uu3MMaY=", + "lastModified": 1788752844, + "narHash": "sha256-VaWGJ6+cIYN2erfSecbRV+4ljI185Ty2wUrXyvQbgOw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0954f7ee2f6bb3dc7d4e3d0d8bcb8fd4bde4cfc5", + "rev": "dc5d91f840324650bac8c379428c7037a416959a", "type": "github" }, "original": { @@ -414,11 +414,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1785364321, - "narHash": "sha256-BLuHl+nZKb+FDq3GAM6L+UBEiyVepXANA31fT1F56pw=", + "lastModified": 1788190018, + "narHash": "sha256-59BAfH0txPAZrPBF4QJqwvUWppD+ICrcjA1LZAmPnrQ=", "owner": "nix-community", "repo": "nixvim", - "rev": "acd69cc15d57004e8cb4495034320263a3d362ea", + "rev": "41844750e55f17b1385d5b09ca7ade5f11f49506", "type": "github" }, "original": { @@ -439,11 +439,11 @@ ] }, "locked": { - "lastModified": 1783439237, - "narHash": "sha256-WUr8JF2v3n4Y30E5dxv4sAgNJXpVDBoCQNoQ/V4+n4o=", + "lastModified": 1785549842, + "narHash": "sha256-DCwBZmGsySF7oKGTRgEv2HvpxVXkHT+38VhTM76k0B4=", "owner": "nix-community", "repo": "NUR", - "rev": "b70bb66c7bcd162642f3a609bc16843c7059f503", + "rev": "a9f987b57594e845e3e5cdd423b9a70846d70308", "type": "github" }, "original": { @@ -475,11 +475,11 @@ ] }, "locked": { - "lastModified": 1783174389, - "narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=", + "lastModified": 1788337237, + "narHash": "sha256-gkSH8VUtCo6hnysNmb9DbTuDepH2t5pv+QWjP75xKAk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9", + "rev": "fbf759290e0cb0a98dfc813a4eb7d53ad1dacb57", "type": "github" }, "original": { @@ -508,11 +508,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1784676123, - "narHash": "sha256-ndyanKzw90yX2nUVFmTuYqXidUNymtMfgmIHyNdhht0=", + "lastModified": 1787771653, + "narHash": "sha256-DkkJSBOXWV/mja5Vy8az5g1KpZlsbUwlmH0BsQhowaQ=", "owner": "danth", "repo": "stylix", - "rev": "66714e5ce44269ecc58c20d9196da8dbe1b27a31", + "rev": "5e3809851f486e7fc7e84b40f174c74b60ecc784", "type": "github" }, "original": { @@ -522,6 +522,7 @@ } }, "systems": { + "flake": false, "locked": { "lastModified": 1774449309, "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=", @@ -539,15 +540,16 @@ }, "systems_2": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1774449309, + "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=", "owner": "nix-systems", "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "rev": "c29398b59d2048c4ab79345812849c9bd15e9150", "type": "github" }, "original": { "owner": "nix-systems", + "ref": "future-26.11", "repo": "default", "type": "github" } @@ -571,11 +573,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1781968807, - "narHash": "sha256-yYO3Vw2M0y3TAUqt+9+Mj0zwP3XDTF5/PXcPhhFQ1ZM=", + "lastModified": 1785153830, + "narHash": "sha256-fNdfCTeCXU3tZG3TMincd+u68qBHQgCr2Ljr/M1mWP0=", "owner": "tinted-theming", "repo": "schemes", - "rev": "2ccef2f4b22e3cab5a9292811f7133a07eeba4a7", + "rev": "9bd28ed313560db3c5b605c63bc4e309e78e3fc8", "type": "github" }, "original": { @@ -587,11 +589,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1782012462, - "narHash": "sha256-2iDiD8DQLwS1lGuD9TS8WlvNyDoTs6krWntJbtB2zGo=", + "lastModified": 1785031658, + "narHash": "sha256-mZp9O2LjzdMzlqQF3l3fjqsuPBzXy+1qTfBEUGjTlpk=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "8c4e750f738a742bd73377ee41d3dadedebedef4", + "rev": "5d2c67f61ea7af36f16865ab6d541cdba41dc257", "type": "github" }, "original": { @@ -603,11 +605,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1782009766, - "narHash": "sha256-VUhBjpGvWqHI7rWeyMYb/u87YJSXHKfVV6S+IelWeO8=", + "lastModified": 1785030526, + "narHash": "sha256-klZf8UviewRkxuu74Bhbq6tqy7oxebQC7UVRWbbtQxU=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "5e8350bcd354e3241ab681a265fa6ef060c40be1", + "rev": "16f5a8adf4a6b1310d0a61ab172de963e8f76a02", "type": "github" }, "original": { diff --git a/src/skills/grill/SKILL.md b/src/skills/grill/SKILL.md new file mode 100644 index 0000000..2d4b583 --- /dev/null +++ b/src/skills/grill/SKILL.md @@ -0,0 +1,82 @@ +--- +name: grill +description: Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any grill trigger phrase. +--- + +# grill + +Interview the user relentlessly until you reach a shared understanding. +Map the interview as a **design tree**. +Every decision branches into the decisions that depend on it. + +Never use an interactive question tool. +Do not act on the plan until the user confirms shared understanding. +Do not begin implementation after confirmation unless the user explicitly asks for implementation. + +## Steps + +1. Build the design tree. + Identify the root decision and every known dependent decision. + Read relevant files, docs, and prior conversation before asking. + Resolve facts yourself when the environment can answer them. + + Finish when known prerequisites, facts, and open decisions are mapped. + +2. Freeze the current frontier. + Treat the **frontier** as every decision whose prerequisites are settled. + Freeze those questions into the current round. + Put newly unblocked questions in the next round. + Put dependent questions in a later round when their prerequisite remains unsettled. + + Finish when the current round contains every currently unblocked decision. + +3. Ask one question from the current round. + Ask only one question per assistant turn. + Number the question. + Include your recommended answer. + + When a question turns on existing code, docs, or artifacts, open with a context quote. + Quote the exact passage that creates the question. + + Finish when the user can answer without scrolling through other questions. + +4. Wait for the user's answer. + Treat decisions as the user's job. + Treat facts as your job. + Do not ask the user for facts that tools or files can answer. + + Finish when the answer updates the design tree. + +5. Continue or advance the round. + Ask the next unanswered question from the frozen round. + Recompute the frontier only after the frozen round is complete. + Challenge vague or overloaded language with precise terms. + Probe edge cases with concrete scenarios. + Surface contradictions between user claims, docs, and code with quotes from both sides. + + Finish when the next turn has either another question from the current round or a new frozen round. + +6. Repeat rounds until the frontier is empty. + Stop only when every branch of the design tree has been visited. + Leave no decision silently assumed. + + Finish when you have visited every branch and no open decision remains. + +7. Close the interview. + State that the frontier is empty. + Ask the user to confirm that you reached a shared understanding. + Stop and wait for the user's next instruction. + + Finish when the user can confirm the shared understanding or give a new instruction. + +## Question format + +Use this format for each question: + +```markdown +Q1. **** + + + +Recommendation: +```