intellectronica/ruler

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/intellectronica--ruler.svg).

agent-harness

Works

README claims checked out on 2 recorded setups. Combinations not listed here were not tested.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 23, 2026 · 3c0520f36234 · claude-code / 2.1.300 (Claude Code)
Recorded operation: /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude

Linux / Luna: yes · Oct 23, 2026 · 3c0520f36234 · codex / codex-cli 0.163.0
Recorded operation: npx -y -p [email protected] node dist/cli/index.js apply --project-root <guest-path> --agents copilot --no-gitignore

Does what it says
1 of 1 claims checked out
  • Ruler applies rules to configuration files of supported AI agents.: Real input produced the expected result: Applying rules for GitHub Copilot

    Source: Ruler applies these rules to configuration files of supported AI agents

    Input: demo/.ruler/AGENTS.md

    Expected: Applying rules for GitHub Copilot

    Command: npx -y -p [email protected] node dist/cli/index.js apply --project-root <guest-path> --agents copilot --no-gitignore

    Observed: Applying rules for GitHub Copilot... Ruler apply completed successfully. (node:8735) ExperimentalWarning: CommonJS module <guest-path> is loading ES Module <guest-path> using require(). Support for loading ES Module in require() is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created)

MCP
Documented only
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Slow
slow: last commit 1 days ago; 42 commits and 22 merged PRs in 90 days; 11 open issues, 8 open PRs; 0 of 5 recent threads got a maintainer reply; latest release 2026-10-22

Last commit Oct 22, 2026

Setup time
8 min 32 s
8 min 32 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Initialize Ruler configuration: command completed successfully

    Source: README.md / Getting Started / Project Initialisation

    Input: demo project

    Expected: Created .ruler/AGENTS.md and .ruler/ruler.toml

    Command: npx -y -p [email protected] node dist/cli/index.js init --project-root <guest-path>

    Observed: [ruler] AGENTS.md already exists, skipping [ruler] ruler.toml already exists, skipping (node:8763) ExperimentalWarning: CommonJS module <guest-path> is loading ES Module <guest-path> using require(). Support for loading ES Module in require() is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created)

