// WholeTech operating rules

The Rules

Every standing rule Claude follows across the network — cost, content, deploy, design, comms. Each is a plain-Markdown memory file synced to all machines via claude-env. Click a row for the why + how it's applied; see /design/skins/ for how to change one.

32 rules · click a row for detail · click a header to sort
#RuleCategoryScope
1Help construct every prompt (care rule)CareAll

Why: Paul is 81 and on the cusp of dementia; clear, kind prompt-help is part of the memory support the sites exist for.

How to apply: On every prompt: mirror it back in one plain-language line before/while acting; when unclear offer the likely meaning + an alternative and proceed; break big asks into a numbered plan; warm, patient, dignified — never make him feel forgetful or rushed.

memory · feedback_prompt_help.md

2Think prompts through before buildingCareAll

Why: Building before discussing wastes effort — I built a versioning tool before noticing the .bak backups already did the job.

How to apply: Before building anything non-trivial: check if it already exists, surface the simpler path, and reason it through WITH Paul in a sentence or two. Never mail in the prompt discussion or half-ass it — a 20-second smarter conversation beats building the wrong/redundant thing.

memory · feedback_prompt_help.md

3Subscription only — never API billingCostNetwork

Why: The flat plan fee IS the budget ceiling (~$200/mo); pay-per-token would blow it in days at Paul's usage.

How to apply: Never set ANTHROPIC_API_KEY anywhere; never buy credits. Stay on the Claude subscription on every machine, script, and cron.

memory · feedback_subscription_only_no_api_billing.md

4Model policy: Opus default, Fable overnight onlyCostNetwork

Why: Fable 5 burns weekly limits ~2x as fast as Opus per token.

How to apply: Daily default Opus 4.8. Fable only for planned heavy overnight builds. Sonnet/Haiku fine for quick one-file edits.

memory · feedback_fable_overnight_only.md

5Downshift at limits, never buy creditsCostNetwork

Why: Running low is a signal to economize, not spend.

How to apply: Fable → Opus → Sonnet/Haiku as limits run down. Suggest /usage so Paul can see where he stands.

memory · feedback_cost_control_habits.md

6Long focused sessions over scattered onesCostNetwork

Why: Prompt caching serves 99%+ of input at ~1/10 price when the cache stays warm.

How to apply: Prefer one long session to many short ones; keep work batched within a session.

memory · feedback_cost_control_habits.md

7Public-site content rulesContentPublic sites

Why: Protect Paul's identity and avoid naming issues on indexed pages.

How to apply: No Claude/Anthropic naming without checking (fableguide/bigdummies/meetup are sanctioned exceptions); never Paul's real name on public sites; institutional bylines only. Real name IS fine in private business email.

memory · feedback_content_rules_public_sites.md

8No browser scanners on the dropletOpsDroplet

Why: Playwright/Lighthouse on the droplet crashed it (2026-04-28).

How to apply: Run all browser scans/screenshots from a Windows PC against the droplet, never on it.

memory · feedback_no_browser_scanners_on_droplet.md

9Check for backing services before cleanupOpsDroplet

Why: An nginx vhost with no /var/www webroot may be a reverse proxy for a service in /opt + systemd (claude-bus near-miss).

How to apply: Before removing anything, grep systemd + /opt and check what the vhost actually serves.

memory · feedback_check_for_backing_services_before_cleanup.md

10Agents First — every site 90-100DesignNetwork

Why: The guiding network principle (agentsfirst.dev): bots reading the web are the audience now.

How to apply: Every site ships robots policy, AGENTS.md, llms.txt, content-signal, schema; target 90-100 on the AF scorer. Never strip these in a redesign.

memory · reference_agents_first.md

11Brisk replies — act, don't re-promptCommsAll

Why: Paul gives one-word answers and prefers a finished thing to a question.

How to apply: Act on sensible defaults; one question max, only when genuinely Paul's call.

memory · feedback_brisk_replies.md

12Don't phone it inQualityAll

Why: Every section/card/paragraph is first-class work.

How to apply: Match the depth of surrounding content; no fabricated specifics; no half-effort filler.

memory · feedback_dont_phone_it_in.md

13Flag rabbit-holes earlyWorkflowAll

Why: Silent grinding on a side-quest wastes the session.

How to apply: When a side-quest becomes a roadblock, name it + give a verdict + move on.

memory · feedback_flag_rabbitholes.md

14Timebox troubleshootingWorkflowAll

Why: Chasing dead ends across many turns is costly.

How to apply: Verify the root fact first; confirm a fix is obtainable before grinding; surface blockers fast.

memory · feedback_timebox_troubleshooting.md

15FYI vs directive conventionCommsAll

Why: Stray phone taps and context notes shouldn't trigger action.

How to apply: Messages starting FYI / Note: / Context: / (parens) = info only, acknowledge but don't act. Plain message = directive.

memory · feedback_fyi_convention.md

16Prompt-clarity rulesCommsAll

