{"id":50720472,"url":"https://github.com/whystrohm/ritual","last_synced_at":"2026-06-09T23:30:37.231Z","repository":{"id":352023403,"uuid":"1213479379","full_name":"whystrohm/ritual","owner":"whystrohm","description":"Find where you're wasting time. Get a Claude Code routine that fixes it. Scans your shell history + repos + Claude Code memory, drafts a routine from your actual work.","archived":false,"fork":false,"pushed_at":"2026-04-17T13:33:35.000Z","size":19176,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T15:40:20.402Z","etag":null,"topics":["ai-agent","automation","brand-voice","claude-code","claude-skill","content-operations","developer-tools","routines","scheduled-tasks","voice-audit"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whystrohm.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T12:28:42.000Z","updated_at":"2026-04-17T13:35:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/whystrohm/ritual","commit_stats":null,"previous_names":["whystrohm/ritual"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/whystrohm/ritual","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whystrohm%2Fritual","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whystrohm%2Fritual/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whystrohm%2Fritual/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whystrohm%2Fritual/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whystrohm","download_url":"https://codeload.github.com/whystrohm/ritual/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whystrohm%2Fritual/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34130641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","automation","brand-voice","claude-code","claude-skill","content-operations","developer-tools","routines","scheduled-tasks","voice-audit"],"created_at":"2026-06-09T23:30:36.448Z","updated_at":"2026-06-09T23:30:37.221Z","avatar_url":"https://github.com/whystrohm.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ritual\n\n![Ritual — Routines run. Ritual proves.](assets/hero.png)\n\n**Routines run. Ritual proves.**\n\n**Find where you're wasting time. Get a Claude Code routine that fixes it.**\n\nRitual scans your Mac — shell history, git repos, Claude Code memory — ranks the five things you repeat most, and **drafts a ready-to-paste routine prompt for the #1 one**, with your real repo names and patterns filled in. Paste it into Claude Code's new [scheduled triggers](https://claude.ai/code/scheduled) and the work runs in the cloud on a cadence you pick.\n\nSeven routine archetypes ship ready: voice audits, fact-freshness digests, dependency sweeps, content-calendar syncs, inbox triage, and two that belong in GitHub Actions or local cron instead — Ritual is honest about which context fits.\n\nThe one routine most content operators should build first — a voice audit — ships as the bundled `ritual-voice` skill.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Claude Code](https://img.shields.io/badge/Claude_Code-skill-6B4FBB)](https://code.claude.com)\n[![Routines Compatible](https://img.shields.io/badge/Scheduled_Triggers-ready-00A67E)](https://claude.ai/code/scheduled)\n[![CI](https://github.com/whystrohm/ritual/actions/workflows/ci.yml/badge.svg)](https://github.com/whystrohm/ritual/actions/workflows/ci.yml)\n\n---\n\n## Why this exists\n\n[Claude Code scheduled triggers](https://claude.ai/code/scheduled) just shipped. Remote Claude Code agents that run in Anthropic's cloud on a cron schedule. Powerful feature. Blank starting point — most people have no idea what their first trigger should be.\n\nRitual is the starting point. It scans the actual work on your machine — shell history, git repos, Claude Code memory — and tells you which five things are most worth automating, what each one would look like as a trigger, and hands you a paste-ready prompt with your real repo names in it.\n\n## What Ritual is\n\n**1. The bootstrap scan** ([`docs/bootstrap.md`](docs/bootstrap.md)) — a paste-in Claude Code prompt that:\n\n- Reads your prior Claude Code context first: `~/CLAUDE.md`, `~/.claude/memory/` (stated intent beats observed behavior)\n- Aggregates shell history from `~/.zsh_history` + `~/.zsh_sessions/*.history` (critical for modern macOS zsh)\n- Inventories git repos under `~/` and groups shared folder shapes\n- Finds config files with overlapping schemas across 3+ repos\n- Flags command sequences that appear together 5+ times (these are workflows)\n- **Detects existing automations** (launchd, cron, GitHub Actions) so it never recommends work that already runs\n- Writes findings to `~/ritual-patterns.json` with a `top_5_recommendations[]` array, each tagged with its execution context (Claude Code trigger / GitHub Actions / local cron)\n- **Drafts your #1 routine** — full trigger prompt with your real repo names, UTC cron expression, MCP connectors needed, plus the exact 4 clicks to create it\n\nRuntime: 5–10 minutes. No network calls outside `git`. Exemption list in [`docs/enterprise.md`](docs/enterprise.md).\n\n**2. The seven routine archetypes** ([`docs/first-routines.md`](docs/first-routines.md)) — classified by execution context:\n\n| # | Archetype | Context | What it does |\n|---|---|---|---|\n| 1 | Voice sweep | Claude Code trigger | Runs `ritual-voice` across brand repos, opens draft PRs |\n| 2 | Fact freshness digest | Claude Code trigger | Flags `provenFacts` older than `maxAgeDays` |\n| 3 | Dependency + security digest | Claude Code trigger | Grouped patch bumps, security advisories |\n| 4 | Content calendar sync | Claude Code trigger | Notion/Drive week-ahead digest |\n| 5 | Inbox triage | Claude Code trigger | Gmail MCP-backed classify + summarize |\n| 6 | Deploy verification | **GitHub Actions** | Fires on push to main |\n| 7 | Local filesystem digest | **launchd / cron** | Needs local access, not remote |\n\nRitual drafts for archetypes 1–5 directly. For 6 and 7 it points you at the right tool — honest scoping, not forced fit. See [`docs/how-routines-work.md`](docs/how-routines-work.md) for the mechanics of each context.\n\n**3. `ritual-voice`** — the bundled skill that powers Archetype 1. Audits any content file against a brand's voice guardrails defined in a `ritual.config.json`. Six priorities:\n\n| Priority | Check | Why it matters |\n|---|---|---|\n| P1 | Stale stats | Misleading claims are worse than ugly ones |\n| P2 | Missing specificity | \"We help founders grow\" is not a claim |\n| P3 | AI-slop markers | Em-dash seasoning, \"delve,\" \"tapestry,\" \"it's not X — it's Y\" |\n| P4 | Hype words | Comprehensive, seamless, revolutionary |\n| P5 | Name/attribution mismatches | Nickname in one paragraph, legal name in another |\n| P6 | Generic corporate voice | Passive headlines, hedged claims |\n\nThree modes: **flag** (report only), **suggest** (propose rewrites), **fix** (apply them). Default: `suggest`. Fix mode exists for trusted invocations; scheduled triggers default to `suggest`.\n\n## 60-second start\n\n**Option A — run the bootstrap first.** Recommended if you haven't built a Claude Code trigger before.\n\n1. Open Claude Code at your home directory (`cd ~`).\n2. Paste the bootstrap prompt from [`docs/bootstrap.md`](docs/bootstrap.md).\n3. When Phase 4 hands you a drafted routine with a \"Next 4 clicks\" section — follow it. Type `/schedule` in a new Claude Code session (or visit [claude.ai/code/scheduled](https://claude.ai/code/scheduled)), paste the prompt, attach the repos named in the draft, attach any MCP connectors named, set the UTC cron shown, save as enabled.\n4. **Immediately click \"Run now\"** on the new trigger. Review the output. If clean, trust the cron. If not, tune the prompt and re-run manually until it is.\n\nFull mechanics (what \"remote agent\" means, how MCP connectors attach, what outputs look like, usage limits): [`docs/how-routines-work.md`](docs/how-routines-work.md).\n\n**Option B — skip straight to voice audit.** For content operators who already know voice drift is their biggest tax.\n\n```bash\n# Download the latest skill release\ncurl -L https://github.com/whystrohm/ritual/releases/latest/download/ritual-voice.skill -o ritual-voice.skill\n\n# Install in Claude Code: Settings → Skills → Install Skill → select ritual-voice.skill\n\n# Drop a starter config in your brand's repo\ncurl -L https://raw.githubusercontent.com/whystrohm/ritual/main/examples/minimal/ritual.config.json -o ritual.config.json\n```\n\nThen in any Claude Code session in that repo:\n\n\u003e Run ritual-voice on `content/homepage.md` in flag mode.\n\n## What the scan finds\n\n![Scan demo — paste the bootstrap prompt, get your top recommendations and a drafted routine](assets/scan-demo.gif)\n\nExample output from a real operator's machine (sanitized):\n\n```json\n{\n  \"scanned_at\": \"2026-04-17T09:14:22Z\",\n  \"scope\": { \"repos_scanned\": 28, \"files_sampled\": 1847, \"history_days\": 180 },\n  \"top_5_recommendations\": [\n    {\n      \"rank\": 1,\n      \"pattern\": \"You edit brand-config.json + CLAUDE.md + one page.tsx across 11 repos. Each session runs git status, git diff, git log -5, remotion studio, vercel deploy in sequence. 47 times in 90 days.\",\n      \"routine_category\": \"skill+routine combo\",\n      \"proposed_trigger\": \"scheduled (weekly, Monday 6am)\",\n      \"estimated_time_saved_per_month_minutes\": 340,\n      \"implementation_sketch\": \"A weekly sweep that runs ritual-voice across all content repos, opens draft PRs with fixes, and posts a summary to your messaging channel.\"\n    },\n    {\n      \"rank\": 2,\n      \"pattern\": \"You run scripts/fetch-assets.sh with the same 3 arguments across 6 different brands. 31 times in 90 days.\",\n      \"routine_category\": \"skill\",\n      \"proposed_trigger\": \"manual\",\n      \"estimated_time_saved_per_month_minutes\": 85,\n      \"implementation_sketch\": \"A skill that takes a brand slug and a search query and pulls the right stock assets into the right folder.\"\n    }\n  ]\n}\n```\n\nThe point is that the recommendations are concrete, cite real frequencies, and name specific patterns — not generic \"you should automate things\" advice.\n\n## Before / after — `ritual-voice` on real content\n\n![Lint demo — ten violations caught, rewrite pulled from provenFacts, every verified number marked](assets/lint-demo.gif)\n\nRepresentative run on a paragraph of founder-written copy:\n\n**Before:**\n\n\u003e In today's fast-paced world, leveraging AI is a game-changing opportunity for forward-thinking founders. Our comprehensive platform empowers you to unlock your brand's full potential through seamless integration and cutting-edge automation.\n\n**Ritual report:**\n\n```\n## Voice Lint Report — content/hero.md\nMode: suggest\nConfig: ./ritual.config.json\n\n### Summary\n- Total violations: 10\n- By priority: P1=0, P2=2, P3=2, P4=6, P5=0, P6=0\n- Verdict: needs-revision\n\n### Violations (in priority order)\n\nP2 — Missing specificity\n  L1 \"In today's fast-paced world\"   no subject, no number, no proof\n  L2 \"your brand's full potential\"   ungrounded outcome\n\nP3 — AI-slop markers\n  L1 \"In today's fast-paced world\"   bannedPhrases match\n  L2 \"forward-thinking\"              cliche adjective stack\n\nP4 — Hype words\n  L1 game-changing, comprehensive\n  L2 empower, unlock, cutting-edge, seamless\n```\n\n**Suggested rewrite pulled from `provenFacts`:**\n\n\u003e We run content infrastructure for eleven founder-led brands. Voice extraction, guardrails in the repo, automated publishing. Thirty minutes a week of founder time. Starting at $3,000/month.\n\nTen violations down to zero. Same pitch, different surface. The rewrite pulls specificity from the config's `provenFacts` — every number in the new version maps to a verified fact with a source, not invented proof.\n\n## Pair with a routine\n\nThe skill gets real leverage when a Claude Code scheduled trigger invokes it on a cadence. Full archetypes in [`docs/first-routines.md`](docs/first-routines.md); trigger mechanics in [`docs/how-routines-work.md`](docs/how-routines-work.md). Minimal scheduled sweep:\n\n```\n## Context Reset\nDisregard prior conversation state. Your scope is defined entirely below.\n\n## Task\nInvoke the ritual-voice skill on all markdown and MDX files in /content,\n/blog, and /case-studies. Use \"suggest\" mode. Open a draft PR per brand\nwith proposed fixes. Never auto-merge. Post a summary to the release\nchannel naming: repos scanned, repos clean, repos with PRs opened.\n\n## Termination\nAfter the summary is posted, stop. Do not continue into related work.\n```\n\nSet a daily schedule. Review PRs with coffee.\n\n## The config file\n\nYour `ritual.config.json` is the heart of the system. The skill itself has zero brand-specific logic — everything lives in the config. Minimal version:\n\n```json\n{\n  \"brand\": {\n    \"name\": \"Acme\",\n    \"tone\": \"direct, specific, no fluff\"\n  },\n  \"canonicalNames\": {\n    \"Ty\": \"Tyler Robinson\",\n    \"Tyler\": \"Tyler Robinson\"\n  },\n  \"voice\": {\n    \"bannedWords\": [\"comprehensive\", \"seamless\"],\n    \"examples\": [\n      \"We ship 400 videos a quarter from a single config file.\",\n      \"30 minutes a week. One operator. No agency.\"\n    ]\n  },\n  \"provenFacts\": [\n    {\n      \"claim\": \"400 videos shipped in Q1\",\n      \"verifiedAt\": \"2026-04-10\",\n      \"source\": \"Remotion render logs\"\n    }\n  ],\n  \"staleness\": {\n    \"maxAgeDays\": 30,\n    \"metricsRequireVerification\": false\n  }\n}\n```\n\nSee [`docs/config-schema.md`](docs/config-schema.md) for the full schema.\n\n## Enterprise posture\n\nRitual is designed for operators running content across multiple brands, products, or business units. Full enterprise brief in [`docs/enterprise.md`](docs/enterprise.md). Summary:\n\n- **Configs live in repos.** Version-controlled, reviewable, auditable. No external dashboard.\n- **Skill is portable.** A single `.skill` file. No dependencies, no package manager. Install once per team member.\n- **Provenance is explicit.** Every flagged claim points at the fact (or absence of fact) in the config. Audit trail, built in.\n- **Exempt paths are honored.** Defense, classified, private — the config tells the skill what not to touch. Contents of exempt paths are never sent to the model.\n- **No network calls.** The skill runs inside Claude Code. The bootstrap scan uses `git`, `rg`, `fd`, and filesystem reads only.\n- **Fix mode is opt-in per invocation.** Scheduled routines default to `suggest` mode. Auto-fix never runs unsupervised.\n\nFor the full list of what Ritual will and will not do, see [`docs/limitations.md`](docs/limitations.md).\n\n## Examples\n\n- [`examples/minimal/`](examples/minimal/) — bare-bones config to start from; `provenFacts` empty, `metricsRequireVerification: false`\n- [`examples/whystrohm/`](examples/whystrohm/) — mature reference config for a multi-brand content consultancy; three verified facts sourced from the live site, strict verification on\n\n## Roadmap\n\n- **`ritual-voice`** (this skill) — voice and claims auditor. *Current.*\n- **`ritual-media`** — media intake and asset organization. Normalizes dropped files into the brand's folder shape, tags, routes to the right config. *Planned, but only if the bootstrap scans start surfacing it as a common pattern across operators.*\n- **`ritual-launch`** — launch-day checklist runner. Verifies every channel before a campaign goes live. *Planned, same condition.*\n\nThe deliberate pattern: we ship what the scan tells us to ship. If you run the bootstrap and find a repeated pattern we haven't captured, open an issue with the top three lines of `~/ritual-patterns.json` (sanitized) and we'll discuss.\n\n## Contributing\n\nPRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).\n\nThe skill itself is intentionally small — the leverage is in your `ritual.config.json`, not in the skill code. If you're building something that would be useful for other brands, the single most valuable contribution is an example config for your niche.\n\n## Security\n\nVulnerability reports: email **security@whystrohm.com**. See [SECURITY.md](SECURITY.md) for scope, disclosure process, and signed-release verification.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\n---\n\nBuilt by [WhyStrohm](https://whystrohm.com) — managed content infrastructure for founder-led brands. If you want this running against your content without maintaining it yourself, that's the service.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhystrohm%2Fritual","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhystrohm%2Fritual","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhystrohm%2Fritual/lists"}