Evidence
README behavior checked
Agent interfaces
CLI, MCP (documented only)
CLI, MCP (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Codex / Luna
  • Linux: Codex / Luna · agent codex-cli 0.163.0 · Checked operation passed · Oct 23, 2026 on 3c0520f36234

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety. 30 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

OSV reports a known vulnerability in this dependency version. 7 distinct locations. 15 findings.

Reviewed as expected for a test run: tests pointed at /nonexistent, a folder that does not exist, so nothing could be written.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude

Agent-reported scope: Install ruler from the pinned source and run `ruler apply` to distribute .ruler rules into a Claude Code config (CLAUDE.md), plus `--dry-run`.

Run details
run
intellectronica--ruler-claude-haiku-5-5-1792789946579777841
date
Oct 23, 2026
time to working
411.6s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.015153
Recorded source
https://github.com/intellectronica/ruler
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "3c0520f36234ba646c0d612bd363d010b2beab20", "url": "https://github.com/intellectronica/ruler"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
3c0520f36234ba646c0d612bd363d010b2beab20
Whose fault: not assigned · resolved

Safety: Review signals: 15 known vulnerability.

Review signals: 15 known vulnerability.

Reviewed as expected for a test run: tests pointed at /nonexistent, a folder that does not exist, so nothing could be written.

OSV reports a known vulnerability in this dependency version. 7 distinct locations. 15 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Ruler applies centralised .ruler rules to a supported agent's config file (Claude Code): Real input produced the expected result: Applying rules for Claude Code

    Source: - **Automatic Distribution**: Ruler applies these rules to configuration files of supported AI agents

    Input: ruler apply --agents claude on a project with .ruler/ rules

    Expected: output reports applying rules for Claude Code

    Command: /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude

    Observed: Applying rules for Claude Code... [ruler] Updated .gitignore with 2 unique path(s) in the Ruler block. Ruler apply completed successfully.

  • Rules are stored centrally in a .ruler/ directory as Markdown files: Real input produced the expected result: Ruler apply completed successfully.

    Source: **Centralised Rule Management**: Store all AI instructions in a dedicated `.ruler/` directory using Markdown files

    Input: ruler apply --agents claude against .ruler/testing.md containing a marker phrase

    Expected: generated CLAUDE.md is produced from .ruler contents (apply completes successfully)

    Command: /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude

    Observed: Ruler apply completed successfully.

Examples

  • --dry-run previews apply changes without writing files: command completed successfully

    Source: README.md Options table (--dry-run: Preview changes without writing files.)

    Input: ruler apply --dry-run --agents claude on /tmp/ruler-demo

    Expected: prints a dry-run line for Claude Code

    Command: /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude --dry-run

    Observed: [ruler:dry-run] Applying rules for Claude Code... [ruler:dry-run] Would update .gitignore with 2 unique path(s): /tmp/ruler-demo/CLAUDE.md, /tmp/ruler-demo/CLAUDE.md.bak Ruler apply completed successfully.

Local or hosted: local

What the agent did

Install ruler from the pinned source and run `ruler apply` to distribute .ruler rules into a Claude Code config (CLAUDE.md), plus `--dry-run`.

cd <guest-path> && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat /etc/os-release | head -2; ls /inputs 2>&1
cd <guest-path> && cat README.md | head -300
cd <guest-path> && (node -v; npm -v) 2>&1; grep -n '"node"\|engines' -A3 package.json | head; sed -n 300,600p README.md | grep -n '^#\|```' | head -80
cd <guest-path> && sudo -n true && echo SUDO_OK; (apt-cache policy nodejs | head -3); curl -sI https://nodejs.org/dist/index.json | head -1; env | grep -i proxy | sed 's/=.*@/=***@/'; git --version
set -e; export NODE_USE_ENV_PROXY=1; cd /tmp && curl -fsSL https://nodejs.org/dist/latest-v22.x/SHASUMS256.txt -o shasums.txt && F=$(grep -o 'node-v22[0-9.]*-linux-x64.tar.xz' shasums.txt | head -1) && echo $F && curl -fsSL https://nodejs.org/dist/latest-v22.x/$F -o $F && grep " $F\$" shasums.txt | sha256sum -c - && mkdir -p /tmp/node && tar -xJf $F -C /tmp/node --strip-components=1 && /tmp/node/bin/node -v && /tmp/node/bin/npm -v
cd <guest-path> && export PATH=/tmp/node/bin:$PATH && git init -q && git remote add origin https://github.com/intellectronica/ruler && git fetch --depth 1 origin 3c0520f36234ba646c0d612bd363d010b2beab20 && git reset --mixed FETCH_HEAD && git log --oneline -1 && git status --short | head; echo ---; npm -v && npm ci 2>&1 | tail -5 && npm run build 2>&1 | tail -5; ls dist | head -3
cd <guest-path> && grep -n '"bin"' -A3 package.json; grep -n -i 'develop\|npm run\|npm test\|npm install\|contribut' README.md | head -30; grep -n '"scripts"' -A15 package.json
cd <guest-path> && export PATH=/tmp/node/bin:$PATH && npm install -g --prefix /tmp/rulerprefix . 2>&1 | tail -3 && /tmp/rulerprefix/bin/ruler --version; echo "rc=$?"; (timeout 900 npm test 2>&1 | grep -E 'Tests:|Test Suites:|FAIL' | head -20); echo "test_rc=${PIPESTATUS[0]}"
cd <guest-path> && grep -n -i 'telemetry\|consent\|analytics' README.md | head; grep -rn -i 'telemetry' src | head -3; sed -n 1,400p README.md | grep -n 'ruler init\|ruler apply' | head -20
mkdir -p /tmp/ruler-demo && cd /tmp/ruler-demo && /tmp/rulerprefix/bin/ruler init 2>&1 | tail -5; ls -la .ruler; echo ---; cat .ruler/ruler.toml | head -30
export PATH=/tmp/node/bin:$PATH; cd /tmp/ruler-demo && /tmp/rulerprefix/bin/ruler init 2>&1 | tail -5; ls -la .ruler; echo ---; cat .ruler/AGENTS.md | head -20; echo ---; cat .ruler/ruler.toml | head -40
export PATH=/tmp/node/bin:$PATH; cd /tmp/ruler-demo && echo 'Always write unit tests for new functions. MARKER-ALPHA-7731' > .ruler/testing.md && /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude 2>&1; echo "rc=$?"; echo ---; cat CLAUDE.md; echo ---; cat .gitignore 2>/dev/null | tail -5
export PATH=/tmp/node/bin:$PATH; cd <guest-path> && grep -rn -i 'setInterval\|cron\|--watch\|webhook\|schedul' src README.md | head; echo ---DRY; cd /tmp/ruler-demo && /tmp/rulerprefix/bin/ruler apply --project-root /tmp/ruler-demo --agents claude --dry-run 2>&1; echo "rc=$?"; echo ---REVERT; /tmp/rulerprefix/bin/ruler revert --project-root /tmp/ruler-demo --agents claude 2>&1; echo "rc=$?"; ls -la /tmp/ruler-demo
export PATH=/tmp/node/bin:$PATH; cd <guest-path> && grep -n -F -- '- **Automatic Distribution**: Ruler applies these rules to configuration files of supported AI agents' README.md && grep -n -F -- '- **`.ruler/` Directory**' README.md | head -2; grep -n -F -- '**Centralised Rule Management**: Store all AI instructions in a dedicated `.ruler/` directory using Markdown files' README.md; grep -c 'Preview changes without writing files' README.md
ENVP='{"PATH":"/tmp/node/bin:/usr/local/bin:/usr/bin:/bin"}'
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["/tmp/rulerprefix/bin/ruler","apply","--project-root","/tmp/ruler-demo","--agents","claude"],"cwd":"/tmp/ruler-demo","env":{"PATH":"/tmp/node/bin:/usr/local/bin:/usr/bin:/bin"},"expected_text":"Ruler apply completed successfully."}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Ruler applies centralised .ruler rules to a supported agent's config file (Claude Code)","source":"- **Automatic Distribution**: Ruler applies these rules to configuration files of supported AI agents","input":"ruler apply --agents claude on a project with .ruler/ rules","expected":"output reports applying rules for Claude Code","probe_kind":"cli","argv":["/tmp/rulerprefix/bin/ruler","apply","--project-root","/tmp/ruler-demo","--agents","claude"],"cwd":"/tmp/ruler-demo","env":{"PATH":"/tmp/node/bin:/usr/local/bin:/usr/bin:/bin"},"expected_text":"Applying rules for Claude Code"},
{"kind":"claim","claim":"Rules are stored centrally in a .ruler/ directory as Markdown files","source":"**Centralised Rule Management**: Store all AI instructions in a dedicated `.ruler/` directory using Markdown files","input":"ruler apply --agents claude against .ruler/testing.md containing a marker phrase","expected":"generated CLAUDE.md is produced from .ruler contents (apply completes successfully)","probe_kind":"cli","argv":["/tmp/rulerprefix/bin/ruler","apply","--project-root","/tmp/ruler-demo","--agents","claude"],"cwd":"/tmp/ruler-demo","env":{"PATH":"/tmp/node/bin:/usr/local/bin:/usr/bin:/bin"},"expected_text":"Ruler apply completed successfully."}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"--dry-run previews apply changes without writing files","source":"README.md Options table (--dry-run: Preview changes without writing files.)","input":"ruler apply --dry-run --agents claude on /tmp/ruler-demo","expected":"prints a dry-run line for Claude Code","argv":["/tmp/rulerprefix/bin/ruler","apply","--project-root","/tmp/ruler-demo","--agents","claude","--dry-run"],"cwd":"/tmp/ruler-demo","env":{"PATH":"/tmp/node/bin:/usr/local/bin:/usr/bin:/bin"},"expected_text":"[ruler:dry-run] Applying rules for Claude Code..."}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected package.json bin (dist/cli/index.js), README usage/commands, and src for setInterval, cron, --watch, webhook or scheduling code: none found. ruler is a one-shot CLI (init/apply/revert); it runs once per invocation and does not loop or schedule itself.","checks":[]}
EOF
python3 -I -c "import json;[json.load(open('.coldpass/'+f)) for f in ['probe.json','claims.json','examples.json','cycles.json']];print('json ok')"
export PATH=/tmp/node/bin:$PATH; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -60; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Install ruler from the pinned source and run `ruler apply` to distribute .ruler rules into a Claude Code config (CLAUDE.md), plus `--dry-run`.","operation_scope":"Linux Ubuntu 24.04 guest, Node 22.23.4 (README requires ^20.19.0 || ^22.12.0 || >=23), npm 10.9.9, Python 3.12.3 (not needed by the product; used only for JSON checks). Local CLI only; no browser, no credentials, no network services started. Test project at /tmp/ruler-demo (outside the checkout).","steps":["git init; git remote add origin https://github.com/intellectronica/ruler; git fetch --depth 1 origin 3c0520f36234ba646c0d612bd363d010b2beab20; git reset --mixed FETCH_HEAD","npm ci (README Development section: npm install)","npm run build","npm install -g --prefix /tmp/rulerprefix .  (local build, bin: ruler)","npm test  -> 163 suites, 1337 tests passed (setup only)","ruler init (in /tmp/ruler-demo)","ruler apply --project-root /tmp/ruler-demo --agents claude","ruler apply --dry-run --agents claude","ruler revert --agents claude (check only; generated CLAUDE.md removed)"],"deviations":["Node/npm were not installed in the guest. Installed Node 22.23.4 from the official nodejs.org linux-x64 tarball into /tmp/node (user-local, SHA256 verified against SHASUMS256.txt). No apt/system install was used.","npm install -g used a user prefix (/tmp/rulerprefix) with the local build instead of a system-wide global install.","The first `ruler init` attempt failed with `/usr/bin/env: node: No such file or directory` because the installed bin shebang needs node on PATH; fixed by putting /tmp/node/bin on PATH (probe/claims set env PATH accordingly).","Node installer telemetry/consent prompts: none exist in this README or source (grep for telemetry/consent/analytics found nothing)."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -I -c "import json;print(json.load(open('.coldpass/report.json'))['outcome'])"; ls -la .coldpass; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c "import json,sys;d=json.loads(sys.stdin.read());print('valid',d['valid'],'problems',d['problems'],'replay',d['replay']['status'])"
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation npx -y -p [email protected] node dist/cli/index.js apply --project-root <guest-path> --agents copilot --no-gitignore

