OpenClaw Hermes

Phase 0 reference audit · forgeapps monorepo + ForgeBot · generated 2026-06-26

Bottom line

ForgeBot already runs on Hermes. On this Mac (forgebot-mini) OpenClaw is not installed and no gateway runs on it; Hermes is the live harness and already self-prunes OpenClaw residue. The hard runtime cutover is done.

What remains is decoupling the repo's naming, paths and conventions from OpenClaw (Scope A) plus, for a literal 100%, migrating AdamoBot's runtime off OpenClaw on its own Windows host (Scope B).

950
Files w/ refs
6,223
Ref lines
678
Actionable files
74
Live-functional (Scope A worklist)

Footprint by disposition

Each file is bucketed once by migration disposition. live-functional is the real work; historical-log is left untouched.

BucketFilesLinesDisposition
historical-log2721887Run-logs / archives / memory — never rewrite (Documentation principle). Excluded from the worklist.
persona-source71296.openclaw/workspace/ identity + config tree — Phase 1 move target (live persona files + memory).
path-config2112197Config/manifest files and ~/.openclaw path constants — Phase 2 (re-test Slack media after).
adamobot-only138972AdamoBot / clawdbot surface — keep working until Scope B (AdamoBot runtime migration).
live-functional74208Live ForgeBot code, skills, and routines — the primary Scope A worklist.
other-doc184663Remaining prose mentions — triage case-by-case.

Live-functional worklist · 74 files

