Agent skill

Routine From Chat

by rome-os in rome-os/rome

Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am").

MITAuto-check passedWriting & Content

Install Routine From Chat

skills CLI
$ npx skills add rome-os/rome --skill routine-from-chat -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install rome-os/rome routine-from-chat --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/rome-os/rome.git skills-src && mkdir -p .claude/skills && cp -r skills-src/rome_apps/assistant/skills/routine-from-chat .claude/skills/routine-from-chat && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
routine-from-chat
GitHub stars
737
Token cost
~3.8k tokens
SKILL.md length
1,870 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
MIT

At a glance

Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am").

  • Works in 5 steps: Classify the request as event, schedule,… → Resolve the trigger. → Fill the gaps with ask_question.… → …
  • So the event actually fires
  • SKILL.md covers The flow, Event routines from a…, Event routines already on the… and Schedule routines —…, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Routine From Chat is an agent skill from rome-os/rome. Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am"). For third-party events (Gmail, GitHub, Slack…) it confirms with the guardian and then subscribes to the connector trigger so the event actually fires, even one that has never fired before. Ask for any missing detail, then confirm with a card. Reach for this first whenever the guardian wants something to happen automatically…

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Email management, Plain language and style rules and Real estate. It works with GitHub, Gmail and Slack. The repository describes itself as: A compounding agent OS for recursive agents. Also an open source alternative to Grok Bot and Meta's Muse. The licence is MIT.

When your agent uses it

  • So the event actually fires
  • Even one that has never fired before

Example prompts

  • “do this automatically”
  • “text me when I get an email from my landlord”
  • “remind me every Friday at 9am”
  • “/routine-from-chat”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Classify the request as event, schedule, or manual (above).
  2. Resolve the trigger.
  3. Fill the gaps with ask_question. Underspecified requests are the
  4. Propose with propose_routine. Pass kind: "event", kind: "schedule",
  5. Close. After propose_routine, reply with one short line confirming what

What it can do on your machine

Read from SKILL.md and the folder at commit f187f45. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Routine From Chat loads about 3.8k tokens when it runs. Until then it costs about 147 tokens; SKILL.md has 1,870 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~147
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from rome-os/rome at commit f187f45, republished under its MIT licence (© rome-os). 1,870 words, ~3,834 tokens.

