{"id":50760512,"url":"https://github.com/ek33450505/cast-routines","last_synced_at":"2026-06-11T09:30:53.732Z","repository":{"id":357173579,"uuid":"1235737481","full_name":"ek33450505/cast-routines","owner":"ek33450505","description":"CAST routines — scheduled and triggered automation workflows for Claude Code","archived":false,"fork":false,"pushed_at":"2026-05-25T22:22:25.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T00:28:33.281Z","etag":null,"topics":["agents","cast","claude-code"],"latest_commit_sha":null,"homepage":"https://github.com/ek33450505/claude-agent-team","language":"Shell","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/ek33450505.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-05-11T15:53:44.000Z","updated_at":"2026-05-25T22:22:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ek33450505/cast-routines","commit_stats":null,"previous_names":["ek33450505/cast-routines"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ek33450505/cast-routines","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-routines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-routines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-routines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-routines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ek33450505","download_url":"https://codeload.github.com/ek33450505/cast-routines/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-routines/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34192870,"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-11T02:00:06.485Z","response_time":57,"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":["agents","cast","claude-code"],"created_at":"2026-06-11T09:30:52.873Z","updated_at":"2026-06-11T09:30:53.726Z","avatar_url":"https://github.com/ek33450505.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cast-routines\n\nSchedule autonomous Claude Code routines — daily briefings, inbox triage, infrastructure health checks — via YAML configs and cron.\n\ncast-routines is a standalone tap from the [CAST ecosystem](https://github.com/ek33450505/claude-agent-team). It generalizes the JARVIS-style \"personal assistant agent\" pattern into a small, declarative framework: write a YAML, register it, and your routine fires on a schedule with the agent you specified.\n\n## Install (Homebrew)\n\n```bash\nbrew tap ek33450505/cast-routines\nbrew install cast-routines\nbash \"$(brew --prefix cast-routines)/install.sh\"\n```\n\n## Manual install\n\n```bash\ngit clone https://github.com/ek33450505/cast-routines.git\ncd cast-routines\nbash install.sh\n```\n\n## Quick start\n\n```bash\n# List all installed routines\ncast-routines list\n\n# Validate a YAML before installing\ncast-routines validate ~/.claude/routines/daily-briefing.yaml\n\n# Install (registers in cast.db, adds cron entry if trigger.type=cron)\ncast-routines install ~/.claude/routines/daily-briefing.yaml\n\n# Trigger manually\ncast-routines trigger daily-briefing --dry-run\ncast-routines trigger release-celebration --arg repo=\u003cowner\u003e/\u003crepo\u003e --arg version=v7.4\n```\n\n## Routine YAML schema\n\n```yaml\nname: daily-briefing                 # slug — lowercase, alphanumerics + - + _\ndescription: \"Run morning-briefing agent at 8am daily.\"\ntrigger:\n  type: cron                         # cron | manual\n  value: \"0 7 * * *\"                 # required when type=cron (5-field cron expr)\nagent: morning-briefing              # the CAST agent that will be dispatched\nprompt_template: |\n  Run the daily briefing. ...        # the prompt sent to the agent\noutput_dir: \"~/.claude/routines-output/daily-briefing\"\nenabled: true                        # default: true\nmcp_required: []                     # optional — list of MCP servers required\nprompt_args:                         # optional — for manual triggers w/ --arg\n  - name: repo\n    required: true\n    description: \"GitHub repo slug\"\nnotes: |\n  Free-form notes for the human maintainer.\n```\n\n## Subcommands\n\n| Command | Purpose |\n|---|---|\n| `cast-routines list` | List all installed routines (from cast.db) |\n| `cast-routines status [name]` | Detailed status — last run, next fire, exit code |\n| `cast-routines get \u003cname\u003e` | Get a single routine record as JSON |\n| `cast-routines validate \u003cyaml\u003e` | Lint a YAML spec before install |\n| `cast-routines install \u003cyaml\u003e` | Register in cast.db; install cron entry if applicable |\n| `cast-routines uninstall \u003cname\u003e` | Remove cron entry and mark disabled (YAML preserved) |\n| `cast-routines enable \u003cname\u003e` | Re-enable + reinstall cron |\n| `cast-routines disable \u003cname\u003e` | Disable + remove cron |\n| `cast-routines trigger \u003cname\u003e [--dry-run] [--arg k=v ...]` | Fire a routine manually |\n\n## Environment\n\n| Var | Default | Purpose |\n|---|---|---|\n| `CAST_DB_PATH` | `~/.claude/cast.db` | SQLite path |\n| `CAST_ROUTINES_DIR` | `~/.claude/routines` | Where YAML configs live |\n| `CAST_SCRIPTS_DIR` | `~/.claude/scripts` | Where helpers are installed |\n| `CAST_AGENTS_DIR` | (unset) | Optional. When set, `validate` checks the named `agent:` exists at `$CAST_AGENTS_DIR/\u003cagent\u003e.md`. |\n| `CAST_CRONTAB_CMD` | `crontab` | Override crontab binary (useful in tests) |\n\n## Starter templates\n\n11 ready-to-go routine templates ship in `routines/` and are copied into `~/.claude/routines/` on install:\n\n| Template | Trigger | Purpose |\n|---|---|---|\n| `daily-briefing.yaml` | cron 07:00 | Morning briefing — git activity, CAST health |\n| `daily-cast-health.yaml` | cron daily | CAST system health snapshot |\n| `email-triage.yaml` | cron | Inbox triage via Gmail MCP |\n| `knowledge-curator.yaml` | cron | Obsidian vault link curation |\n| `learning-scout.yaml` | cron | Topic monitoring + research notes |\n| `meeting-prep.yaml` | cron | Pre-meeting briefs from calendar |\n| `pr-narrator.yaml` | manual | PR storytelling for stakeholders |\n| `release-celebration.yaml` | manual | Draft LinkedIn + dev.to outline on release |\n| `standup-writer.yaml` | cron weekday | Outward-facing standup draft |\n| `task-triage.yaml` | cron | Todoist inbox triage |\n| `weekly-cost-report.yaml` | cron weekly | API spend report |\n\n## Prerequisites\n\n- **bash** + **python3** — both ship with macOS / standard Linux\n- **PyYAML** — `pip3 install pyyaml`\n- **sqlite3** — usually installed; required for the `list` / `status` / `get` commands\n- **crontab** — required only for `trigger.type=cron` routines\n- **Claude Code CLI** — the framework that dispatches the agents\n\ncast-routines does NOT require the full CAST framework, but the routines themselves reference CAST agents by name (e.g., `agent: morning-briefing`). You can either:\n\n1. **Install full CAST** ([claude-agent-team](https://github.com/ek33450505/claude-agent-team)) for the canonical agent set\n2. **Install cast-agents standalone** ([cast-agents](https://github.com/ek33450505/cast-agents)) for just the agents\n3. **Author your own agents** in `~/.claude/agents/` — any agent your Claude Code can dispatch works\n\nSet `CAST_AGENTS_DIR=~/.claude/agents/core` (or wherever your agents live) to enable `validate`'s agent-existence check.\n\n## How routines fire\n\n```\n  cron → bash ~/.claude/scripts/cast-routine-runner.sh \u003cname\u003e --from-cron\n              ↓\n              Reads ~/.claude/routines/\u003cname\u003e.yaml\n              ↓\n              Dispatches the named agent via Claude Code Agent SDK\n              ↓\n              Writes output to \u003coutput_dir\u003e/\n              ↓\n              Logs result to cast.db (routines table)\n```\n\nManual triggers skip cron and execute synchronously via `cast-routines trigger`.\n\n## CAST Ecosystem\n\n\u003e Auto-synced from [claude-agent-team/docs/ecosystem.md](https://github.com/ek33450505/claude-agent-team/blob/main/docs/ecosystem.md). Run `~/Projects/personal/claude-agent-team/scripts/sync-ecosystem-readme.sh` to refresh.\n\n\u003c!-- ECOSYSTEM_START --\u003e\n| Repo | Description | Latest | Install |\n|---|---|---|---|\n| [cast-hooks](https://github.com/ek33450505/cast-hooks) | 13 auditable hook scripts — observability, safety guards, quality gates. SessionStart, PreToolUse, PostToolUse, PostCompact. | ![](https://img.shields.io/github/v/release/ek33450505/cast-hooks?style=flat-square) | `brew tap ek33450505/cast-hooks \u0026\u0026 brew install cast-hooks` |\n| [cast-agents](https://github.com/ek33450505/cast-agents) | 23 specialist agents — commit, debug, review, plan, test, research, and more. Agent definitions with YAML frontmatter. v7-synced. | ![](https://img.shields.io/github/v/release/ek33450505/cast-agents?style=flat-square) | `brew tap ek33450505/cast-agents \u0026\u0026 brew install cast-agents` |\n| [cast-memory](https://github.com/ek33450505/cast-memory) | Persistent agent memory with FTS5 search, relevance scoring, shared pool, semantic embeddings. Per-agent knowledge accumulation. | ![](https://img.shields.io/github/v/release/ek33450505/cast-memory?style=flat-square) | `brew tap ek33450505/cast-memory \u0026\u0026 brew install cast-memory` |\n| [cast-routines](https://github.com/ek33450505/cast-routines) | Scheduled autonomous Claude Code routines via YAML + cron. Daily briefings, inbox triage, release celebration, weekly cost reports. | ![](https://img.shields.io/github/v/release/ek33450505/cast-routines?style=flat-square) | `brew tap ek33450505/cast-routines \u0026\u0026 brew install cast-routines` |\n| [cast-parallel](https://github.com/ek33450505/cast-parallel) | Parallel agent execution across worktree sessions. Agent Dispatch Manifest (ADM) support. | ![](https://img.shields.io/github/v/release/ek33450505/cast-parallel?style=flat-square) | `brew tap ek33450505/cast-parallel \u0026\u0026 brew install cast-parallel` |\n| [cast-observe](https://github.com/ek33450505/cast-observe) | Session-level observability — cost tracking, agent run history, token spend, event sourcing. Feeds cast.db. | ![](https://img.shields.io/github/v/release/ek33450505/cast-observe?style=flat-square) | `brew tap ek33450505/cast-observe \u0026\u0026 brew install cast-observe` |\n| [cast-security](https://github.com/ek33450505/cast-security) | Security hooks and audit trails. PII redaction, parry-guard integration, compliance logging. | ![](https://img.shields.io/github/v/release/ek33450505/cast-security?style=flat-square) | `brew tap ek33450505/cast-security \u0026\u0026 brew install cast-security` |\n| [cast-doctor](https://github.com/ek33450505/cast-doctor) | Read-only health check for any Claude Code install. Validates hooks, MCP servers, agent frontmatter, cast.db schema, stale memories. | ![](https://img.shields.io/github/v/release/ek33450505/cast-doctor?style=flat-square) | `brew tap ek33450505/cast-doctor \u0026\u0026 brew install cast-doctor` |\n| [cast-time](https://github.com/ek33450505/cast-time) | Gives Claude Code a clock — injects local time, timezone, and a semantic time-of-day bucket at every SessionStart. | ![](https://img.shields.io/github/v/release/ek33450505/cast-time?style=flat-square) | `brew tap ek33450505/cast-time \u0026\u0026 brew install cast-time` |\n| [cast-dash](https://github.com/ek33450505/cast-dash) | Terminal UI dashboard for live swarm monitoring. 4-panel real-time display (Textual framework). | ![](https://img.shields.io/github/v/release/ek33450505/cast-dash?style=flat-square) | `brew tap ek33450505/cast-dash \u0026\u0026 brew install cast-dash` |\n| [cast-claudes_journal](https://github.com/ek33450505/cast-claudes_journal) | Session continuity — Claude's Journal auto-injects prior-day context via SessionStart hook. Obsidian vault sync. | ![](https://img.shields.io/github/v/release/ek33450505/cast-claudes_journal?style=flat-square) | `brew tap ek33450505/homebrew-claudes-journal \u0026\u0026 brew install claudes-journal` |\n| [cast-website](https://github.com/ek33450505/cast-website) | castframework.dev — marketing site and docs portal for the CAST ecosystem. | ![](https://img.shields.io/github/v/release/ek33450505/cast-website?style=flat-square) | — |\n| [cast-desktop](https://github.com/ek33450505/cast-desktop) | Tauri 2 native app — embedded PTY terminal, command palette, 11 dashboard views. | ![](https://img.shields.io/github/v/release/ek33450505/cast-desktop?style=flat-square) | `brew tap ek33450505/homebrew-cast-desktop \u0026\u0026 brew install cast-desktop` |\n\u003c!-- ECOSYSTEM_END --\u003e\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fek33450505%2Fcast-routines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fek33450505%2Fcast-routines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fek33450505%2Fcast-routines/lists"}