The actual ForgeBot code, skills, and routine scripts coupled to OpenClaw. Expand any file to see its matching lines. Highest-value targets: the forgebotmini-maintenance routine (ForgeBot's own host) and the dashboard gateway-origin pages.

.claude/skills/testing/subskills/screenshot/SUBSKILL.md20
30**Default to `profile="openclaw"`**. It is always running on port 18800. No extension needed.
34browser action=navigate profile=openclaw targetUrl=https://example.com
35browser action=screenshot profile=openclaw
38browser action=screenshot profile=openclaw targetUrl=https://example.com
44| `openclaw` | 18800 | No logins (isolated browser) | **DEFAULT.** Public pages, production verification, any URL that doesn't need auth |
2221. **Navigate** to the URL with `browser` tool, `profile="openclaw"`
244| "Extension not connected" | You're using `profile="chrome"`. Switch to `profile="openclaw"`. |
246| openclaw browser not running | `browser action=start profile=openclaw` |
253The `openclaw` browser has no logins. For authenticated pages:
262- **NEVER** default to `profile="chrome"` use `openclaw` first.
323browser action=act profile=openclaw request={"kind":"resize","width":1920,"height":1080}
329browser action=navigate profile=openclaw targetUrl=https://jd.forgefx.dev/demos/forgeview-XXX-rNN/
338browser action=screenshot profile=openclaw
380browser action=act profile=openclaw request={"kind":"resize","width":1920,"height":1080}
381browser action=navigate profile=openclaw targetUrl=https://jd.forgefx.dev/demos/forgeview-XXX-rNN/
383browser action=screenshot profile=openclaw
407- openclaw browser (port 18800) is always running. This is the golden path.
414If the openclaw browser needs gateway auth (e.g. "unauthorized: gateway token missing"):
4172. Open: `browser action=navigate profile=openclaw targetUrl=http://127.0.0.1:18789/overview`
425- 2026-02-16: Complete rewrite. Three methods documented. openclaw browser as default. Auth strategy. General-purpose, not just ForgeView.
crons/routines/adamobook-maintenance/scripts/publish-supabase.test.ts14
14probeOpenclaw,
72openclaw: { status: 'degraded', failing: ['slack'], uptime_ms: 1234, log_age_min: 12.3 },
73openclawModel: { model: 'claude-cli/sonnet', alias: 'sonnet', fallbacks: ['fallback'] },
89assert.equal(payload.openclaw_status, 'degraded');
125const older = join(dir, 'openclaw-2026-06-02.log');
126const newer = join(dir, 'openclaw-2026-06-03.log');
139assert.match(resolveGatewayLog(join(dir, 'does-not-exist')), /\.openclaw[/\\]logs[/\\]gateway\.log$/);
177test('probeOpenclaw: connection-refused /ready with a FRESH live log reads degraded (restarting), not offline', async () => {
181const logPath = join(dir, 'openclaw-2026-06-04.log');
190const result = await probeOpenclaw({ baseUrl: 'http://127.0.0.1:18789', logPath, nowMs });
200test('probeOpenclaw: connection-refused /ready with a STALE or missing live log stays offline', async () => {
204const logPath = join(dir, 'openclaw-2026-06-04.log');
212const stale = await probeOpenclaw({ baseUrl: 'http://127.0.0.1:18789', logPath, nowMs });
216const missing = await probeOpenclaw({ baseUrl: 'http://127.0.0.1:18789', logPath: join(dir, 'gone.log'), nowMs });
crons/routines/adamobook-maintenance/scripts/list-claude-sessions.ts12
118* True if a process command is the OpenClaw gateway daemon
119* (`node .../openclaw/dist/index.js gateway --port …`) — the parent of every
120* `claude -p … --allowedTools mcp__openclaw__*` brain turn. The brain turn's
121* OWN argv carries `mcp__openclaw__*` but never the `gateway` token, so this
127return cmd.includes('openclaw') && cmd.includes('gateway');
142// The OpenClaw gateway daemon (`node .../openclaw/dist/index.js gateway --port …`)
143// spawns a fresh `claude -p … --allowedTools mcp__openclaw__*` brain turn for each
150// in-flight reply. Matched on the gateway ancestor's command (`openclaw` +
151// `gateway`), which a brain turn's own `mcp__openclaw__*` argv never carries.
153return 'OpenClaw gateway (brain turn)';
246// Gateway brain turns (origin "OpenClaw gateway (brain turn)") are never
255(session) => !session.is_current && !session.origin.startsWith('OpenClaw gateway'),
crons/routines/forgebotmini-maintenance/scripts/list-claude-sessions.ts12
119* True if a process command is the OpenClaw gateway daemon
120* (`node .../openclaw/dist/index.js gateway --port …`) — the parent of every
121* `claude -p … --allowedTools mcp__openclaw__*` brain turn. The brain turn's
122* OWN argv carries `mcp__openclaw__*` but never the `gateway` token, so this
128return cmd.includes('openclaw') && cmd.includes('gateway');
143// The OpenClaw gateway daemon (`node .../openclaw/dist/index.js gateway --port …`)
144// spawns a fresh `claude -p … --allowedTools mcp__openclaw__*` brain turn for each
151// in-flight reply. Matched on the gateway ancestor's command (`openclaw` +
152// `gateway`), which a brain turn's own `mcp__openclaw__*` argv never carries.
154return 'OpenClaw gateway (brain turn)';
226// Gateway brain turns (origin "OpenClaw gateway (brain turn)") are never
235(session) => !session.is_current && !session.origin.startsWith('OpenClaw gateway'),
crons/routines/adamobook-maintenance/scripts/probe.test.ts10
661const oldest = path.join(d, 'openclaw-2026-05-31.log');
662const older = path.join(d, 'openclaw-2026-06-01.log');
663const newer = path.join(d, 'openclaw-2026-06-02.log');
668const files = discoverLogFiles(path.join(d, 'openclaw-*.log'), ['/nonexistent-a', '/nonexistent-b']);
672assert.equal(path.basename(files[0]), 'openclaw-2026-06-02.log');
673assert.equal(path.basename(files[1]), 'openclaw-2026-06-01.log');
678const only = path.join(d, 'openclaw-2026-06-02.log');
680const files = discoverLogFiles(path.join(d, 'openclaw-*.log'), ['/nonexistent-a', '/nonexistent-b']);
681assert.deepEqual(files.map((p) => path.basename(p)), ['openclaw-2026-06-02.log']);
688const files = discoverLogFiles(path.join(d, 'openclaw-*.log'), [legacyLog, path.join(d, 'gateway.err.log')]);
apps/forgebench/src/pages/EvaluatorPage.tsx9
70slack_equivalent: "Slack-equivalent OpenClaw path",
468source: runtimeMode === "slack_equivalent" ? "openclaw_chat_completions" : "openrouter_chat_completions",
680setApiError("Slack-equivalent runtime needs a Test or Production OpenClaw URL on the selected agent. Add it from Agents, then run again.");
687model: runtimeMode === "slack_equivalent" ? "slack_equivalent_openclaw" : selectedModel,
898Choose whether this run is a direct model benchmark or the Slackbot/OpenClaw path users hit in Slack.
910<SelectItem value="slack_equivalent">Slack-equivalent OpenClaw path</SelectItem>
920{slackEndpointStatus.configured ? "OpenClaw URL configured" : "OpenClaw URL missing"}
925Evaluation items will be sent through the selected agent's OpenClaw URL using a ForgeBench session key, then scored from the returned bot answer.
931Add a Test OpenClaw URL on the selected agent before running Slack-equivalent evaluations.
crons/routines/forgebotmini-maintenance/scripts/reap-finished-fires.ts6
25* 3. it does NOT descend from the OpenClaw gateway daemon (a brain turn carries
26* `--allowedTools mcp__openclaw__*`, so guards 1+2 alone would match it —
94* True if `pid` descends from an OpenClaw gateway daemon — i.e. it is a live
98* turn's own argv carries `--allowedTools mcp__openclaw__*` — which looks
101* routine's hard READ-ONLY-on-the-gateway rule. forgebot-mini runs no OpenClaw
123* 3. it does NOT descend from the OpenClaw gateway daemon (never reap a live
.claude/skills/qa-specialist/SKILL.md5
36# Open clawd browser once, reuse for all builds
37browser action=open profile=clawd targetUrl=https://jd.forgefx.dev/demos/forgeview-001/
44browser action=navigate profile=clawd targetId=<ID> targetUrl=https://jd.forgefx.dev/demos/forgeview-XXX-rNN/
52browser action=screenshot profile=openclaw targetId=<ID> # See screenshot skill: .claude/skills/dev/subskills/screenshot/SUBSKILL.md
55browser action=console profile=clawd targetId=<ID> level=error
.claude/skills/unity/subskills/unity-specialist/subskills/qa/SUBSKILL.md5
31# Open clawd browser once, reuse for all builds
32browser action=open profile=clawd targetUrl=https://jd.forgefx.dev/demos/forgeview-001/
39browser action=navigate profile=clawd targetId=<ID> targetUrl=https://jd.forgefx.dev/demos/forgeview-XXX-rNN/
47browser action=screenshot profile=openclaw targetId=<ID> # See screenshot skill: .claude/skills/dev/subskills/screenshot/SUBSKILL.md
50browser action=console profile=clawd targetId=<ID> level=error
crons/routines/adamobook-maintenance/scripts/reap-finished-fires.ts5
25* 3. it does NOT descend from the OpenClaw gateway daemon (a brain turn carries
26* `--allowedTools mcp__openclaw__*`, so guards 1+2 alone would match it —
96* True if `pid` descends from an OpenClaw gateway daemon — i.e. it is a live
100* turn's own argv carries `--allowedTools mcp__openclaw__*` — which looks
122* 3. it does NOT descend from the OpenClaw gateway daemon (never reap a live
.claude/skills/testing/subskills/chrome-cdp/SUBSKILL.md4
3description: Connect to Adam's live Chrome session via Chrome DevTools Protocol (CDP). Use as a fallback when OpenClaw Browser Relay won't work — e.g., sites that block headless browsers (LinkedIn, Salesforce native), cross-origin iframes (
15## When to Use This vs. OpenClaw Browser Relay
19| General web automation (public pages) | OpenClaw `browser` tool (default) |
23| Chrome extension relay attached | OpenClaw `browser` tool (profile=chrome) |
apps/dashboard/src/components/AgentNode.tsx4
10{ name: 'SOUL.md', path: 'C:\\Users\\AdamK\\clawd\\SOUL.md' },
11{ name: 'AGENTS.md', path: 'C:\\Users\\AdamK\\clawd\\AGENTS.md' },
12{ name: 'HEARTBEAT.md', path: 'C:\\Users\\AdamK\\clawd\\HEARTBEAT.md' },
13{ name: 'USER.md', path: 'C:\\Users\\AdamK\\clawd\\USER.md' },
apps/dashboard/src/pages/GlossaryPage.tsx4
167'OpenClaw\'s sentinel for "do not reply in Slack." The entire text output must be exactly NO_REPLY and nothing else; any surrounding prose ("I should not reply. NO_REPLY") gets posted to the channel verbatim.',
183'Not in the OpenClaw schema — enforced behaviorally. Being in a thread where AdamoBot previously spoke is NOT permission to keep talking. Each follow-up needs a new explicit mention with an explicit response request.',
300seeAlso: ['Rule Zero', 'OpenClaw'],
303term: 'OpenClaw',
apps/jd/src/pages/forgeview/dashboard-panels.tsx4
9<div className="border-l-2 border-red-500 pl-3"><strong className="text-red-400">🔥 AGGRESSIVE SELF-IMPROVEMENT OBJECTIVES</strong><ul className="mt-1 space-y-1 list-disc list-inside"><li><strong>Velocity:</strong> Target 6 builds/hr. Curre
10<div className="border-l-2 border-blue-500 pl-3"><strong className="text-blue-400">⏰ 5-MINUTE VELOCITY CHECK (Cron Rules)</strong><pre className="mt-1 bg-black/30 p-2 rounded overflow-x-auto text-[10px]">{`1. Run: doppler run -- python claw
11<div><strong className="text-foreground">📁 Key Files (Read These First)</strong><ul className="mt-1 space-y-1 list-disc list-inside"><li><code>clawd/memory/forgeview-philosophy.md</code> - <strong>START HERE</strong> — mission, principles,
12<div><strong className="text-foreground">🔍 Quick Status Check</strong><pre className="mt-1 bg-black/30 p-2 rounded overflow-x-auto text-[10px]">{`# What's the current state?\nbrowser action=open profile=clawd targetUrl=https://jd.forgefx.d
.claude/skills/dream/SKILL.md3
63- `openclaw` - scan the `memory/` folder in the project root (daily logs + MEMORY.md)
73# openclaw
85# openclaw - also list daily logs
.claude/skills/forgemedia/SKILL.md3
71browser action=act profile=openclaw request={"kind":"resize","width":1920,"height":1080}
76browser action=navigate profile=openclaw targetUrl=https://jd.forgefx.dev/demos/forgeview-XXX/?v=rNN
83browser action=screenshot profile=openclaw
apps/dashboard/src/pages/ClawdPage.tsx3
99<span className="text-primary">CLAWD</span>
101<span className="text-sm text-muted-foreground">OpenClaw Gateway Health</span>
193table. Events logged by OpenClaw gateway watchdog.
apps/forgebench/src/components/AgentFormDialog.tsx3
131<Label htmlFor="test_webhook_url">Test OpenClaw URL</Label>
142<Label htmlFor="production_webhook_url">Production OpenClaw URL</Label>
146placeholder="Optional production Slackbot/OpenClaw endpoint"
crons/routines/adamobook-maintenance/scripts/free-disk.sh3
86# 7) OpenClaw browser HTTP/code/GPU/service-worker caches — NOT cookies/login
87BR="$HOME/.openclaw/browser/openclaw/user-data"
91&& add "openclaw-browser-caches"
crons/routines/forgeapps-maintenance/ROUTINE.md3
18316. **Doppler-policy-violation scan (added 2026-05-14 Run #33, codifies LEARNINGS rule 33; extended 2026-05-15 Run #42 with hardcoded-secret-literal sub-scan + investigation-result codification per LEARNINGS rule 41).** Every run, sweep the
190- **Unbounded-grep rule (added 2026-05-15 Run #43, codifies LEARNINGS rule 43).** Once the first hit appears via the path-bounded detector above, the routine MUST run `git grep -l "<literal>"` with NO path bound to enumerate every appearanc
264| `.openclaw/` | dir | OpenClaw workspace. |
crons/routines/forgebotmini-maintenance/scripts/free-disk.sh3
86# 7) OpenClaw browser HTTP/code/GPU/service-worker caches — NOT cookies/login
87BR="$HOME/.openclaw/browser/openclaw/user-data"
91&& add "openclaw-browser-caches"
crons/routines/forgesales-maintenance/salesforce_client.ts3
39'Run under doppler or place a Doppler service token at .openclaw/.doppler-token.',
51if (existsSync(path.join(current, '.openclaw'))) {
67const tokenFile = path.join(repo, '.openclaw', '.doppler-token');
.claude/skills/apps/subskills/hale/SUBSKILL.md2
32# Use browser tool: profile=openclaw, targetUrl=http://localhost:4115
33# Note: requires browser.ssrfPolicy.allowPrivateNetwork: true in openclaw.json
.claude/skills/dev/subskills/changelog/SUBSKILL.md2
188- Added Slack ack reaction policy document and disabled ack in openclaw config.
235- Set heartbeat interval change and verified openclaw deployment paths.
.claude/skills/devops/subskills/github/SUBSKILL.md2
433## Migration Notes: .openclaw -> forgeapps (2026-02-26)
435- **Old repo:** `adamkane/.openclaw` apps at `forgeapps/apps/<name>/`
.claude/skills/devops/subskills/medic/SUBSKILL.md2
3description: Credential repair service for Claude Code, AdamoBot, and OpenClaw. The one place all scheduled tasks and skills call when authentication fails. Diagnoses Doppler, API tokens, and service credentials across Windows/Mac/VM enviro
27Credential repair service for Claude Code, AdamoBot, and OpenClaw. When a scheduled task, skill, or automation hits a credential failure, it calls medic instead of handling it alone.
.claude/skills/dream/should-dream.sh2
9# Supports: native (Claude Code auto-memory), openclaw, project-root
39openclaw|project-root)
.claude/skills/scope-shakedown/SKILL.md2
17This template is the most accurate and complete feature list we have. NEVER hand-build a feature list or reuse an old worksheet from `.openclaw/tmp/`. Always download a fresh copy of THIS template and fill it out per request.
211. **Copy the template.** Download `Scope_Shakedown_Template_Worksheet.xlsx` from the SharePoint link above (use the `sharepoint-skill` connector). Save the working copy under `.openclaw/tmp/scope-shakedown/`. If the download fails, stop an
.claude/skills/share-preview/SKILL.md2
90sed -E 's#(href|src)="/#\1="https://design.forgefx.dev/#g' page.html > .openclaw/tmp/page.html
91npx tsx .claude/skills/share-preview/scripts/share-preview.ts .openclaw/tmp/page.html --clean page-name
.claude/skills/sim-dev/subskills/sim-screenshot/SUBSKILL.md2
43| `browser` tool (openclaw profile) | Works for basic pages, untested for WebGL interaction sequences |
177| Simple web page via browser tool | `screenshot` skill → `browser` tool with `profile="openclaw"` |
apps/dashboard/src/App.tsx2
72{ path: '/clawd', title: 'Clawd' },
147<Route path="/clawd" element={<ClawdPage />} />
apps/jd/src/pages/ForgeViewDashboardPage.tsx2
59<a href="https://github.com/adamkane/.openclaw/blob/main/repos/appworks/apps/jd/FORGEVIEW-INDEX.md" target="_blank" rel="noopener noreferrer" className="block mb-6 p-4 rounded-lg border-2 border-amber-500/60 bg-amber-500/10 hover:bg-amber-5
136<div className="p-4 border-b border-border"><div className="flex items-center justify-between"><div><h2 className="text-xl font-semibold text-foreground">✅ Challenge Completion Checklist</h2><p className="text-sm text-muted-foreground mt-1"
apps/jira/src/pages/JiraZeroRunDetailsPage.tsx2
306<p>The agent or process that executed this run. <code className="text-foreground/70">{run.runner}</code> is the OpenClaw heartbeat system, which runs on a recurring schedule and triages ultra-priority issues automatically.</p>
706<p>The OpenClaw session type that triggered this run. <code>heartbeat</code> means it was an automated periodic check, not a manual invocation.</p>
crons/routines/adamobook-maintenance/scripts/publish-gateway-health.ts2
7const SOURCE = 'openclaw-watchdog';
95return env.BUSYLIGHT_HEALTH_DIR || path.join(home, '.openclaw', 'busylight-health');
crons/routines/adamobook-maintenance/scripts/sample.sh2
421# OpenClaw sessions carry --mcp-config .../openclaw-cli-mcp/...; genuinely
438if (cli_cmd[i] ~ /openclaw-cli-mcp/) tag = "openclaw";
crons/routines/adamobot-maintenance/ROUTINE.md2
103| Jira | Atlassian MCP (`searchJiraIssuesUsingJql`) | Three JQLs per fire: (a) Ultras snapshot — `project = AK AND priority = "Ultra" AND status != Done`; (b) per-fire delta probe — `project = AK AND updated >= -4h AND (labels IS EMPTY
281**AdamoBot-bot operational Slack signal class (codified 2026-05-25 12:39 HST after 6+ consecutive fires re-discovered the boundary).** Messages where the ForgeFX team interacts directly with AdamoBot in Slack — auth/budget failures ("Open
crons/routines/docs-maintenance/seed_missing_claude.ts2
177if (parts[0] === ".openclaw") {
178return `OpenClaw workspace context for \`${relDir}\`, including nearby workspace materials and operator notes.`;
crons/routines/forgebotmini-maintenance/scripts/sample.sh2
711# OpenClaw sessions carry --mcp-config .../openclaw-cli-mcp/...; genuinely
728if (cli_cmd[i] ~ /openclaw-cli-mcp/) tag = "openclaw";
crons/routines/routines-maintenance/ROUTINE.md2
59- **Legacy-dir-write drift.** A dir on disk whose name ends in the old `-maintainer/` suffix (e.g. `openclaw-maintainer/`, `forgebooks-maintainer/`) and contains only artifact files (LOGS/REPORT/ERRORS/DASHBOARD/etc, no `ROUTINE.md` of its
709b. **Sync Supabase `routines_catalog`.** `doppler run --project forgeapps --config prd -- pnpm exec tsx crons/routines/routines-maintenance/sync-routines-catalog.ts` — guarantees every routine on disk has a row in `public.routines_catalog`
scripts/browser-preflight.sh2
6GW=$(openclaw gateway status 2>&1)
7echo "$GW" | grep -qiE "state active|running" && check "OpenClaw gateway" 1 "" || check "OpenClaw gateway" 0 "run: openclaw gateway start"
.claude/skills/cowork-setup/SKILL.md1
50- Subtree file counts. Always sample: `forgeapps/node_modules`, `forgeapps/apps`, `forgeapps/.git`, `forgeapps/.claude`, `forgeapps/.openclaw`, **and `Documents/worktrees/`**. Git worktrees can appear at `Documents/worktrees/forgeapps/<name
.claude/skills/devops/subskills/lfs-hygiene/scripts/lib/report.ts1
265p(`2. **Audit archive paths** (${archived.length} files, ${fmtSize(archivedBytes)}). Destinations by file type: ${breakdown}. Archive content rarely belongs in Git LFS route media to ForgeMedia, documents to SharePoint, per \`.openclaw/wor
.claude/skills/docs-maintenance/SKILL.md1
406. Start with the biggest durable operator surfaces first: `.claude/`, `crons/`, `docs/`, `.openclaw/`, then the largest app trees.
.claude/skills/forgebase/SKILL.md1
280- **[OB1 / Open Brain](https://github.com/NateBJones-Projects/OB1/blob/main/README.md)** by Nate B. Jones — open-source second-brain pattern that's architecturally adjacent to forgebase: one Supabase database (Postgres + pgvector), one AI g
.claude/skills/ops/subskills/person/marypierce-skill/SUBSKILL.md1
136- Mock-up response docs for both proposals (AI-STRAWMAN-DRAFT DOCXs, 2026-06-12) built via `.openclaw/tmp/build_michelle_response.py` and `build_michelle_eri_response.py` in the OpenClaw workspace.
.claude/skills/sim-dev/SKILL.md1
619- **Browser tool:** Playwright exclusively. Never Chrome DevTools MCP, Claude-in-Chrome, or openclaw browser.
.claude/skills/skill-librarian/scripts/runtime-list.ts1
3* runtime-list.ts - List all SKILL.md files visible to OpenClaw at runtime.
.claude/skills/slack-verify-forgefx/SKILL.md1
9ForgeBot runs on **Hermes Agent** (NOT OpenClaw — that skill is stale for this host).
.claude/skills/testing/subskills/browserless/__tests__/test_browserless.sh1
43SKILL_PATH="/c/Users/AdamK/.openclaw/.claude/skills/testing/browserless/SKILL.md"
.claude/skills/testing/subskills/cic/SUBSKILL.md1
162. CIC / OpenClaw browser automation
.claude/skills/testing/subskills/playwright/SUBSKILL.md1
19| 4th | `browser` tool (openclaw profile) | Only if Playwright is broken or unavailable |
.claude/skills/testing/subskills/stagehand/__tests__/test_stagehand.sh1
53SKILL_PATH="/c/Users/AdamK/.openclaw/.claude/skills/testing/stagehand/SKILL.md"
.claude/workflows/lib/measure-startup-context.mjs1
26const WS = path.join(REPO, '.openclaw', 'workspace')
.claude/workflows/relocate-to-forgemedia.js1
217'3. usedByApp: which apps/<x>/ (or "none" if it lives in .claude/, .openclaw/, crons/, outputs/ — archival, not app-served).',
apps/dashboard/src/components/SiteHeader.tsx1
37{ to: '/clawd', label: 'Clawd' },
apps/forgelab/api/docs.cjs1
19const apiUrl = `https://api.github.com/repos/adamkane/.openclaw/contents/workspace/docs/${encodeURIComponent(f)}`;
apps/forgemiser/src/data/subscriptions.ts1
100{ name: 'OpenClaw', category: 'Other', lowCost: 0, highCost: 50, status: 'keep', keys: 1, managedBy: 'Adam' },
apps/forgewiki/src/lib/sourceLinks.ts1
179source.startsWith('.openclaw/') ||
apps/jira/src/pages/BulkTriagePage.tsx1
85const RULES_URL = 'https://raw.githubusercontent.com/AKforCodes/openclaw/main/scripts/jira-zero/bulk-rules.json'
apps/teamleads/reviews/river/2025/Q3/presentation/create-pptx.cjs1
7const html2pptx = require('C:/Users/AdamK/.openclaw/.claude/skills/pptx-skill/scripts/html2pptx.js');
apps/teamleads/reviews/river/2025/Q4/presentation/create-pptx.cjs1
7const html2pptx = require('C:/Users/AdamK/.openclaw/.claude/skills/pptx-skill/scripts/html2pptx.js');
apps/teamleads/reviews/river/2025/Q4/presentation/workspace/create-accomplishments-slide.js1
6const html2pptxPath = 'C:/Users/AdamK/.openclaw/.claude/skills/pptx-skill/scripts/html2pptx.js';
apps/teamleads/reviews/river/context/presentation/create-pptx.cjs1
7const html2pptx = require('C:/Users/AdamK/.openclaw/.claude/skills/pptx-skill/scripts/html2pptx.js');
crons/routines/_archive/claude-maximalist-scorer/ROUTINE.md1
29- **Subtree file counts — always include `worktrees/`.** When breaking down the total file count, sample: `forgeapps/node_modules`, `forgeapps/apps`, `forgeapps/.git`, `forgeapps/.claude`, `forgeapps/.openclaw`, **and `Documents/worktrees/`
crons/routines/_archive/routines-maintainer/ROUTINE.md1
53- **Legacy-dir-write drift.** A dir on disk whose name matches a `legacy dir` column in the grandfathered table (e.g. `openclaw-maintainer/`, `forgebooks-maintainer/`) and contains only artifact files (LOGS/REPORT/ERRORS/DASHBOARD/etc, no `
crons/routines/_archive/routines-maintainer-legacy/ROUTINE.md1
53- **Legacy-dir-write drift.** A dir on disk whose name matches a `legacy dir` column in the grandfathered table (e.g. `openclaw-maintainer/`, `forgebooks-maintainer/`) and contains only artifact files (LOGS/REPORT/ERRORS/DASHBOARD/etc, no `
crons/routines/adamobook-maintenance/scripts/check-watchdog-lockstep.ts1
119return process.env.BUSYLIGHT_HEALTH_DIR || path.join(homedir(), '.openclaw', 'busylight-health');
crons/routines/adamobook-maintenance/scripts/publish-health.ts1
98return env.BUSYLIGHT_HEALTH_DIR || path.join(home, '.openclaw', 'busylight-health');
crons/routines/forgebotmini-maintenance/ROUTINE.md1
3The single health routine for the forgebot-mini Mac mini (macOS ARM64, hostname `forgebot-mini`). It is the core-health sibling of `adamobook-maintenance`, trimmed to what this machine actually has: the Claude desktop app and the Claude Cod
crons/routines/forgemedia-maintenance/ROUTINE.md1
317- **Playwright only via `npx playwright` CLI** — never via Claude-in-Chrome MCP or OpenClaw browser; those aren't available in unattended runs.
crons/routines/machine-health-maintenance/ROUTINE.md1
213. Columns it does not measure (`openclaw_status`, `adamobot_status`,
crons/routines/machine-health-maintenance/scripts/publish-windows-health.ts1
15* Columns this collector does NOT measure (openclaw_status, adamobot_status,
crons/routines/teamleads-maintenance/ROUTINE.md1
148**Dirty-working-tree case.** If `git pull --rebase` refuses because the working tree carries unstaged changes from a sibling routine (e.g. forgesales-maintenance staging GM project artifacts mid-session), do NOT commit those files on the si
scripts/__tests__/python-tail-conversion.test.ts1
45/^\.openclaw\/workspace\/work\/.*\/_old\/.*\.py$/.test(path),