chill-agent 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +39 -0
- package/.claude-plugin/plugin.json +35 -0
- package/.cline-plugin/plugin.json +35 -0
- package/.clinerules/chill-agent +274 -0
- package/.codex-plugin/plugin.json +35 -0
- package/.cursor/rules/chill-agent.mdc +278 -0
- package/.cursor-plugin/plugin.json +35 -0
- package/.devin-plugin/plugin.json +35 -0
- package/.grok-plugin/plugin.json +35 -0
- package/.kimi-plugin/plugin.json +35 -0
- package/.omp-plugin/plugin.json +35 -0
- package/.openclaw/skills/chill-audit/SKILL.md +103 -0
- package/.openclaw/skills/chill-debt/SKILL.md +44 -0
- package/.openclaw/skills/chill-gain/SKILL.md +52 -0
- package/.openclaw/skills/chill-help/SKILL.md +76 -0
- package/.openclaw/skills/chill-review/SKILL.md +101 -0
- package/.openclaw/skills/chill-slop/SKILL.md +274 -0
- package/.openclaw/skills/chill-slop-code/SKILL.md +93 -0
- package/.openclaw/skills/chill-slop-copywriting/SKILL.md +80 -0
- package/.openclaw/skills/chill-slop-human/SKILL.md +73 -0
- package/.openclaw/skills/chill-slop-mobile/SKILL.md +95 -0
- package/.openclaw/skills/chill-slop-ui/SKILL.md +114 -0
- package/.opencode/command/chill-audit.toml +2 -0
- package/.opencode/command/chill-debt.toml +2 -0
- package/.opencode/command/chill-gain.toml +2 -0
- package/.opencode/command/chill-help.toml +2 -0
- package/.opencode/command/chill-review.toml +2 -0
- package/.opencode/command/chill.toml +2 -0
- package/.qoder-plugin/plugin.json +35 -0
- package/.windsurf/rules/chill-agent.md +274 -0
- package/GUIDE.md +47 -0
- package/INSTALL.md +78 -0
- package/after-install.md +23 -0
- package/antislop.md +764 -0
- package/benchmarks/README.md +10 -0
- package/benchmarks/loc.js +21 -0
- package/benchmarks/results/token-efficiency.md +10 -0
- package/chillslop.md +764 -0
- package/commands/chill-audit.toml +2 -0
- package/commands/chill-debt.toml +2 -0
- package/commands/chill-gain.toml +2 -0
- package/commands/chill-help.toml +2 -0
- package/commands/chill-review.toml +2 -0
- package/commands/chill.toml +2 -0
- package/docs/agent-portability.md +62 -0
- package/docs/cursor-hooks.md +200 -0
- package/examples/README.md +8 -0
- package/examples/anti-slop-copy.md +7 -0
- package/examples/anti-slop-ui.md +14 -0
- package/examples/csv-sum.md +27 -0
- package/examples/debounce.md +22 -0
- package/examples/deep-clone.md +14 -0
- package/examples/modal-dialog.md +19 -0
- package/gemini-extension.json +6 -0
- package/hooks/chill-activate.js +19 -0
- package/hooks/chill-mode-tracker.js +23 -0
- package/hooks/chill-statusline.ps1 +10 -0
- package/hooks/chill-statusline.sh +9 -0
- package/hooks/claude-codex-hooks.json +11 -0
- package/hooks/copilot-hooks.json +11 -0
- package/hooks/cursor-hooks.json +17 -0
- package/hooks/qoder-hooks.json +11 -0
- package/i18n/README.es.md +17 -0
- package/i18n/README.id.md +25 -0
- package/i18n/README.ja.md +17 -0
- package/i18n/README.zh-CN.md +17 -0
- package/opencode.json +18 -0
- package/package.json +38 -3
- package/plugin.json +3 -0
- package/plugin.yaml +12 -0
- package/rules/antislop.md +764 -0
- package/rules/chillslop.md +764 -0
- package/rules/chillslop.mdc +764 -0
- package/skills/chill-audit/SKILL.md +103 -0
- package/skills/chill-debt/SKILL.md +44 -0
- package/skills/chill-gain/SKILL.md +52 -0
- package/skills/chill-help/SKILL.md +76 -0
- package/skills/chill-review/SKILL.md +101 -0
- package/skills/chill-slop/VERSION +1 -0
- package/skills/chill-slop-human/contrast-check.py +168 -0
- package/skills/chill-slop-human/contrast-mcp.py +121 -0
- package/skills/chill-slop-human/references/A11Y-PATTERNS.md +249 -0
- package/skills/chill-slop-human/references/WCAG.md +127 -0
- package/skills/chill-slop-ui/references/CORE-WEB-VITALS.md +181 -0
- package/skills/chill-slop-ui/references/WEB-BASELINE.md +28 -0
- package/tests/manifests.test.js +29 -0
- package/tests/rules.test.js +34 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Quality audit of the whole repo: bugs, security, load, tests, speed, bloat"
|
|
2
|
+
prompt = "Audit the whole repository (or the folder the user names) like the senior developer who just inherited it. Map first: README, deploy and build config, dependencies, entry points, tests; find the expected load (one person or many users and processes); trace the main flows and read fully the paths with user input, money, auth, data writes, background jobs and shared state. Look for, in this order: bugs, risk (security holes, data loss), scale (races, the same work done by every process, memory that only grows, a query per item, O(n^2)), risky logic without a test, slow code (big = problem, small = suggestion), lean (dead code, duplicate helpers, stdlib or native instead of custom code or a dependency, abstractions with one implementation, near-copies to merge, a function doing several unrelated jobs to split, never split by line count). Before calling code unused, grep the whole tree including tests, fixtures, config and string references. Every finding needs a concrete case. A shortcut marked with a shortcut: (or older chill:) comment that names its limit is a decision, not a finding. Propose the smallest fix, prefer deleting code, never add layers. Very simple English. Start with 'What this repo does:' and the load you assumed. Then at most 20 numbered findings grouped Must fix / Should fix / Nice to have, most important first; each: a bold title with file:lines, then four bullets: What this is, Problem, Fix, If we skip it. End with 'Verdict:', 'Lean: -N lines, -M dependencies possible.' and 'Not checked:' for the parts you did not read. Change no code."
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Harvest shortcut: comments into a tracked debt ledger"
|
|
2
|
+
prompt = "Harvest every `shortcut:` comment (and older `chill:` ones) in this repository into a debt ledger so deferrals do not rot into 'later means never'. Grep the whole tree for comment markers (git grep --no-index --exclude-standard -nE '(#|//|/[*]) ?(shortcut|chill):', skipping .git and everything .gitignore ignores; if the user names their own marker word, grep for that instead; skip hits that are not a deferral, like a keyboard-shortcut note). One row per marker, grouped by file: <file>:<line> — <what was simplified>. ceiling: <the limit named in the comment>. upgrade: <the trigger to revisit>. Tag any marker that names no upgrade path or trigger as no-trigger, those rot silently. End with the count of markers and how many lack a trigger. If none: 'No shortcut debt. Clean ledger.' Report only, change nothing."
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Show chill's measured impact scoreboard (less code, cost, time)"
|
|
2
|
+
prompt = "Show the chill gain scoreboard. One shot, change nothing: do not switch mode, write flag files, or persist anything. Render the published agentic benchmark of ChillAgent 5 (39 tasks on a real FastAPI + React repo plus bug fixes, security and privacy cases and small apps, Opus 5.5, 5 runs each, against the same agent without the skill; geometric mean of per-task medians; source benchmarks/results/2026-10-07-agentic.md and the README) as plain ASCII bars, chill as a share of the no-skill baseline (100%): Lines of code 47% (down 53%); Output tokens 55% (down 45%); Cost 74% (down 26%); Time 59% (down 41%); Hidden checks passed 97% (no-skill 96%; 18 of the tasks have hidden checks for correctness and safety); Tests where the logic needs one 98% (no-skill 68%). The bar length shows the share, the label carries the exact figure. These are benchmark averages, not this repo. NEVER print a per-repo savings number: the unbuilt version was never written, so there is no real baseline to subtract from in a live repo. For real per-repo figures, point to /chill-debt (the counted shortcut ledger) and /chill-audit (what is still cuttable). Report only."
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Quick reference for chill levels, skills, and commands"
|
|
2
|
+
prompt = "Show the chill quick reference. One shot, change nothing: do not switch mode, write flag files, or persist anything. Levels: /chill lite (build what's asked, name the lazier alternative in one line), /chill (full, the default ladder: YAGNI then stdlib then native then one line then minimum), /chill ultra (deletion before addition, challenges the requirement before building). Commands: /chill-review (over-engineering review of the current changes), /chill-audit (whole-repo over-engineering audit), /chill-debt (harvest shortcut: comments into a tracked ledger), /chill-gain (measured-impact scoreboard from the benchmark), /chill-help (this card). Deactivate with 'stop chill', 'normal mode', or /chill off; resume anytime with /chill. Default mode is full; change it with the PONYTAIL_DEFAULT_MODE environment variable (off|lite|full|ultra) or a config file at ~/.config/chill/config.json (Windows: %APPDATA%\\chill\\config.json) with {\"defaultMode\": \"lite\"}. Resolution order: env var, then config file, then full."
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Quality review of the current changes: bugs, security, load, tests, speed, bloat"
|
|
2
|
+
prompt = "Review the current code changes like the senior developer who will be paged when they break. Review what the user names (uncommitted or staged changes, a branch, a PR link, files); nothing named: the uncommitted changes, or the last commit if there are none. First read the code the change touches: callers of every changed function, the functions it calls, the tests, the README (find the expected load: one person or many users and processes). A change can break code it does not touch. Look for, in this order: bugs (wrong result, crash, missed edge case, a caller broken by the change, a fix in one caller while the shared function stays broken), risk (security holes, data loss), scale (check-then-write races, the same work done by every process, memory that only grows, a query per item, O(n^2) on big input), risky logic without a test, slow code (big = problem, small = suggestion), lean (dead code, a helper the repo already has, stdlib or native instead of custom code or a new dependency, abstractions with one implementation, near-copies to merge, a function doing several unrelated jobs to split, never split by line count). Every finding needs a concrete case; re-read the lines to confirm it. A shortcut marked with a shortcut: (or older chill:) comment that names its limit is a decision, not a finding. Propose the smallest fix, prefer deleting code, never add layers. No style taste, no vague worries. Very simple English, explain technical terms. Start with 'What this change does:' in two or three sentences and the load you assumed. Then numbered findings grouped Must fix / Should fix / Nice to have; each finding: a bold title with file:lines, then four bullets: What this is, Problem, Fix, If we skip it (one or two short sentences each). End with 'Verdict:', 'Lean: -N lines possible.' when lean findings exist, and 'Not checked:' if something mattered and you could not check it. Nothing found: 'Looks good. Ship.' Change no code."
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
description = "Switch chill intensity level (lite/full/ultra/off)"
|
|
2
|
+
prompt = "Switch to chill {{args}} mode. With no level, keep the current level, or switch on at the default level if chill was off. Lazy senior dev mode, before any code: does it need to exist at all (YAGNI)? Does the standard library do it? A native platform feature? Can it be one line? Build the minimum that works. No unrequested abstractions, no avoidable dependencies, no boilerplate. Mark deliberate simplifications that cut a real corner with a known ceiling using a shortcut: comment that names the ceiling and upgrade path."
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Agent Portability
|
|
2
|
+
|
|
3
|
+
ChillAgent is an agent-portable skill distribution. The skills in `skills/` hold
|
|
4
|
+
the core behavior; host-specific files are adapters that make that behavior easy
|
|
5
|
+
to load in a given agent.
|
|
6
|
+
|
|
7
|
+
## Supported Adapters
|
|
8
|
+
|
|
9
|
+
| Host | Files | Notes |
|
|
10
|
+
|------|-------|-------|
|
|
11
|
+
| Claude Code | `.claude-plugin/plugin.json`, `commands/`, `hooks/claude-codex-hooks.json`, `hooks/` | Full plugin install with session activation, mode tracking, commands, and statusline support. |
|
|
12
|
+
| Codex | `.codex-plugin/plugin.json`, `hooks/claude-codex-hooks.json`, `hooks/`, `skills/` | Plugin install with the same skills plus lifecycle hooks for activation and mode tracking. |
|
|
13
|
+
| Devin CLI | `.devin-plugin/plugin.json`, `skills/` | `devin plugins install DietrichGebert/chill-agent` installs chill-agent as a Devin plugin; skills are available as `/chill-agent:chill-agent`, `/chill-agent:chill-agent-review`, and so on. |
|
|
14
|
+
| CodeBuddy | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `hooks/claude-codex-hooks.json`, `hooks/`, `skills/` | CodeBuddy Code reads the Claude-format manifests when no `.codebuddy-plugin/` exists and expands `${CLAUDE_PLUGIN_ROOT}` in hook commands, so `/plugin marketplace add DietrichGebert/chill-agent` + `/plugin install chill-agent@chill-agent` installs the Claude plugin unchanged. The hooks detect it by `CODEBUDDY_PLUGIN_ROOT`, keep the mode flag in `$CODEBUDDY_CONFIG_DIR` or `~/.codebuddy`, and answer in `hookSpecificOutput` JSON. No subagent injection: CodeBuddy discards `SubagentStart` hook output. Verified with CodeBuddy CLI 2.161.2. |
|
|
15
|
+
| Grok Build | root `plugin.json`, `.grok-plugin/marketplace.json`, `skills/`, `commands/` | `grok plugin install DietrichGebert/chill-agent --trust`, then enable. Grok can auto-invoke chill-agent from its coding-task skill description; `/chill-agent` makes activation explicit. Grok lifecycle hooks are not used because passive hook output cannot inject instructions. |
|
|
16
|
+
| Goose | `plugin.json`, `skills/`, `AGENTS.md` | `goose plugin install https://github.com/DietrichGebert/chill-agent.git` clones the repo into `~/.agents/plugins/chill-agent/` and imports the six skills as `chill-agent:<skill>`. Always-on rules come from `AGENTS.md`: goose reads it from the project (git root down to the working directory) and from `~/.agents/AGENTS.md`, plus `.goosehints` from `~/.config/goose/`. No lifecycle hooks, so no persistent `/chill-agent` levels. Verified with Goose 1.53.0. |
|
|
17
|
+
| Muse Code (Meta) | `AGENTS.md`, `skills/` | Muse reads `AGENTS.md` (or `CLAUDE.md`) in the project once the workspace is trusted, and `~/.config/muse/AGENTS.md` for every project. Skills: copy the folders from `skills/` to `~/.agents/skills/`, or run `muse skills install ./skills/<name> --scope user` per skill. Instruction-tier, no `/chill-agent` levels or hooks. Verified with Muse Code 1.4.2. |
|
|
18
|
+
| OpenCode | `.opencode/plugins/chill-agent.mjs`, `.opencode/command/`, `hooks/`, `skills/` | Server plugin injects the ruleset each turn via `experimental.chat.system.transform` and persists `/chill-agent` switches; reuses the shared instruction builder. Installs globally with `opencode plugin add @dietrichgebert/chill-agent` (OpenCode writes the `plugins` entry itself), or per project through the `plugins` array in `opencode.json`. |
|
|
19
|
+
| Kilo Code | `.opencode/plugins/chill-agent.mjs` (npm), `AGENTS.md` | Kilo is built on OpenCode and runs chill-agent's OpenCode plugin unchanged: add `{ "plugin": ["@dietrichgebert/chill-agent"] }` to `kilo.jsonc` (project) or `~/.config/kilo/kilo.jsonc` (global). That injects the ruleset every turn, keeps `/chill-agent` level switches, and registers `/chill-agent-review` and the other commands. Without the plugin, Kilo still loads `AGENTS.md` from the project root or `~/.config/kilo/AGENTS.md` (instruction-tier). Verified with Kilo CLI 7.8.3, which shares its core with the VS Code extension. |
|
|
20
|
+
| pi | `pi-extension/`, `skills/`, `hooks/` | Package extension: injects the ruleset each turn through the shared instruction builder and registers the `/chill-agent` commands. |
|
|
21
|
+
| Oh My Pi (omp) | `.claude-plugin/marketplace.json`, `pi-extension/`, `skills/` | Installs through the marketplace and runs the pi extension unchanged (omp reads the `pi` key in `package.json`). Verified with omp 18.6.1: the ruleset arrives every turn and the skills are listed. |
|
|
22
|
+
| Kimi Code | `.kimi-plugin/plugin.json`, `AGENTS.md`, `skills/` | Native Kimi plugin: `systemPromptPath` puts `AGENTS.md` into the system prompt every turn, and the six skills double as slash commands. No hooks. Verified with Kimi Code 2.1.1 over ACP: the ruleset is in the system prompt and `/chill-agent-review staged` activates the skill with its target. |
|
|
23
|
+
| Hermes Agent | `plugin.yaml`, `__init__.py`, `skills/` | Native Hermes plugin: injects active mode through `pre_llm_call`, rewrites gateway `/chill-agent-*` skill commands into agent prompts, registers `/chill-agent` mode switching, and exposes bundled skills as `chill-agent:<skill>`. |
|
|
24
|
+
| OpenClaw | `.openclaw/skills/`, `skills/` | `clawhub install chill-agent` installs the skill from ClawHub, and the other five install the same way. `.openclaw/skills/` is generated from `skills/` by `node scripts/build-openclaw-skills.js`. |
|
|
25
|
+
| Gemini CLI | `gemini-extension.json`, `AGENTS.md`, `commands/`, `skills/` | Extension manifest points `contextFileName` at `AGENTS.md` for always-on rules, and reuses the existing `commands/*.toml` and `skills/`, which Gemini CLI auto-discovers. The Claude/Codex hook map is not placed at Gemini's auto-discovered `hooks/hooks.json` path. |
|
|
26
|
+
| Qwen Code | `gemini-extension.json`, `AGENTS.md`, `commands/`, `skills/` | `qwen extensions install DietrichGebert/chill-agent:chill-agent` installs through Qwen's Gemini CLI compatibility: `AGENTS.md` becomes always-on context, the six `/chill-agent` commands are migrated, and the six skills are registered. The Claude/Codex lifecycle hooks are not used, so levels don't persist. Verified with Qwen Code 0.24.7 and chill-agent 4.11.0 (needs 4.11.0 or later, see #1021). |
|
|
27
|
+
| Cursor | `hooks/cursor-hooks.json`, `scripts/cursor-hooks.js`, `hooks/`, `.cursor/rules/chill-agent.mdc` | Native hooks: `node scripts/cursor-hooks.js install` merges `sessionStart` (default-level ruleset via `additional_context`) and `beforeSubmitPrompt` (`/chill-agent` level tracking, new-level ruleset via `additional_context`) into `~/.cursor/hooks.json`, or `.cursor/hooks.json` with `--project`, keeping unrelated hooks. No subagent injection (Cursor's `subagentStart` takes only `permission`/`user_message`) and no `sessionStart` in cloud agents. `.cursor/rules/chill-agent.mdc` stays the instruction-only alternative; while that rule is in a workspace the hooks inject only a notice. Contract and verification record: [cursor-hooks.md](cursor-hooks.md). |
|
|
28
|
+
| Windsurf | `.windsurf/rules/chill-agent.md` | Project rule. |
|
|
29
|
+
| Cline (extension and CLI) | `.clinerules/chill-agent.md`, `skills/`, `AGENTS.md` | Copy `.clinerules/chill-agent.md` into a project's `.clinerules/`, or into `~/.cline/rules/` (or `~/Documents/Cline/Rules/`) for every project; Cline also reads `AGENTS.md` from the project root. `cline skill add DietrichGebert/chill-agent` installs the six skills into `.agents/skills/`. Instruction-tier, no `/chill-agent` levels or hooks. Rules and skills verified with Cline CLI 3.0.68. |
|
|
30
|
+
| GitHub Copilot | `.github/copilot-instructions.md` | Repository instruction file. |
|
|
31
|
+
| GitHub Copilot CLI | `.github/plugin/`, `AGENTS.md`, `.github/copilot-instructions.md`, `~/.copilot/copilot-instructions.md` | Plugin-supported (`copilot plugin marketplace add DietrichGebert/chill-agent` + `copilot plugin install chill-agent@chill-agent`). Fallback instruction mode remains: per-project from `AGENTS.md` or `.github/copilot-instructions.md`, or globally from `~/.copilot/copilot-instructions.md` (instruction-tier, no `/chill-agent` levels or hooks). |
|
|
32
|
+
| Antigravity (IDE) | `AGENTS.md` | Reads `AGENTS.md` at the repo root as always-on rules (like `.cursorrules`/`CLAUDE.md`); `.agents/rules/` also works for workspace rules. Instruction-tier. |
|
|
33
|
+
| Antigravity CLI | `plugin.json`, `skills/`, `commands/`, `AGENTS.md` | `agy plugin install https://github.com/DietrichGebert/chill-agent` installs the six skills and converts the six `commands/` into skills too, called as slash commands. No lifecycle hooks, so no persistent `/chill-agent` levels. `AGENTS.md` in the project gives the always-on ruleset. Install verified with Antigravity CLI 1.3.3. |
|
|
34
|
+
| CodeWhale | `AGENTS.md` | Reads `AGENTS.md` from the repo root as project instructions; also reads `CLAUDE.md` and `.claude/instructions.md` as fallbacks. Instruction-tier. |
|
|
35
|
+
| VS Code + Codex extension | `AGENTS.md` | The Codex extension reads `AGENTS.md` (repo root, or `~/.codex/AGENTS.md` globally). Instruction-tier; the full Codex plugin row above adds `/chill-agent` levels and hooks. |
|
|
36
|
+
| JetBrains Junie | `AGENTS.md` | Junie reads `AGENTS.md` once you point it there in Settings → Tools → Junie → Project Settings → Guidelines Path (not automatic yet); this repo ships `AGENTS.md`, and `.junie/guidelines.md` is Junie's legacy path. Instruction-tier. |
|
|
37
|
+
| Amp (Sourcegraph) | `AGENTS.md` | Amp reads `AGENTS.md` from the working directory and parent directories up to `$HOME` (plus global config like `~/.config/amp/AGENTS.md`); falls back to `AGENT.md`/`CLAUDE.md`. Instruction-tier. |
|
|
38
|
+
| Factory Droid | `AGENTS.md`, `skills/` | Droid reads `AGENTS.md` from the working directory up to the git root (also inside `.factory/` and `.agents/` there) and globally from `~/.factory/AGENTS.md`. It loads `SKILL.md` skills from `.factory/skills/` or `~/.factory/skills/`, so copy the folders from `skills/` there for review, audit and the other skills. Instruction-tier, no `/chill-agent` levels or hooks. |
|
|
39
|
+
| Command Code | `skills/`, `AGENTS.md` | `cmd skills add https://github.com/DietrichGebert/chill-agent` installs the six skills into `.commandcode/skills/` (add `--global` for `~/.commandcode/skills/`); `.agents/skills/` is auto-discovered too. Reads `AGENTS.md` as project memory every session. Instruction-tier, no `/chill-agent` levels or hooks. |
|
|
40
|
+
| Freebuff CLI | `AGENTS.md`, `skills/` | Freebuff puts the project-root `AGENTS.md` (or `CLAUDE.md` if there is none) into every session as project instructions, and reads `~/.agents.md` globally. It loads `SKILL.md` skills from `.agents/skills/` or `.claude/skills/` in the project and from `~/.agents/skills/` or `~/.claude/skills/` globally, so copy the folders from `skills/` there for review, audit and the other skills. Instruction-tier, no `/chill-agent` levels or hooks. |
|
|
41
|
+
| DeepSeek Harness (dsh) | `AGENTS.md`, `skills/` | DSH loads `AGENTS.md` (or `CLAUDE.md`) from the project root down to the working directory, plus `~/.dsh/AGENTS.md` (`$DSH_HOME`) for every project, into the first request of each session. It loads `SKILL.md` skills from `~/.agents/skills/`, so copy the folders from `skills/` there for review, audit and the other skills. Instruction-tier, no `/chill-agent` levels or hooks. Verified with dsh 0.2.0-rc.2. |
|
|
42
|
+
| Jules (Google) | `AGENTS.md` | Jules automatically reads `AGENTS.md` from the repository root. Instruction-tier. |
|
|
43
|
+
| Kiro | `.kiro/steering/chill-agent.md` | Steering rule; copy globally or into a project. |
|
|
44
|
+
| Qoder | `.qoder/rules/chill-agent.md`, `.qoder-plugin/plugin.json`, `hooks/qoder-hooks.json`, `skills/`, `AGENTS.md` | Qoder auto-loads `AGENTS.md` as always-on context; `.qoder/rules/chill-agent.md` provides per-project rules; the plugin manifest points at `skills/` for the six chill-agent skills (invoked as `/chill-agent`, `/chill-agent-review`, etc. via the Skill system). Full plugin-tier: `hooks/qoder-hooks.json` template registers `UserPromptSubmit` (mode activation + ruleset injection) and `PreToolUse` with `task|Task` matcher (subagent injection). Instruction-tier works from repo root with zero setup via `AGENTS.md`. |
|
|
45
|
+
| Zed | `AGENTS.md` | Auto-includes `AGENTS.md` from the worktree root as one of its default rule files for the Agent Panel. Instruction-tier. |
|
|
46
|
+
| Generic agents | `AGENTS.md` or `skills/*/SKILL.md` | Copy the compact rule file or load the skill files directly. |
|
|
47
|
+
|
|
48
|
+
## Adapter Rule
|
|
49
|
+
|
|
50
|
+
Keep adapters thin. When a host supports skills or hooks, point it at the
|
|
51
|
+
existing `skills/` and `hooks/` files. When a host only supports project
|
|
52
|
+
instructions, keep its copied rule text aligned with `AGENTS.md`.
|
|
53
|
+
|
|
54
|
+
## Portable Behavior
|
|
55
|
+
|
|
56
|
+
- `skills/chill-agent/SKILL.md`: lazy senior dev mode
|
|
57
|
+
- `skills/chill-agent-review/SKILL.md`: quality review of a diff
|
|
58
|
+
- `skills/chill-agent-audit/SKILL.md`: quality audit of the whole repo
|
|
59
|
+
- `skills/chill-agent-debt/SKILL.md`: harvest `shortcut:` comments into a tracked ledger
|
|
60
|
+
- `skills/chill-agent-gain/SKILL.md`: measured-impact scoreboard from the benchmark
|
|
61
|
+
- `skills/chill-agent-help/SKILL.md`: quick reference
|
|
62
|
+
- `AGENTS.md`: compact always-on instruction set for agents without skill support
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Cursor hooks
|
|
2
|
+
|
|
3
|
+
Native Cursor support through `hooks.json` (issue #817). The adapter reuses the
|
|
4
|
+
shared hook scripts; the only Cursor-specific pieces are the hooks template, the
|
|
5
|
+
install script and a small output branch in `hooks/chill-agent-runtime.js`.
|
|
6
|
+
|
|
7
|
+
| File | Role |
|
|
8
|
+
|------|------|
|
|
9
|
+
| `hooks/cursor-hooks.json` | Template: `sessionStart` and `beforeSubmitPrompt` entries with a `PONYTAIL_DIR` placeholder. |
|
|
10
|
+
| `scripts/cursor-hooks.js` | `install` / `uninstall`, merges into `~/.cursor/hooks.json` (or `.cursor/hooks.json` with `--project`). |
|
|
11
|
+
| `hooks/chill-agent-activate.js` | `sessionStart`: injects the default-level ruleset. |
|
|
12
|
+
| `hooks/chill-agent-mode-tracker.js` | `beforeSubmitPrompt`: tracks `/chill-agent` commands, injects the new level's ruleset. |
|
|
13
|
+
| `hooks/chill-agent-runtime.js` | Detects Cursor (`CURSOR_VERSION`), keeps per-project mode state and a shared compatibility flag, emits Cursor-shaped JSON. |
|
|
14
|
+
|
|
15
|
+
## Install and uninstall
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git clone https://github.com/DietrichGebert/chill-agent
|
|
19
|
+
node chill-agent/scripts/cursor-hooks.js install # ~/.cursor/hooks.json, every project
|
|
20
|
+
node chill-agent/scripts/cursor-hooks.js install --project # <cwd>/.cursor/hooks.json, this project only
|
|
21
|
+
node chill-agent/scripts/cursor-hooks.js uninstall # add --project for the project file
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
What the install script does:
|
|
25
|
+
|
|
26
|
+
- Reads the target file if it exists and keeps every hook that is not chill-agent's.
|
|
27
|
+
ChillAgent's entries are the ones whose `command` runs a `hooks/chill-agent-*.js`
|
|
28
|
+
script; they are replaced on re-install, so running it twice never duplicates.
|
|
29
|
+
- Replaces `PONYTAIL_DIR` with the checkout's absolute path, forward slashes, so
|
|
30
|
+
the command runs unchanged under cmd, PowerShell and bash. A checkout path with
|
|
31
|
+
shell metacharacters is refused; copy the template by hand in that case.
|
|
32
|
+
- Refuses to touch a `hooks.json` that is not valid JSON, and says so.
|
|
33
|
+
- `uninstall` removes only chill-agent's entries and deletes the file when nothing
|
|
34
|
+
else was in it. `node scripts/uninstall.js` runs the same removal for the user
|
|
35
|
+
file and also deletes `~/.cursor/.chill-agent-active`.
|
|
36
|
+
|
|
37
|
+
Cursor watches `hooks.json` and reloads it on save; open a new chat afterwards.
|
|
38
|
+
`node` has to be on the PATH Cursor sees. The Hooks tab under Customize and the
|
|
39
|
+
Hooks output channel show each execution and any parse errors.
|
|
40
|
+
|
|
41
|
+
## Contract
|
|
42
|
+
|
|
43
|
+
Sources: the Cursor hooks docs (`cursor.com/docs/hooks`, read 2026-09-14) and the
|
|
44
|
+
Cursor 3.20.17 client on Windows, whose hook runner and response validators were
|
|
45
|
+
read directly. "Docs" below means the page documents it; "client" means it was
|
|
46
|
+
verified in the shipped code.
|
|
47
|
+
|
|
48
|
+
| Event | ChillAgent uses | Delivery | Source |
|
|
49
|
+
|-------|---------------|----------|--------|
|
|
50
|
+
| `sessionStart` | output `additional_context` | Stored on the conversation and sent as system context with every request of that conversation. | Docs (field). Client (persistence: the value is kept on the composer as `hooksAdditionalContext` and attached to each request). |
|
|
51
|
+
| `beforeSubmitPrompt` | input `prompt`; output `continue: true` plus `additional_context` | Wrapped as a system reminder for that turn. Inline up to 10,000 characters; longer payloads are written to a file the agent is told to read; above 1,000,000 the payload is dropped. | Docs list only `continue` and `user_message`. Client: the response validator accepts `additional_context` and the submit path injects it. Undocumented, so treat it as version-dependent. |
|
|
52
|
+
| `subagentStart` | not registered | None. | Docs and client: the output schema is `permission` and `user_message` only. The client's protobuf has an unused `additional_context` slot that the hook path never fills. |
|
|
53
|
+
| `preToolUse`, `postToolUse` | not registered | `additional_context` exists on both, but it would cost a process per tool call and `beforeSubmitPrompt` already covers mode changes. | Docs. |
|
|
54
|
+
|
|
55
|
+
Output rules the runtime follows:
|
|
56
|
+
|
|
57
|
+
- Cursor parses stdout as JSON. Empty stdout means "nothing to add"; raw text is
|
|
58
|
+
logged as a parse error and ignored. The Cursor branch therefore prints either
|
|
59
|
+
one JSON object or nothing (`off` mode, ordinary prompts).
|
|
60
|
+
- `user_message` on `beforeSubmitPrompt` is shown only when `continue` is
|
|
61
|
+
`false`, so chill-agent never sets it. Confirmations reach the user through the
|
|
62
|
+
model's own reply.
|
|
63
|
+
- Exit code is always 0. Cursor treats exit code 2 as "block" and other non-zero
|
|
64
|
+
codes as fail-open; chill-agent never blocks anything.
|
|
65
|
+
|
|
66
|
+
Execution environment (client, 3.20.17):
|
|
67
|
+
|
|
68
|
+
- Every hook process gets `CURSOR_VERSION`, `CURSOR_PROJECT_DIR` and its alias
|
|
69
|
+
`CLAUDE_PROJECT_DIR`. `CURSOR_VERSION` is assigned in exactly one place, the
|
|
70
|
+
hook environment builder, so it does not leak into terminals inside Cursor.
|
|
71
|
+
ChillAgent uses it for host detection and keeps state in `~/.cursor/`.
|
|
72
|
+
- On Windows the payload is written to a temp file and the command runs inside
|
|
73
|
+
`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass` as
|
|
74
|
+
`Get-Content -LiteralPath <file> -Raw | & { $input | <command> }`, so the hook
|
|
75
|
+
still reads its JSON from stdin. On macOS and Linux it is piped directly.
|
|
76
|
+
- Cursor can also run hooks declared by Claude-format plugins and then sets
|
|
77
|
+
`CLAUDE_PLUGIN_ROOT` next to `CURSOR_VERSION`. The runtime prefers the Cursor
|
|
78
|
+
output shape in that case. Installing chill-agent that way was not tested.
|
|
79
|
+
|
|
80
|
+
## Behavior
|
|
81
|
+
|
|
82
|
+
- New conversation: `sessionStart` sets the live mode to the default level
|
|
83
|
+
(`PONYTAIL_DEFAULT_MODE`, then `config.json`, then `full`) and
|
|
84
|
+
injects `PONYTAIL MODE ACTIVE — level: <level>` followed by the ruleset filtered
|
|
85
|
+
to that level. Default `off`: no flag, no output.
|
|
86
|
+
- `/chill-agent lite|full|ultra` sent as a plain message: the flag changes and the
|
|
87
|
+
turn receives `PONYTAIL MODE CHANGED — level: <level>` plus that level's ruleset
|
|
88
|
+
(about 5,300 characters, under the inline cap). Cursor has no `/chill-agent`
|
|
89
|
+
command to load the skill body, so the hook carries it. `@chill-agent` and
|
|
90
|
+
`$chill-agent` are parsed too, but `@` opens Cursor's context picker. If the
|
|
91
|
+
chill-agent skills are also installed under `~/.cursor/skills`, Cursor treats
|
|
92
|
+
`/chill-agent lite` as a manual skill attachment and inlines the full, unfiltered
|
|
93
|
+
skill body into that message as well; the hook still receives the literal
|
|
94
|
+
`/chill-agent lite` and remains the thing that tracks the level.
|
|
95
|
+
- `/chill-agent off`, `stop chill-agent`, `normal mode`: the flag is removed and the
|
|
96
|
+
turn receives `PONYTAIL MODE OFF`. The ruleset injected at `sessionStart` stays
|
|
97
|
+
in the conversation's system context; the notice is what tells the model to
|
|
98
|
+
stop applying it, the same as in Claude Code.
|
|
99
|
+
- `/chill-agent`: reports `PONYTAIL MODE ACTIVE — level: <level>` without changing
|
|
100
|
+
anything. `/chill-agent default <level>` persists the default to `config.json`.
|
|
101
|
+
- Any other prompt: no output.
|
|
102
|
+
|
|
103
|
+
### Coexistence with `.cursor/rules/chill-agent.mdc`
|
|
104
|
+
|
|
105
|
+
The always-on rule and the hooks are alternatives, not layers. The rule already
|
|
106
|
+
puts the compact ruleset in front of every prompt, and no hook can remove a rule
|
|
107
|
+
from context, so `off` cannot win against it and `lite` or `ultra` would
|
|
108
|
+
contradict it. While `<workspace>/.cursor/rules/chill-agent.mdc` exists (first
|
|
109
|
+
workspace root, from `CURSOR_PROJECT_DIR` or the working directory):
|
|
110
|
+
|
|
111
|
+
- `sessionStart` injects a one-line notice instead of the ruleset and leaves the
|
|
112
|
+
mode flag alone.
|
|
113
|
+
- `/chill-agent ...`, `stop chill-agent` and `normal mode` answer with the same notice
|
|
114
|
+
and change nothing.
|
|
115
|
+
|
|
116
|
+
Delete the rule to let the hooks manage the level. A project that keeps the rule
|
|
117
|
+
for teammates without hooks stays on the rule's fixed behavior for everyone.
|
|
118
|
+
|
|
119
|
+
## Limitations
|
|
120
|
+
|
|
121
|
+
- Subagents never receive the ruleset. `subagentStart` can only allow or deny,
|
|
122
|
+
and `preToolUse` `updated_input` on the `Task` tool would mean guessing the
|
|
123
|
+
undocumented shape of the subagent prompt. `PONYTAIL_SUBAGENT_MATCHER` has no
|
|
124
|
+
effect in Cursor.
|
|
125
|
+
- Cloud agents do not run `sessionStart` (documented), so there is no startup
|
|
126
|
+
injection there. Project-level `beforeSubmitPrompt` still runs, so `/chill-agent
|
|
127
|
+
<level>` sets the level for the rest of that conversation.
|
|
128
|
+
- `sessionStart` is fire-and-forget. A prompt sent within the first fraction of a
|
|
129
|
+
second of a new chat can leave before the context is attached.
|
|
130
|
+
- On Windows every hook run costs about a second, mostly PowerShell startup
|
|
131
|
+
(measured 1.05 to 1.3 s on 3.20.17). `beforeSubmitPrompt` is awaited, so each
|
|
132
|
+
prompt submission waits that long. macOS and Linux spawn the command directly
|
|
133
|
+
and pay only node startup.
|
|
134
|
+
- With `CLAUDE_PROJECT_DIR`, mode state is per project, stored in
|
|
135
|
+
`~/.cursor/chill-agent-modes/<sha256(normalized project dir)>`. Conversations in
|
|
136
|
+
the same project share that flag; different projects keep separate modes.
|
|
137
|
+
Without a project directory, the runtime uses `~/.cursor/.chill-agent-active`.
|
|
138
|
+
That shared flag is also maintained as a compatibility/statusline mirror
|
|
139
|
+
and follows the last mode change.
|
|
140
|
+
- The `beforeSubmitPrompt` injection field is not on the docs page. If a future
|
|
141
|
+
Cursor build drops it, level switches would still update the flag but nothing
|
|
142
|
+
would reach the model; only the startup injection would remain.
|
|
143
|
+
|
|
144
|
+
## Verification record
|
|
145
|
+
|
|
146
|
+
### Automated compatibility check
|
|
147
|
+
|
|
148
|
+
`node --test tests/cursor-hooks.test.js` feeds each hook the Cursor input shape
|
|
149
|
+
and asserts the output shape: template validity, `sessionStart` JSON and flag
|
|
150
|
+
placement, `off`, the Claude-plugin environment, every `/chill-agent` form on
|
|
151
|
+
`beforeSubmitPrompt`, silence on ordinary prompts, the rule-coexistence notice
|
|
152
|
+
from both `CURSOR_PROJECT_DIR` and the working directory, and the installer's
|
|
153
|
+
merge, idempotence, project scope, file removal and malformed-file refusal.
|
|
154
|
+
`tests/uninstall.test.js` covers the shared uninstall script.
|
|
155
|
+
|
|
156
|
+
### Client source check, Cursor 3.20.17 on Windows, 2026-09-14
|
|
157
|
+
|
|
158
|
+
Confirmed by reading the shipped client: the response validators for
|
|
159
|
+
`sessionStart` (`env`, `additional_context`), `beforeSubmitPrompt` (`continue`,
|
|
160
|
+
`user_message`, `additional_context`) and `subagentStart` (`permission`,
|
|
161
|
+
`user_message`); the persistence of `sessionStart` context on the conversation;
|
|
162
|
+
the submit path that injects the `beforeSubmitPrompt` context as a system
|
|
163
|
+
reminder with the 10,000-character inline cap; the PowerShell command wrapper and
|
|
164
|
+
the hook environment variables.
|
|
165
|
+
|
|
166
|
+
### Live session check
|
|
167
|
+
|
|
168
|
+
Run on 2026-09-14 with Cursor 3.20.17 on Windows 11, user-level hooks, model
|
|
169
|
+
`gpt-5.6-sol-high`; steps still open are marked in the table. Hook execution is
|
|
170
|
+
not delivery, so each step asks the model to quote the injected header. Record
|
|
171
|
+
the outcome in the table.
|
|
172
|
+
|
|
173
|
+
1. Install with `node scripts/cursor-hooks.js install`, make sure the workspace
|
|
174
|
+
has no `.cursor/rules/chill-agent.mdc`, open a new Agent chat.
|
|
175
|
+
2. Ask: "Quote the first line of any chill-agent context you were given." Expected:
|
|
176
|
+
`PONYTAIL MODE ACTIVE — level: full` (or the configured default).
|
|
177
|
+
3. Send `/chill-agent lite`, then ask: "Quote the first line of the most recent
|
|
178
|
+
chill-agent context." Expected: `PONYTAIL MODE CHANGED — level: lite`. Repeat
|
|
179
|
+
for `ultra`.
|
|
180
|
+
4. Send `/chill-agent off`, then ask the same question. Expected:
|
|
181
|
+
`PONYTAIL MODE OFF`.
|
|
182
|
+
5. Ask the agent to start an Explore subagent whose whole task is "Quote any
|
|
183
|
+
chill-agent instructions in your context, or say there are none." Expected:
|
|
184
|
+
none (documents the limitation; a quote would mean Cursor started forwarding
|
|
185
|
+
context to subagents and this doc needs updating).
|
|
186
|
+
6. Copy `.cursor/rules/chill-agent.mdc` into the workspace, open a new chat, repeat
|
|
187
|
+
step 2. Expected: the rule notice, starting with `PONYTAIL: the always-on
|
|
188
|
+
Cursor rule`.
|
|
189
|
+
|
|
190
|
+
| Step | Cursor version | Result | Date |
|
|
191
|
+
|------|----------------|--------|------|
|
|
192
|
+
| 2 startup injection | 3.20.17, Windows | pass. Hooks log: `sessionStart` response merged, flag written. Asked whether chill-agent was in place, the model answered that it is active as a hook at level full and named the exact off phrases from the injected Persistence section. | 2026-09-14 |
|
|
193
|
+
| 3 level switch | 3.20.17, Windows | pass. Cursor passed the literal `/chill-agent lite` to the hook; the hooks log shows the `continue: true` plus `additional_context` response merged and the flag flipped to `lite`. Asked to quote the first line of the most recent chill-agent context, the model answered `PONYTAIL MODE CHANGED — level: lite`, a string that exists only in the hook payload (the chill-agent skills were also installed under `~/.cursor/skills`, and their attached body starts with `# ChillAgent`). A follow-up date picker request got the lite behavior: build the wrapper, name the lazier alternative in one line. | 2026-09-14 |
|
|
194
|
+
| 4 off | 3.20.17, Windows | pass. Cursor passed the literal `/chill-agent off`; the hooks log shows `PONYTAIL MODE OFF` merged as the turn's context, the flag file was removed, and the model replied "ChillAgent mode is now off." Asked to quote the first line of the most recent chill-agent context, it answered `PONYTAIL MODE OFF`. | 2026-09-14 |
|
|
195
|
+
| 5 subagent | 3.20.17, Windows | not executed: asked to start an Explore subagent with the quoting task, the model declined ("I can't launch a subagent to extract or quote hidden instruction context") and no subagent ran. The limitation rests on the contract: the documented `subagentStart` output is `permission` and `user_message`, and the 3.20.17 client validates only those. | 2026-09-14 |
|
|
196
|
+
| 6 rule coexistence | | not yet run | |
|
|
197
|
+
|
|
198
|
+
A pass here shows the instructions reached the model at the supported points. It
|
|
199
|
+
says nothing about how often Cursor follows them; that needs a behavioral
|
|
200
|
+
comparison against the always-on rule, which this adapter does not claim.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# ChillAgent Examples & Empirical Diff Comparisons
|
|
2
|
+
|
|
3
|
+
This folder documents verbatim model outputs across benchmark runs comparing generic AI generation (bloat, slop, unnecessary dependencies) with **ChillAgent (Anti-Slop 2.0 + Ponytail)**.
|
|
4
|
+
|
|
5
|
+
## Categories
|
|
6
|
+
- **Logic & Minimalism:** CSV parsing, debounce, deep cloning, group by, URL parsing, rate limiting.
|
|
7
|
+
- **UI & Accessibility:** Modal dialogs, countdown timers, infinite scroll, typography contrast.
|
|
8
|
+
- **Visual & Copywriting:** Eliminating generic purple gradients and robotic marketing buzzwords.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Anti-Slop Copywriting Transformation
|
|
2
|
+
|
|
3
|
+
## AI Slop Copy (Banned)
|
|
4
|
+
> *"Unleash the revolutionary power of our cutting-edge AI debugger! Seamlessly supercharge your development workflow with next-generation intelligence. Trusted by 10,000+ happy developers across the globe! ✨"*
|
|
5
|
+
|
|
6
|
+
## ChillAgent Clean Copy (Approved)
|
|
7
|
+
> *"ChillRewind is a zero-dependency local proxy running on `node:sqlite` in WAL mode. It prunes stale tool outputs over 1.5KB and halts agent runs when the same tool signature repeats 3 consecutive times."*
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Anti-Slop UI Transformation
|
|
2
|
+
|
|
3
|
+
## The Generic AI Default (Rejected as Slop)
|
|
4
|
+
- Background: `bg-gradient-to-br from-indigo-500 via-purple-500 to-pink-500`
|
|
5
|
+
- Card: `rounded-3xl shadow-2xl backdrop-blur-xl p-8 bg-white/10`
|
|
6
|
+
- Button: Pill-shaped glowing cyan bubble with rocket emoji `🚀`
|
|
7
|
+
- Heading: *"Unleash the Power of Next-Gen AI"*
|
|
8
|
+
|
|
9
|
+
## The ChillAgent Standard (Accepted High-Craft)
|
|
10
|
+
- Background: Deep obsidian carbon `#09090B`
|
|
11
|
+
- Card: Monochromatic surface `#111114` with 1px hairline border `#26262E` and 8px radius
|
|
12
|
+
- Numbers: Tabular monospace font `JetBrains Mono`
|
|
13
|
+
- Accent: Single semantic indicator (Emerald `#10B981` for active status)
|
|
14
|
+
- Heading: Direct domain statement: *"Deterministic time-travel debugger for AI agents."*
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# CSV Sum
|
|
2
|
+
|
|
3
|
+
**Task:** "Write Python code that reads sales.csv and sums the 'amount' column."
|
|
4
|
+
|
|
5
|
+
## Without ChillAgent (20 lines, 1 heavy dependency)
|
|
6
|
+
```python
|
|
7
|
+
import pandas as pd
|
|
8
|
+
|
|
9
|
+
# Read the CSV file into a DataFrame
|
|
10
|
+
df = pd.read_csv('sales.csv')
|
|
11
|
+
|
|
12
|
+
# Sum the amount column
|
|
13
|
+
total_amount = df['amount'].sum()
|
|
14
|
+
|
|
15
|
+
# Print the result
|
|
16
|
+
print(f"Total sales amount: {total_amount}")
|
|
17
|
+
```
|
|
18
|
+
*Bloat:* Forces 35MB `pandas` dependency for a simple column sum.
|
|
19
|
+
|
|
20
|
+
## With ChillAgent (4 lines, 0 dependencies)
|
|
21
|
+
```python
|
|
22
|
+
import csv
|
|
23
|
+
|
|
24
|
+
with open('sales.csv') as f:
|
|
25
|
+
print(sum(float(row['amount']) for row in csv.DictReader(f)))
|
|
26
|
+
```
|
|
27
|
+
*Result:* 0 dependencies, instant execution, standard library only.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Debounce Utility
|
|
2
|
+
|
|
3
|
+
**Task:** "Write a debounce function in TypeScript."
|
|
4
|
+
|
|
5
|
+
## Without ChillAgent (25 lines + lodash dependency)
|
|
6
|
+
```typescript
|
|
7
|
+
import debounce from 'lodash/debounce';
|
|
8
|
+
export const debouncedSearch = debounce((query: string) => {
|
|
9
|
+
api.search(query);
|
|
10
|
+
}, 300);
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## With ChillAgent (6 lines, standard native timer)
|
|
14
|
+
```typescript
|
|
15
|
+
export function debounce<T extends (...args: any[]) => void>(fn: T, ms = 300) {
|
|
16
|
+
let timer: ReturnType<typeof setTimeout>;
|
|
17
|
+
return (...args: Parameters<T>) => {
|
|
18
|
+
clearTimeout(timer);
|
|
19
|
+
timer = setTimeout(() => fn(...args), ms);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Deep Clone
|
|
2
|
+
|
|
3
|
+
**Task:** "Deep clone a JavaScript object in Node 18+."
|
|
4
|
+
|
|
5
|
+
## Without ChillAgent
|
|
6
|
+
```javascript
|
|
7
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
8
|
+
const copy = cloneDeep(source);
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## With ChillAgent (1 line native standard library)
|
|
12
|
+
```javascript
|
|
13
|
+
const copy = structuredClone(source);
|
|
14
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Modal Dialog Component
|
|
2
|
+
|
|
3
|
+
**Task:** "Create an accessible modal dialog in vanilla HTML/CSS/JS."
|
|
4
|
+
|
|
5
|
+
## Without ChillAgent (120 lines, custom backdrop, custom focus trap, custom scroll locks)
|
|
6
|
+
Manual z-index soup, forgotten Escape key handlers, broken keyboard traps.
|
|
7
|
+
|
|
8
|
+
## With ChillAgent (12 lines using native HTML <dialog>)
|
|
9
|
+
```html
|
|
10
|
+
<dialog id="confirmModal" style="border: 1px solid #26262E; border-radius: 8px; background: #111114; color: #F4F4F6; padding: 20px;">
|
|
11
|
+
<form method="dialog">
|
|
12
|
+
<p>Confirm irreversible session fork?</p>
|
|
13
|
+
<button value="cancel">Cancel</button>
|
|
14
|
+
<button value="confirm" style="background: #818CF8; color: #09090B;">Fork</button>
|
|
15
|
+
</form>
|
|
16
|
+
</dialog>
|
|
17
|
+
<button onclick="document.getElementById('confirmModal').showModal()">Open</button>
|
|
18
|
+
```
|
|
19
|
+
*Features:* Built-in backdrop, native Escape key closing, native focus trapping, zero external libraries.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// chill-agent SessionStart activation hook
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
|
|
7
|
+
const home = os.homedir();
|
|
8
|
+
const flagPath = path.join(home, '.chill-agent-active');
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
fs.writeFileSync(flagPath, JSON.stringify({
|
|
12
|
+
active: true,
|
|
13
|
+
mode: 'full',
|
|
14
|
+
timestamp: Date.now()
|
|
15
|
+
}), 'utf8');
|
|
16
|
+
|
|
17
|
+
// Emit compact active notice
|
|
18
|
+
process.stdout.write('[chill-agent active: full (ponytail + anti-slop dual core)]\n');
|
|
19
|
+
} catch {}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// chill-agent Mode Tracker Hook: detects /chill [lite|full|ultra|off]
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
|
|
7
|
+
const home = os.homedir();
|
|
8
|
+
const flagPath = path.join(home, '.chill-agent-active');
|
|
9
|
+
|
|
10
|
+
const prompt = process.argv.slice(2).join(' ');
|
|
11
|
+
const match = prompt.match(/\/chill\s+(lite|full|ultra|off)/i);
|
|
12
|
+
|
|
13
|
+
if (match) {
|
|
14
|
+
const newMode = match[1].toLowerCase();
|
|
15
|
+
try {
|
|
16
|
+
fs.writeFileSync(flagPath, JSON.stringify({
|
|
17
|
+
active: newMode !== 'off',
|
|
18
|
+
mode: newMode,
|
|
19
|
+
timestamp: Date.now()
|
|
20
|
+
}), 'utf8');
|
|
21
|
+
process.stderr.write(`[chill-agent mode switched to: ${newMode}]\n`);
|
|
22
|
+
} catch {}
|
|
23
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# chill-agent PowerShell statusline indicator
|
|
2
|
+
$flag = Join-Path $HOME ".chill-agent-active"
|
|
3
|
+
if (Test-Path $flag) {
|
|
4
|
+
try {
|
|
5
|
+
$data = Get-Content $flag | ConvertFrom-Json
|
|
6
|
+
if ($data.active) {
|
|
7
|
+
Write-Host " ◷ chill:$($data.mode) " -ForegroundColor Black -BackgroundColor Cyan -NoNewline
|
|
8
|
+
}
|
|
9
|
+
} catch {}
|
|
10
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# chill-agent bash/zsh statusline indicator
|
|
3
|
+
FLAG="$HOME/.chill-agent-active"
|
|
4
|
+
if [ -f "$FLAG" ]; then
|
|
5
|
+
MODE=$(grep -o '"mode":"[^"]*' "$FLAG" | cut -d'"' -f4)
|
|
6
|
+
if [ -n "$MODE" ] && [ "$MODE" != "off" ]; then
|
|
7
|
+
printf "\033[48;5;81;30m ◷ chill:%s \033[0m" "$MODE"
|
|
8
|
+
fi
|
|
9
|
+
fi
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"hooks": {
|
|
4
|
+
"sessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"command": "node \"./hooks/chill-activate.js\"",
|
|
7
|
+
"timeout": 15
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"beforeSubmitPrompt": [
|
|
11
|
+
{
|
|
12
|
+
"command": "node \"./hooks/chill-mode-tracker.js\"",
|
|
13
|
+
"timeout": 15
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ChillAgent (Español)
|
|
2
|
+
|
|
3
|
+
> **Motor Anti-Slop 2.0 y Estándar de Desarrollador Senior Pragmático para Agentes de IA.**
|
|
4
|
+
> Combina la artesanía visual de [anti-slop](https://github.com/miqdadbadjuber/anti-slop) con el minimalismo YAGNI de [ponytail](https://github.com/dietrichgebert/ponytail).
|
|
5
|
+
|
|
6
|
+
## Inicio Rápido
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# Asistente interactivo
|
|
10
|
+
npx chill-agent@latest
|
|
11
|
+
|
|
12
|
+
# Auditoría de código
|
|
13
|
+
npx chill-agent@latest audit
|
|
14
|
+
|
|
15
|
+
# Reparación automática
|
|
16
|
+
npx chill-agent@latest audit --fix
|
|
17
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# ChillAgent (Bahasa Indonesia)
|
|
2
|
+
|
|
3
|
+
> **Mesin Anti-Slop 2.0 & Standar Senior Developer Pragmatis untuk Coding Agent AI.**
|
|
4
|
+
> Menggabungkan ketelitian visual bebas-slop dari [anti-slop](https://github.com/miqdadbadjuber/anti-slop) dengan prinsip minimalis YAGNI tanpa kompromi dari [ponytail](https://github.com/dietrichgebert/ponytail).
|
|
5
|
+
|
|
6
|
+
## Perintah Cepat
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# Jalankan wizard interaktif langsung
|
|
10
|
+
npx chill-agent@latest
|
|
11
|
+
|
|
12
|
+
# Audit file dari gradien ungu, card mengambang & copy klise
|
|
13
|
+
npx chill-agent@latest audit
|
|
14
|
+
|
|
15
|
+
# Otomatis bersihkan kode dari AI slop
|
|
16
|
+
npx chill-agent@latest audit --fix
|
|
17
|
+
|
|
18
|
+
# Buat panduan desain kelas Linear
|
|
19
|
+
npx chill-agent@latest init-design
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Prinsip Inti
|
|
23
|
+
1. **The Smallest Complete Change:** Gunakan native platform dan standard library sebelum menambah dependensi eksternal.
|
|
24
|
+
2. **The Purpose Test:** Setiap gradien, warna, atau layout harus memiliki fungsi domain yang jelas. AI defaults (gradien ungu, rounded-3xl) dilarang.
|
|
25
|
+
3. **Delivery Disclosure:** Di akhir setiap jawaban teknis, sebutkan apa yang sengaja di-skip dan batas trade-off kode.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ChillAgent (日本語)
|
|
2
|
+
|
|
3
|
+
> **AIコーディングエージェントのためのAnti-Slop 2.0エンジン & プラグマティックシニア開発者標準**
|
|
4
|
+
> [anti-slop](https://github.com/miqdadbadjuber/anti-slop) の視覚的クラフトマンシップと [ponytail](https://github.com/dietrichgebert/ponytail) のミニマリズム(YAGNI)を統合。
|
|
5
|
+
|
|
6
|
+
## コマンド
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# 対話型ウィザード
|
|
10
|
+
npx chill-agent@latest
|
|
11
|
+
|
|
12
|
+
# スロップの監査
|
|
13
|
+
npx chill-agent@latest audit
|
|
14
|
+
|
|
15
|
+
# 自動修復
|
|
16
|
+
npx chill-agent@latest audit --fix
|
|
17
|
+
```
|