feat(agents): add Crush and disable usage tracking

This commit is contained in:
Ryan Yin
2026-09-18 21:20:33 +08:00
committed by ryan4yin | 二花
parent 23258a06d4
commit bcee9f2ac8
9 changed files with 85 additions and 21 deletions
+1
View File
@@ -35,6 +35,7 @@ Current targets:
- OpenCode: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/opencode/AGENTS.md` - OpenCode: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/opencode/AGENTS.md`
- Pi: `AGENTS.md` -> `~/.pi/agent/AGENTS.md` - Pi: `AGENTS.md` -> `~/.pi/agent/AGENTS.md`
- OMP: `AGENTS.md` -> `~/.omp/agent/AGENTS.md` - OMP: `AGENTS.md` -> `~/.omp/agent/AGENTS.md`
- Crush: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/crush/CRUSH.md`
- Generic cross-tool (read by Kimi Code): `AGENTS.md` -> `~/.agents/AGENTS.md` - Generic cross-tool (read by Kimi Code): `AGENTS.md` -> `~/.agents/AGENTS.md`
Behavior: Behavior:
+1
View File
@@ -12,6 +12,7 @@ Installed via Nix:
- kimi-code - kimi-code
- pi - pi
- omp - omp
- crush
## Optional tooling ## Optional tooling
+2
View File
@@ -47,12 +47,14 @@ def main() -> int:
opencode_dir = xdg_config_home / "opencode" opencode_dir = xdg_config_home / "opencode"
pi_dir = Path("~/.pi/agent").expanduser() pi_dir = Path("~/.pi/agent").expanduser()
omp_dir = Path("~/.omp/agent").expanduser() omp_dir = Path("~/.omp/agent").expanduser()
crush_dir = xdg_config_home / "crush"
agents_dir = Path("~/.agents").expanduser() agents_dir = Path("~/.agents").expanduser()
targets = ( targets = (
(codex_dir, "AGENTS.md"), (codex_dir, "AGENTS.md"),
(opencode_dir, "AGENTS.md"), (opencode_dir, "AGENTS.md"),
(pi_dir, "AGENTS.md"), (pi_dir, "AGENTS.md"),
(omp_dir, "AGENTS.md"), (omp_dir, "AGENTS.md"),
(crush_dir, "CRUSH.md"),
(agents_dir, "AGENTS.md"), (agents_dir, "AGENTS.md"),
) )
failed = False failed = False
+4 -3
View File
@@ -23,6 +23,7 @@ class InstallRulesTests(unittest.TestCase):
(home / ".config" / "opencode", "AGENTS.md"), (home / ".config" / "opencode", "AGENTS.md"),
(home / ".pi" / "agent", "AGENTS.md"), (home / ".pi" / "agent", "AGENTS.md"),
(home / ".omp" / "agent", "AGENTS.md"), (home / ".omp" / "agent", "AGENTS.md"),
(home / ".config" / "crush", "CRUSH.md"),
(home / ".agents", "AGENTS.md"), (home / ".agents", "AGENTS.md"),
) )
for target_dir, _ in target_names: for target_dir, _ in target_names:
@@ -41,18 +42,18 @@ class InstallRulesTests(unittest.TestCase):
patch.object( patch.object(
installer, installer,
"install_one", "install_one",
side_effect=[PermissionError("denied"), None, None, None, None], side_effect=[PermissionError("denied"), None, None, None, None, None],
) as install, ) as install,
patch("sys.stderr", new_callable=io.StringIO) as stderr, patch("sys.stderr", new_callable=io.StringIO) as stderr,
): ):
self.assertEqual(installer.main(), 1) self.assertEqual(installer.main(), 1)
self.assertEqual(install.call_count, 5) self.assertEqual(install.call_count, 6)
self.assertIn("denied", stderr.getvalue()) self.assertIn("denied", stderr.getvalue())
def test_successful_targets_return_success(self): def test_successful_targets_return_success(self):
with patch.object(installer, "install_one") as install: with patch.object(installer, "install_one") as install:
self.assertEqual(installer.main(), 0) self.assertEqual(installer.main(), 0)
self.assertEqual(install.call_count, 5) self.assertEqual(install.call_count, 6)
def test_existing_file_is_backed_up_without_overwriting_backup(self): def test_existing_file_is_backed_up_without_overwriting_backup(self):
with tempfile.TemporaryDirectory() as directory: with tempfile.TemporaryDirectory() as directory:
+23 -9
View File
@@ -1,4 +1,17 @@
{ pkgs, llm-agents, ... }: { pkgs, llm-agents, ... }:
let
agentPackages = llm-agents.packages.${pkgs.stdenv.hostPlatform.system};
codexNoAnalytics = pkgs.writeShellApplication {
name = "codex";
text = ''
exec ${agentPackages.codex}/bin/codex \
--config analytics.enabled=false \
--config feedback.enabled=false \
--config check_for_update_on_startup=false \
"$@"
'';
};
in
{ {
home.packages = home.packages =
with pkgs; with pkgs;
@@ -8,16 +21,17 @@
qrtool # decode/encode qr code qrtool # decode/encode qr code
] ]
# AI Agent Tools # AI Agent Tools
++ (with llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; [ ++ [
# Agents # Agents
codex codexNoAnalytics
cursor-cli agentPackages.cursor-agent
opencode agentPackages.opencode
kimi-code agentPackages.kimi-code
pi agentPackages.pi
omp agentPackages.omp
agentPackages.crush
# Utilities # Utilities
rtk # CLI proxy that reduces LLM token consumption agentPackages.rtk # CLI proxy that reduces LLM token consumption
]); ];
} }
+18
View File
@@ -0,0 +1,18 @@
{
home.sessionVariables = {
DO_NOT_TRACK = "1";
KIMI_DISABLE_TELEMETRY = "1";
PI_TELEMETRY = "0";
PI_SKIP_VERSION_CHECK = "1";
CRUSH_DISABLE_METRICS = "1";
CRUSH_DISABLE_PROVIDER_AUTO_UPDATE = "1";
OPENCODE_CONFIG_CONTENT = builtins.toJSON {
share = "disabled";
};
OPENCODE_DISABLE_AUTOUPDATE = "1";
};
}
+2
View File
@@ -164,6 +164,8 @@ in
".config/opencode" ".config/opencode"
".local/share/opencode" ".local/share/opencode"
".local/state/opencode" ".local/state/opencode"
".config/crush"
".local/share/crush"
# herdr: plugin registry, plugin checkouts/config, session layout # herdr: plugin registry, plugin checkouts/config, session layout
".config/herdr" ".config/herdr"
+23 -9
View File
@@ -1,4 +1,17 @@
{ pkgs, llm-agents, ... }: { pkgs, llm-agents, ... }:
let
agentPackages = llm-agents.packages.${pkgs.stdenv.hostPlatform.system};
codexNoAnalytics = pkgs.writeShellApplication {
name = "codex";
text = ''
exec ${agentPackages.codex}/bin/codex \
--config analytics.enabled=false \
--config feedback.enabled=false \
--config check_for_update_on_startup=false \
"$@"
'';
};
in
{ {
# https://github.com/Mic92/nix-ld # https://github.com/Mic92/nix-ld
# #
@@ -80,16 +93,17 @@
conda conda
] ]
# AI Agent Tools # AI Agent Tools
++ (with llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; [ ++ [
# Agents # Agents
codex codexNoAnalytics
cursor-cli agentPackages.cursor-agent
opencode agentPackages.opencode
kimi-code agentPackages.kimi-code
pi agentPackages.pi
omp agentPackages.omp
agentPackages.crush
# Utilities # Utilities
rtk # CLI proxy that reduces LLM token consumption agentPackages.rtk # CLI proxy that reduces LLM token consumption
]); ];
} }
+11
View File
@@ -0,0 +1,11 @@
{
environment.etc."codex/config.toml".text = ''
check_for_update_on_startup = false
[analytics]
enabled = false
[feedback]
enabled = false
'';
}