Download SKILL.mdSave it as .claude/skills/routine-from-chat/SKILL.md (or your agent's skills folder).
name
routine-from-chat
description
Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am"). For third-party events (Gmail, GitHub, Slack…) it confirms with the guardian and then subscribes to the connector trigger so the event actually fires, even one that has never fired before. Ask for any missing detail, then confirm with a card. Reach for this first whenever the guardian wants something to happen automatically; do not explore the codebase or hand-build a trigger.
tools
ask_question, search_event_catalog, connector_login, connector_connect, connector_event_search, connector_event_schema, connector_event_subscribe…

Create a routine from chat

When the guardian describes something they want to happen automatically, turn that intent into a routine — without making them learn event names, RRULEs, timezones, filters, or JSON. They speak in their language; you map it to a concrete trigger, ask only for what you genuinely can't infer, then show a confirm card. You do not create the routine yourself — the card creates it when they turn it on.

A routine fires one of three ways. Decide which the request is:

  • Event — "when X happens": an email arrives, a payment lands, a form is submitted. Reactive, no fixed time.
  • Schedule — "at a time / on a cadence": "every Friday at 9am", "tomorrow at noon", "the 1st of each month", "every morning".
  • Manual — "save this so I can run it whenever": a playbook with no automatic trigger. the guardian runs it by hand from the Routines page's "Run now" button.

If it's ambiguous ("remind me about the standup"), ask one short question to disambiguate before going further. In particular, if it's unclear whether they want it on a schedule or to run it by hand, ask.

The flow

  1. Classify the request as event, schedule, or manual (above).
  2. Resolve the trigger.
    • Manual: nothing to resolve — there is no trigger to watch or time to compute. Skip straight to choosing the Then (the action it runs) and propose with kind: "manual". No eventName, tzid, rrule, or date.
    • Event from a third-party app (Gmail, GitHub, Slack, Stripe, …): go through the connector chain — connector_event_search → connector_event_schema → confirm with the guardian → connector_event_subscribe. It finds the trigger, gets a yes before arming it upstream, and hands you the exact eventName to bind. See "Event routines from a connector".
    • Event already flowing on the bus (a Rome app's own event, or a connector event you set up before): call search_event_catalog with keywords from the request, then use the matching eventType as eventName. Never invent an event name.
    • Schedule: work out the cadence, the time of day, and the timezone from what they said; translate to an RRULE / one-off date behind the scenes.
  3. Fill the gaps with ask_question. Underspecified requests are the norm ("important", "my landlord", "in the morning"). Ask one short, recognition-style question per gap: a single-type question with concrete options when you can name them (candidate senders; "8am / 9am / noon"), or a text question when the answer is open-ended. Never demand a raw value the user would have to look up, and never ask them for an RRULE or an IANA timezone — ask "what time?" and "roughly where are you?" and convert it yourself.
  4. Propose with propose_routine. Pass kind: "event", kind: "schedule", or kind: "manual" plus the human summary and the machine spec. A confirm card renders; the guardian turns it on. For manual, set watchLabel to something like "Run on demand" and omit all trigger fields.
  5. Close. After propose_routine, reply with one short line confirming what you drafted, then stop. Do not call any create action — the card does that.

Event routines from a connector (Gmail, GitHub, Slack, …)

Third-party events reach Rome through the Connector app (Composio). A connector event only appears in search_event_catalog after it has fired at least once — so for anything new you don't search the catalog, you subscribe. Subscribing both tells you the canonical event name and arms the upstream trigger so it starts firing. Three steps — and the third is an action you get the guardian's explicit go-ahead for first, because it reaches out and starts watching their third-party account:

  1. Find the trigger. connector_event_search({ toolkit, regex? }) lists the triggers a toolkit can emit as { slug, name, description }. Use the toolkit the request implies (gmail, github, slack, stripe, …) and an optional case-insensitive regex to narrow ("new.*message"); omit it to see them all. Pick the slug whose meaning matches the intent — e.g. GMAIL_NEW_GMAIL_MESSAGE. Never invent a slug.
  2. Read its schema. connector_event_schema({ toolkit, slug }) returns config (the settings the subscribe needs), payload (the shape of the event it delivers — use it to pick filter field paths exactly, no guessing), eventName (the string the routine binds to), and requiresWebhookEndpointSetup. When requiresWebhookEndpointSetup is true (e.g. Slack, Notion), tell the guardian the trigger needs extra provider-side webhook setup and won't fire until that's done.
  3. Confirm, then subscribe. Subscribing arms a real upstream subscription — it starts watching the third-party account immediately — so always get a yes first. Tell the guardian, in their terms, exactly what you're about to register ("I'll subscribe to GitHub's new issue event on zhangfand/vps so Rome starts watching it") and ask with ask_question (a single yes/no). Only on a yes call connector_event_subscribe({ toolkit, slug, config }), which arms the trigger and returns the eventName to bind. Pass config matching the schema from step 2 — {} when it needs none; for any required field you can't infer, ask the guardian recognition-style. It's idempotent, so re-subscribing the same trigger is safe. If the guardian declines, don't subscribe — offer a schedule routine if one fits, otherwise stop.

Then propose_routine with eventName set to exactly what subscribe returned. (The confirmation above arms the event source; this card is a separate, lighter step that turns the routine on — keep them distinct, don't collapse them.)

Prerequisites — sign-in, then connection. Subscribe needs Composio sign-in and the toolkit connected. These are two separate gates, handled in order — a connector action's error tells you which one you're on:

  • Not signed in (error points to connector_login): call connector_login, which renders the account-wide sign-in card. Do not call connector_connect here — it refuses to render until sign-in succeeds, so you'd just bounce between errors.
  • Signed in but toolkit not connected (error points to connector_connect): call connector_connect({ toolkit }) to render the connect card.

After the guardian completes a card, resume the chain. Only when a toolkit genuinely can't be connected do you stop and say the event isn't available (a scheduled routine may still fit — offer it if so).

Filters come from the payload. connector_event_schema.payload describes the event body, so set filter { field, equals } paths from it directly rather than guessing (field is a dot-path into that payload). When the guardian names a person ("my landlord", "Dana") instead of a value, ask which contact they mean with ask_question — a single over the values you know, or a text question when unsure — and put the chosen value in the filter. If you can't find a fitting field in the payload, prefer a broader routine (no filter) over one that silently never matches.

Event routines already on the bus

For a Rome app's own event, or a connector event you've already subscribed to, search_event_catalog({ query, limit? }) returns the best-matching watchable types as { eventType, appId } plus a total count. Search with words from the request; if total exceeds what came back, search again with sharper keywords. Use the exact eventType as eventName. (For a brand-new third-party event this returns nothing — that's expected; go through the connector chain above.)

Show full SKILL.md (724 more words)Show less

Schedule routines — translating natural language

Map what they said to tzid (IANA), localTime (24-hour HH:mm), and either rrule (recurring) or date (one-off YYYY-MM-DD). Keep all of that internal — the card shows plain language like "Every Friday at 9:00 AM".

  • "every day at 9am" → localTime: "09:00", rrule: "FREQ=DAILY"
  • "every Friday at 5pm" → "17:00", rrule: "FREQ=WEEKLY;BYDAY=FR"
  • "every weekday at 8am" → "08:00", rrule: "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"
  • "the 1st of every month at 9am" → "09:00", rrule: "FREQ=MONTHLY;BYMONTHDAY=1" (MONTHLY always needs BYMONTHDAY)
  • one-off "tomorrow at noon" → localTime: "12:00", date: "<that date>", no rrule

For the timezone: use the guardian's known timezone if you have it; otherwise ask once in plain terms ("roughly where are you / what timezone?") and convert (e.g. "Pacific" → America/Los_Angeles). Don't ask them to type an IANA name.

Choosing the "Then" (action)

The trigger decides when; the actionName decides what runs. A routine can only bind to an action that already exists — binding to one that isn't registered is rejected at create time (the card won't turn on). So pick the Then deliberately. Three choices, same for event and schedule routines:

  • Notify me — pure delivery on a channel you know: actionName: "system:send_message", args { "channel": "<telegram|webchat|...>", "threadId": "<id>", "text": "<message>" }. Only when you actually know the channel + thread.
  • Summon — a single judgement/writing pass over what the trigger hands you, where it's fine for the agent to work out the steps fresh each time: actionName: "system:summon", args { "agentName": "core:main", "prompt": "<what to do when this fires>" }. Good for "summarize the email that just arrived", "remind me to …", "decide and reply".
  • A workflow action — a fixed multi-step job you'd want run the same way every fire (see the litmus). Bind to its canonical run action, <appId>:run.
Summon or workflow? — the litmus

Default to system:summon when the Then is one act of judgement or writing over what's already in front of the agent. Reach for a workflow when the Then has a fixed multi-step shape you'd want to run identically each time:

  • it gathers then acts — "review my emails and pick the critical ones", "pull my calendar and draft a plan" (fetch → judge/score → deliver);
  • it pulls from several sources and combines them;
  • it fans out over a list — "for each new lead, …";
  • you'd otherwise be writing a for/if or several tool calls inside the summon prompt.

A summon re-improvises those steps on every fire (non-deterministic, no parallel/branch/map, pricier and flakier); a workflow crystallizes them as a deterministic DAG. So "every morning, review my emails and select the critical ones" is a workflow, not a summon.

When the Then is a workflow and no <appId>:run action exists yet, build it first with the coding:workflow_creation skill (it scaffolds the app and registers <appId>:run), then come back and propose_routine bound to that action. Don't propose the routine first — the create is rejected until the action exists. If a fitting run action already exists, just bind to it.

Example — event (connector)

Guardian: "Text me when I get an important email from my landlord."

  1. Classify → event, third-party (Gmail). Make sure you're signed in and Gmail is connected; if a connector action says otherwise, handle the prereq it names (connector_login, then connector_connect({ toolkit: "gmail" })) and wait for the guardian to finish.
  2. Discover + read the trigger:
    • connector_event_search({ toolkit: "gmail", regex: "new.*message" }) → pick GMAIL_NEW_GMAIL_MESSAGE.
    • connector_event_schema({ toolkit: "gmail", slug: "GMAIL_NEW_GMAIL_MESSAGE" }) → note the payload's sender field and the eventName.
  3. Confirm, then subscribe:
    • ask_question (single yes/no): "I'll subscribe to Gmail's new email event so Rome can watch your inbox — set that up?"
    • On yes → connector_event_subscribe({ toolkit: "gmail", slug: "GMAIL_NEW_GMAIL_MESSAGE", config: {} }) → returns eventName: "provider:event:gmail.gmail_new_gmail_message".
  4. ask_question — "Who's your landlord?" (a single over the addresses you know, or a text question if unsure); "What counts as important?" ("Anything from them" / "Only if it mentions rent").
  5. After they pick dana@example.com and "anything from them" (filter field taken from the payload schema):
propose_routine({
  kind: "event",
  sentence: "When you get an email from Dana (your landlord), Rome will summarize it and text you.",
  name: "Landlord emails",
  watchLabel: "Gmail · new email",
  filterSummary: "sender is dana@example.com",
  thenSummary: "summarize it and text you",
  eventName: "provider:event:gmail.gmail_new_gmail_message",
  filter: [{ field: "from.email", equals: "dana@example.com" }],
  actionName: "system:summon",
  args: { agentName: "core:main", prompt: "A new email arrived from the guardian's landlord (dana@example.com). Read it and send the guardian a short summary." }
})

Example — schedule

Guardian: "Remind me every Friday at 9am to send my weekly update."

  1. Classify → schedule. Cadence weekly on Friday, 09:00; confirm timezone if unknown.
  2. Propose:
propose_routine({
  kind: "schedule",
  sentence: "Every Friday at 9:00 AM, Rome will remind you to send your weekly update.",
  name: "Weekly update reminder",
  watchLabel: "Every Friday at 9:00 AM",
  thenSummary: "remind you to send your weekly update",
  tzid: "America/Los_Angeles",
  localTime: "09:00",
  rrule: "FREQ=WEEKLY;BYDAY=FR",
  actionName: "system:summon",
  args: { agentName: "core:main", prompt: "Remind the guardian to send their weekly update, in a short friendly message." }
})

Example — manual

Guardian: "Put together my morning briefing, but don't schedule it — I want to run it myself when I'm up."

  1. Classify → manual (they explicitly don't want a time). No trigger to resolve.
  2. Pick the Then like any routine (here a workflow or summon that builds the briefing).
  3. Propose:
propose_routine({
  kind: "manual",
  sentence: "A morning briefing you can run by hand whenever you want it.",
  name: "Morning briefing",
  watchLabel: "Run on demand",
  thenSummary: "pull your day and send you a briefing",
  actionName: "system:summon",
  args: { agentName: "core:main", prompt: "Build the guardian's morning briefing — their day's calendar, anything urgent — and send it to them." }
})

Then reply with one short line confirming what you drafted, and stop.

© rome-os, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in rome_apps/assistant/skills/routine-from-chat of rome-os/rome.

Open the folder on GitHubat commit f187f45

Compare with similar skills

Routine From Chat next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Routine From Chat compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Routine From Chat this skillrome-os/rome737—~3.8kAutomated safety check: PassMIT
Connect Apps with ComposioComposioHQ/awesome-claude-skills77k3 repos~557Automated safety check: PassNone
Openloomi Connectorsmelandlabs/openloomi1k—~3.3kAutomated safety check: PassApache-2.0
Write Like Me Bootstrapjxnl/personal-monorepo-template563—~1.1kAutomated safety check: PassNone
Composio Cloud Toolsquarqlabs/argus279—~543Automated safety check: PassApache-2.0
ConnectComposioHQ/awesome-claude-skills77k3 repos~987Automated safety check: PassNone

Similar skills

  • Connect Apps with Composio

    ComposioHQ/awesome-claude-skills

    Connects an agent to 1000+ external apps through the Composio Tool Router plugin, so it can actually send emails, create issues and post messages instead of only drafting them.

    77k GitHub starsUsed in 3 repos~557 tokens
    Productivity & AutomationAuto-check passed
  • Openloomi Connectors

    melandlabs/openloomi

    openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…

    1k GitHub stars~3.3k tokensUpdated 15 days ago
    Productivity & AutomationAuto-check passed
  • Write Like Me Bootstrap

    jxnl/personal-monorepo-template

    Bootstrap a durable "write like me" skill from the user's own Slack and email writing.

    563 GitHub stars~1.1k tokensUpdated 3 mo ago
    Writing & ContentAuto-check passed
  • Composio Cloud Tools

    quarqlabs/argus

    Routes requests to external SaaS apps such as GitHub, Gmail, Google Calendar, Slack, Notion and Linear through cloud tools, with safeguards on irreversible actions.

    279 GitHub stars~543 tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Connect

    ComposioHQ/awesome-claude-skills

    Connect Claude to any app. An agent skill from ComposioHQ/awesome-claude-skills.

    77k GitHub starsUsed in 3 repos~987 tokens
    Productivity & AutomationAuto-check passed
  • Watcher Creator

    asheshgoplani/agent-deck

    Guide for creating agent-deck watchers conversationally. An agent skill from asheshgoplani/agent-deck.

    1k GitHub stars~2.7k tokensUpdated 4 days ago
    Backend & APIsAuto-check passed

More from rome-os/rome

All 18 skills in this repo
  • Color Audit

    rome-os/rome

    Audit a design system's color palette against measurable color-science disciplines — WCAG/APCA contrast of declared token pairs, perceptual (OKLCH) ramp uniformity, color-blindness safety of…

    737 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Audit the subordinate copy in a UI — section descriptions, field helper text, hints, card subtitles, empty-state body copy, tooltip bodies — against the secondary-text ruleset, and emit a per-string…

    737 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • UX Semantics Audit

    rome-os/rome

    Audit an existing UI/UX design (React/JSX/TSX components, HTML, or generated app code) against a tiered ruleset of verifiable UX principles, and produce structured, evidence-cited findings that a…

    737 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Add a new Rome-managed OAuth integration for a third-party service so a user can delegate access by clicking Connect, and Rome can act on the service with the delegated token (the GitHub/Slack model…

    737 GitHub stars~3.6k tokensUpdated today
    Auto-check passed
  • Composio CLI

    rome-os/rome

    Help users operate the published Composio CLI to find the right tool, connect accounts, inspect schemas, execute tools, subscribe to trigger events with composio listen, script workflows with…

    737 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • File Issue

    rome-os/rome

    File one GitHub issue from a description the user gives — classify it as a bug report, feature request, or task spec, gather what the body needs from the tracker and the code, ask the user only for…

    737 GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Questions about Routine From Chat

What does Routine From Chat do?

Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am"). Routine From Chat is an agent skill from rome-os/rome. Turn a plain-language "do this automatically" request into a routine — either event-triggered ("text me when I get an email from my landlord") or scheduled ("remind me every Friday at 9am").

When should I use Routine From Chat?

Routine From Chat fits situations like: so the event actually fires; even one that has never fired before.

How do I install Routine From Chat in Claude Code?

Run `npx skills add rome-os/rome --skill routine-from-chat -a claude-code`. Or copy the skill folder (rome_apps/assistant/skills/routine-from-chat in rome-os/rome) into .claude/skills/routine-from-chat in your project. Claude Code loads it when a task matches its description.

How do I install Routine From Chat in Codex?

Run `npx skills add rome-os/rome --skill routine-from-chat -a codex`. Or copy the skill folder (rome_apps/assistant/skills/routine-from-chat in rome-os/rome) into .agents/skills/routine-from-chat in your project. Codex loads it when a task matches its description.

Can I use Routine From Chat in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rome-os/rome --skill routine-from-chat -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/routine-from-chat, .gemini/skills/routine-from-chat, .github/skills/routine-from-chat and .opencode/skills/routine-from-chat in your project.

What does Routine From Chat need to run?

SKILL.md names no scripts, command-line tools or credentials: Routine From Chat is instructions for the agent only.

Does Routine From Chat access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Routine From Chat safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Routine From Chat use?

Routine From Chat is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Routine From Chat use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Routine From Chat?

Skills that share tags, products or a category with Routine From Chat: Connect Apps with Composio (ComposioHQ/awesome-claude-skills, 77k stars), Openloomi Connectors (melandlabs/openloomi, 1k stars), Write Like Me Bootstrap (jxnl/personal-monorepo-template, 563 stars) and Composio Cloud Tools (quarqlabs/argus, 279 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Routine From Chat?

rome-os (a GitHub organization) maintains it in rome-os/rome, which has 737 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 9, 2026.

Source: rome-os/rome on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.