Why: Interpret Paul's brisk asks without re-prompting.

How to apply: Name placement/scope ambiguity back; 'add X' when X exists = net change + say so; name artifacts; rank by the metric the data supports.

memory · feedback_prompt_clarity_rules.md

17Paste-ready textCommsAll

Why: Copying text with markdown/linebreaks into a form field is painful.

How to apply: When giving text to paste into an external field, give ONE clean block: no markdown, no stray breaks.

memory · feedback_paste_ready_text.md

18Push semanticsDeployNetwork

Why: 'Push' is ambiguous; the wrong scope wastes time or under-protects.

How to apply: Plain 'push' = droplet only + verify. 'Push all' = full 6-leg (droplet+B2+GitHub+Drive+HS NAS+CC NAS) with per-leg status.

memory · feedback_prompt_clarity_rules.md

19Network rollout disciplineDeployNetwork

Why: Multi-site changes are high-blast-radius.

How to apply: Reuse the existing injector; read build.py exclusions; idempotent + per-file backup + dry-run + rollback; verify on LIVE render, not file://; generic offset not hardcoded selectors.

memory · feedback_network_rollout_discipline.md

20No concurrent sessions on one siteOpsNetwork

Why: Two sessions editing the same files = silent lost updates (bit childrensfable 2026-06-10).

How to apply: One session per site at a time; split new work into new files; keep restore points.

memory · feedback_concurrent_sessions.md

21Claim multi-site tasks in WORKLOGOpsNetwork

Why: A dozen machines run Claude Code; avoid duplicate effort.

How to apply: Before any network-wide task, add a CLAIMED line in ~/claude-env/WORKLOG.md and sync; mark DONE when finished. If already claimed, stop and tell Paul.

memory · reference_claude_env_master.md

22Log every session at /sessions/WorkflowNetwork

Why: A durable, searchable record of what was built, with a Needs-You list.

How to apply: Write /sessions/<YYMMDDHHMM>-<slug>/index.html at milestones (not just end); prepend a hub entry; auth paul/Pass44; noindex.

memory · feedback_session_log.md

23Snapshot old design before a redesignDeployNetwork

Why: A single dated directory is a cleaner restore point than scattered .bak files.

How to apply: Before overwriting, copy the old homepage + subpages into /var/www/<site>/index<YYMMDDHHMM>/; noindex it; then apply the new design.

memory · feedback_design_snapshot.md

24Redesign → reusable WT-Skins kitDesignNetwork

Why: A kit helps a whole cluster at once; a one-off helps one site.

How to apply: On any redesign request, propose a WT-Skins kit (CSS-var themes + switcher), apply to the requested site as proof, note the sibling cluster it rolls to.

memory · feedback_redesign_use_kit.md

25Design bar: imaginative, not just cleanDesignPublic sites

Why: 'Clean but flat' still reads as generic AI to Paul (offgridder lesson).

How to apply: Aim for a real design POV (distinctive type, palette, identity). Treat my own 'borderline fine' as broken; Paul judges good enough.

memory · feedback_design_bar.md

26Worksheet format for listingsDesignNetwork

Why: Sortable rows + click-to-detail beats a flat card grid for any multi-item page.

How to apply: Build lists/dashboards/directories as worksheets (sortable, row→detail card, filter pills). Plain cards only for small/narrative content.

memory · feedback_worksheet_format.md

27WT-Blocks: global section changes via wt.pyContentNetwork

Why: 616 section pages are marker-wrapped for one-command bulk edits.

How to apply: Change sources/videos/live/news/faq through /root/wt/wt.py (dry-run default, stamped backups, rollback) — never hand-edit site-by-site.

memory · reference_wt_blocks.md

28Network worksheet patternContentNetwork

Why: Any worksheet/new column extends one generator, not hand-built HTML.

How to apply: Extend /root/gen-alldomains.py (COLUMNS list = spec, detect lambdas, num/bool/date/link kinds, Σ totals); output to /alldomains/ then sync local.

memory · reference_network_worksheet.md

29No UI overlapDesignNetwork

Why: Injected bars must never cover existing text.

How to apply: Push fixed nav layers + body down by bar height; screenshot-verify on LIVE before done.

memory · feedback_no_ui_overlap.md

30Low-key news postsContentNews sites

Why: News articles match the terse austinmayor template; loud copy belongs on banners.

How to apply: No event cards, platform lists, or section h2s in news posts.

memory · feedback_low_key_news_posts.md

31FableGuide video curationContentfableguide

Why: Charts should carry authoritative videos only.

How to apply: No get-rich-quick, no 'make money with AI' repackaging, no substanceless clickbait on /videos/.

memory · feedback_fableguide_video_curation.md

32GoDaddy availability: FULL not FASTOpsDomains

Why: FAST mode returns stale false-positive 'available' results.

How to apply: Always use checkType=FULL before recommending or registering a domain.

memory · reference_godaddy_availability_check.md