Agent-reported scope: Initialize and apply agent rules using Ruler CLI

Run details
run
intellectronica--ruler-gpt-6-luna-1792813710638301803
date
Oct 23, 2026
time to working
511.6s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/intellectronica/ruler
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "3c0520f36234ba646c0d612bd363d010b2beab20", "url": "https://github.com/intellectronica/ruler"}
Test version
readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf
revision
3c0520f36234ba646c0d612bd363d010b2beab20
Whose fault: not assigned · resolved

Double-checks failed run: intellectronica--ruler-gpt-6-luna-1792807766802749644.

Safety: Review signals: 15 known vulnerability.

Review signals: 15 known vulnerability.

OSV reports a known vulnerability in this dependency version. 7 distinct locations. 15 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Ruler applies rules to configuration files of supported AI agents.: Real input produced the expected result: Applying rules for GitHub Copilot

    Source: Ruler applies these rules to configuration files of supported AI agents

    Input: demo/.ruler/AGENTS.md

    Expected: Applying rules for GitHub Copilot

    Command: npx -y -p [email protected] node dist/cli/index.js apply --project-root <guest-path> --agents copilot --no-gitignore

    Observed: Applying rules for GitHub Copilot... Ruler apply completed successfully. (node:8735) ExperimentalWarning: CommonJS module <guest-path> is loading ES Module <guest-path> using require(). Support for loading ES Module in require() is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created)

