agentleFS
MoeenNehzatiMoeenNehzati/famulus/skills/online-calendar/SKILL.md

online-calendar

Skill4 starsChanged 4 months agoMITView on GitHub

Use when the user asks to view or change their Google Calendar. Do not use for daily planning.

The file

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    When first exposed to this skill in a session, invoke famulus_dispatcher.invoke_security_2 once with:

    line 12
  2. Distinctive:

    Do not repeat this initial call during the session.

    line 27
  3. Very specific:

    Use online-calendar._rtx.interface.scripts-gcal for calendar reads and writes.

    line 80
  4. Very specific:

    Use calendars when the target calendar is unknown.

    line 95
  5. Very specific:

    After create, fetch the returned event ID and compare start, end, summary, location, and description with the request.

    line 113
  6. Very specific:

    Before update, fetch and retain the fields being changed.

    line 116
  7. Very specific:

    After delete, fetch the event and require status cancelled.

    line 118
  8. Distinctive:

    When completion is uncertain, inspect current event state before retrying.

    line 121

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- BEGIN BLUEPRINT INTERFACES -->

Generated from blueprint.yaml. Do not edit this block by hand.

Managed setup

When first exposed to this skill in a session, invoke famulus_dispatcher.invoke_security_2 once with:

{
  "caller": "online-calendar",
  "interface": "online-calendar.interface.setup",
  "version": 2,
  "arguments": {
    "positionals": [],
    "options": {},
    "stdin": null
  }
}

Do not repeat this initial call during the session. Obtain permission before carrying out setup, then follow the returned setup-manager instructions exactly. If the result is busy or failed, stop and report it.

Executable Interfaces:

Send the required caller (caller skill), interface, version, and arguments; optional dry_run defaults to false. Compact uses ordered positionals plus an option mapping; ordered raw argv uses positionals: [] plus every argv token in list options. Never mix forms.

  • online-calendar._rtx.interface.scripts-gcal — Query or modify Google Calendar events via the Python calendar CLI (agenda, search, create, update, delete, etc.).
    • Caller: online-calendar
    • Version: 1
    • Security level: 2
    • Alternative: token-or-calendars Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {}, "positionals": ["token"], "stdin": null} Required options: []; positional arity: 1..1; stdin: forbidden
    • Alternative: create-calendar Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--color-id": "ID", "--description": "TEXT", "--summary": "TEXT", "--timezone": "TZ"}, "positionals": ["create-calendar"], "stdin": null} Required options: ["--summary"]; positional arity: 1..1; stdin: forbidden
    • Alternative: agenda Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--all-calendars": true, "--calendar": "ID", "--days": "N", "--from": "ISO", "--to": "ISO"}, "positionals": ["agenda"], "stdin": null} Required options: []; positional arity: 1..1; stdin: forbidden
    • Alternative: search Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--all-calendars": true, "--calendar": "ID", "--days": "N", "--from": "ISO", "--to": "ISO"}, "positionals": ["search", "QUERY"], "stdin": null} Required options: []; positional arity: 2..2; stdin: forbidden
    • Alternative: get Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--calendar": "ID", "--event-id": "ID"}, "positionals": ["get"], "stdin": null} Required options: ["--event-id"]; positional arity: 1..1; stdin: forbidden
    • Alternative: create Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--all-day": true, "--calendar": "ID", "--description": "TEXT", "--end": "ISO", "--location": "TEXT", "--start": "ISO", "--summary": "TEXT", "--timezone": "TZ"}, "positionals": ["create"], "stdin": null} Required options: ["--end", "--start", "--summary"]; positional arity: 1..1; stdin: forbidden
    • Alternative: update Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--calendar": "ID", "--description": "TEXT", "--end": "ISO", "--event-id": "ID", "--location": "TEXT", "--start": "ISO", "--summary": "TEXT", "--timezone": "TZ"}, "positionals": ["update"], "stdin": null} Required options: ["--event-id"]; positional arity: 1..1; stdin: forbidden
    • Alternative: delete Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--calendar": "ID", "--event-id": "ID"}, "positionals": ["delete"], "stdin": null} Required options: ["--event-id"]; positional arity: 1..1; stdin: forbidden
    • Alternative: move Arguments JSON (replace labels with actual values). Omit optional positionals and options that are not needed. {"options": {"--event-id": "ID", "--from": "CALENDAR_ID", "--to": "CALENDAR_ID"}, "positionals": ["move"], "stdin": null} Required options: ["--event-id", "--to"]; positional arity: 1..1; stdin: forbidden

Instruction Interfaces:

These are LLM-readable instruction surfaces. Read and follow them directly; do not invoke the MCP server for them.

  • connect-google.interface.default@1 — Route Google OAuth-client preparation according to whether a valid Desktop client is already installed.
<!-- END BLUEPRINT INTERFACES -->

Google Calendar

Use online-calendar._rtx.interface.scripts-gcal for calendar reads and writes. Invoke one interface call per operation, minimize network round trips, and issue independent calls in parallel. Use the public process contract for complete subcommand and option shapes; do not improvise invocation forms. Prefer the --all-calendars mode for schedule-wide agenda or search requests.

Reads may proceed directly. Create, update, and delete requests may proceed when the user supplied the necessary details for create, update, or delete. Confirm first when adding attendees because it sends invitations, and before deleting an event that has attendees or is far in the future. Treat move as authorized only when the user explicitly asked to move the identified event to the named destination calendar. Report each mutation's title, time, calendar, and link when available.

Routing calendar operations

Use calendars when the target calendar is unknown. Before create, match the event to the available calendar names. Use a clear match without asking; ask when multiple or no calendars plausibly fit. Do not silently use primary when another calendar is clearly more appropriate.

Agenda and search results are bounded to 50 events and do not paginate. Disclose that bound when the requested range may contain more results. Recurrence, attendees, and free-busy lack dedicated modes. For a genuine one-off unsupported API operation, use the declared token mode only when direct API access is explicitly in scope, keep the token secret, and apply the same confirmation rules. Prefer extending the public interface for repeated use.

Verify writes

Through online-calendar._rtx.interface.scripts-gcal, verify every create and delete and every nontrivial update. The only exception is a metadata-only update limited to summary, description, or location.

  • After create, fetch the returned event ID and compare start, end, summary, location, and description with the request. On mismatch, delete the new event and report the intended and observed values.
  • Before update, fetch and retain the fields being changed. Fetch again afterward. On mismatch, restore the retained values and report the discrepancy.
  • After delete, fetch the event and require status cancelled; Google soft-deletes events rather than returning not-found. If it remains confirmed, report failure.

When completion is uncertain, inspect current event state before retrying; repeated creates can produce duplicates.

Google authorization

For setup or reauthorization, invoke connect-google.interface.default. Its deterministic coordinator creates a credential file, asks Calendar's owner to probe live access, and stores the path only after verification. Treat only complete: true as successful setup; report any incomplete Calendar result and retry through connect-google with the same file.

Existing legacy Calendar credentials remain runtime-readable until a verified credential-file binding replaces them. Do not offer legacy setup as a new route. Replacing the single active Calendar account requires explicit confirmation.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.