Examples

  • Initialize Ruler configuration: command completed successfully

    Source: README.md / Getting Started / Project Initialisation

    Input: demo project

    Expected: Created .ruler/AGENTS.md and .ruler/ruler.toml

    Command: npx -y -p [email protected] node dist/cli/index.js init --project-root <guest-path>

    Observed: [ruler] AGENTS.md already exists, skipping [ruler] ruler.toml already exists, skipping (node:8763) ExperimentalWarning: CommonJS module <guest-path> is loading ES Module <guest-path> using require(). Support for loading ES Module in require() is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created)

Local or hosted: local

What the agent did

Initialize and apply agent rules using Ruler CLI

cd <guest-path> && (vault-search 'intellectronica ruler MCP README setup' || true) && (cat <host-path> 2>/dev/null || true) && (cat ~/.agents/skills/i-have-adhd/SKILL.md 2>/dev/null || true) && (cat ~/.agents/skills/ponytail/SKILL.md 2>/dev/null || true) && (cat ~/.agents/skills/p3-mode/SKILL.md 2>/dev/null || true) && rg --files -g 'README*' -g 'AGENTS.md' -g 'package.json' -g 'pyproject.toml' -g 'Makefile' | head -80 && git status --short --branch && id -u && python3 --version && python3 -m pip --version
cd <guest-path> && find . -maxdepth 2 -type f | head -100; cat README.md; id -u; python3 --version; python3 -m pip --version; ls -la
cd <guest-path> && cat AGENTS.md && node --version; npm --version; cat package.json; ls -la .coldpass; which node npm; git init && git remote add origin https://github.com/intellectronica/ruler && git fetch --depth 1 origin 3c0520f36234ba646c0d612bd363d010b2beab20 && git reset --mixed FETCH_HEAD && npm install && npm run build
sudo -n apt-get update && sudo -n apt-get install -y nodejs npm && node --version && npm --version
cd <guest-path> && NODE_USE_ENV_PROXY=1 npx -y [email protected] --version
cd <guest-path> && NODE_USE_ENV_PROXY=1 npx -y -p [email protected] -p [email protected] npm install && NODE_USE_ENV_PROXY=1 npx -y -p [email protected] -p [email protected] npm run build && NODE_USE_ENV_PROXY=1 npx -y -p [email protected] -p [email protected] npm exec -- ruler init --project-root <guest-path> && NODE_USE_ENV_PROXY=1 npx -y -p [email protected] -p [email protected] npm exec -- ruler apply --project-root <guest-path> --agents copilot --no-gitignore
cd <guest-path> && sed -n '1,90p' src/cli/index.ts 2>/dev/null; find src/cli -type f; sed -n '1,160p' src/cli/commands/init.ts
cd <guest-path> && mkdir -p demo && ./dist/cli/index.js init --project-root demo && ./dist/cli/index.js apply --project-root demo --agents copilot --no-gitignore; find demo -maxdepth 3 -type f -print; sed -n '1,40p' demo/AGENTS.md
cd <guest-path> && NODE_USE_ENV_PROXY=1 npx -y -p [email protected] node dist/cli/index.js init --project-root <guest-path>; NODE_USE_ENV_PROXY=1 npx -y -p [email protected] node dist/cli/index.js apply --project-root <guest-path> --agents copilot --no-gitignore; cat .coldpass/* 2>/dev/null
cd <guest-path> && python3 - <<'PY'
import json,os
p='.coldpass'; os.makedirs(p,exist_ok=True)
json.dump({'kind':'cli','argv':['npx','-y','-p','[email protected]','node','dist/cli/index.js','apply','--project-root','<guest-path>','--agents','copilot','--no-gitignore'],'cwd':'<guest-path>','expected_text':'Applying rules for GitHub Copilot'},open(p+'/probe.json','w'),indent=2)
json.dump([{'kind':'claim','claim':'Ruler applies rules to configuration files of supported AI agents.','source':'Ruler applies these rules to configuration files of supported AI agents','input':'demo/.ruler/AGENTS.md','expected':'Applying rules for GitHub Copilot','probe_kind':'cli','argv':['npx','-y','-p','[email protected]','node','dist/cli/index.js','apply','--project-root','<guest-path>','--agents','copilot','--no-gitignore'],'expected_text':'Applying rules for GitHub Copilot','cwd':'<guest-path>'}],open(p+'/claims.json','w'),indent=2)
json.dump({'detected':False,'reason':'README entry points provide init/apply/revert commands; no product scheduler or cycle mechanism found.','checks':[]},open(p+'/cycles.json','w'),indent=2)
json.dump([{'kind':'example','claim':'Initialize Ruler configuration','source':'README.md / Getting Started / Project Initialisation','input':'demo project','expected':'Created .ruler/AGENTS.md and .ruler/ruler.toml','argv':['npx','-y','-p','[email protected]','node','dist/cli/index.js','init','--project-root','<guest-path>'],'cwd':'<guest-path>','expected_text':'Created <guest-path>'}],open(p+'/examples.json','w'),indent=2)
json.dump({'outcome':'working','fault_owner':None,'operation':'Initialize and apply agent rules using Ruler CLI','operation_scope':'Node.js 22.12.0 via npx; npm dependencies installed; built from pinned source','steps':['npm install','npm run build','ruler init --project-root demo','ruler apply --project-root demo --agents copilot --no-gitignore'],'deviations':['Ubuntu packaged Node 18.19.1 was below README requirement; used npx [email protected] at runtime.','Global npm install not used; local documented build produces CLI at dist/cli/index.js.'],'stuck_step':None,'main_blocker':None,'plain_failure':None,'suggested_fix':None},open(p+'/report.json','w'),indent=2)
PY
NODE_USE_ENV_PROXY=1 npx -y -p [email protected] node dist/cli/index.js init --project-root <guest-path>; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay