# Repeating work with Routines

> Create, manage, and run Routines in Cartographer to save reusable task workflows and execute them with a single click.

Routines are reusable workflows that you can run with a single click. They capture patterns of work you perform repeatedly, allowing you to automate common tasks without rebuilding them each time. They live in the **Routines** section of the sidebar, alongside a **Scheduled routines** entry for the ones you've scheduled.

Cartographer comes with a set of predefined routines out of the box, alongside any you create yourself.

## What is a routine?

A routine is a skill that has been marked user-invocable — same packaging, same publishing, one extra property. Well-designed routines typically have:

- A clear **trigger description** that explains when to use them
- **Inputs** (parameters) that vary each run
- A **consistent output** (document, report, update, etc.)

Every routine is a skill; not every skill is a routine — the difference is that one extra property. This is why the sidebar has a **Routines** list for the invocable ones, while **Add-ons & Integrations** → **Skills** lists everything the agent can draw on, invocable or not. See [Skills reference](skills.md).

Think of Routines as your personal automation library — workflows you design once and run whenever needed.

## When to create a routine

Create a Routine when you find yourself:

- **Asking Cartographer for the same type of task weekly** (e.g., "Prepare my Monday morning brief")
- **Following a consistent process with varying data** (e.g., "Generate a status report from this Jira project")
- **Sharing a workflow with teammates** who need to perform the same task
- **Wanting to schedule automation** to run at specific times

## Creating a routine

Select **New routine** in the **Routines** section of the sidebar, and choose one of four methods:

| Method | What it does |
|---|---|
| **Create from prompt** | Describe a task and let the agent build the routine |
| **Create from skill** | Start from an existing skill template |
| **Create from recording** | Turn a recorded workflow into a routine |
| **Record a new workflow** | Record your screen to capture a new workflow |

Recording a workflow is also available from **Recordings** in Settings — see [Recordings settings](recordings-settings.md) and [Recording your tasks](recording-your-tasks.md).

Under the hood, a routine is a `SKILL.md` file — for users comfortable with Markdown and file system configuration, editing it directly is another way to shape a routine. An example structure:

```markdown
---
name: my-routine
friendly_name: Weekly Sales Report
version: 1.0.0
description: "Generates a weekly sales summary from spreadsheet data"
icon: FaChartBar
color: "3B82F6"
trigger: "When you need a summary of weekly sales performance"
inputs:
  - name: week_ending
    type: date
    description: "The last day of the week to report on"
  - name: data_file
    type: file
    description: "Path to the sales data spreadsheet"
output:
  type: file
  description: "PowerPoint presentation with sales charts"
---

## Steps

1. Read the sales data from {data_file}
2. Filter for the week ending {week_ending}
3. Calculate total sales, top products, and regional breakdown
4. Create a PowerPoint with:
   - Title slide: "Weekly Sales Report - {week_ending}"
   - Summary slide with key metrics
   - Chart slide showing product performance
   - Regional breakdown table
5. Save as "Sales_Report_{week_ending}.pptx" on the Desktop
```

## Running a routine

- Select a routine from the **Routines** list in the sidebar. This autofills the chat box with the routine's `/` command — send it to run.
- Type `/` in the chat box to open a menu of available routines and commands, and select one to autofill it the same way.
- Reference the routine by name in a conversation, for example: `Run the Weekly Sales Report for last week using the file in ~/Documents/Sales/`. Cartographer recognizes the routine name and executes it with your specified parameters.

## Managing routines

Open the options menu next to a routine in the **Routines** list for these actions:

| Action | What it does |
|---|---|
| **Favorite** | Pin the routine so it's easier to find |
| **View file** | See what the routine does and how to use it |
| **Schedule** | Set up a recurring or one-time run — see [Scheduling a routine](#scheduling-a-routine) |
| **Rename** | Change the routine's display name |
| **Move to project** | Move the routine to a different project |
| **Delete** | Remove the routine |

To edit a routine, edit its associated `SKILL.md` file directly — see [Advanced: routine storage](#advanced-routine-storage).

## Scheduling a routine

Select **Schedule** next to a routine, or **Schedule routine** from the Routines list, and configure:

| Field | Description |
|---|---|
| **Routine** | Which routine to run |
| **Schedule routine** | Date and time of the run |
| **Recurrence** | How often it repeats — defaults to **None (one-time)** |
| **Mode** | **Foreground** (uses apps, mouse, and keyboard) or **Background** |
| **Model** | Which model runs the scheduled routine |

### Managing scheduled routines

View and manage all scheduled routines from **Scheduled routines** in the sidebar: see upcoming runs, last run status and history, and enable, disable, edit, or delete individual schedules.

Scheduled routines run using your stored connections and permissions. If authentication expires, the routine may fail until you reconnect.

## Sharing a routine

Because a routine is a skill, sharing one with a teammate or publishing it more broadly follows the same publish, review, and install flow as any other skill — see [Sharing skills with your team](sharing-skills-with-your-team.md).

## Routine best practices

### Design for clarity

- **Name descriptively**: "Weekly Sales Report" not "Report 1"
- **Write clear triggers**: Explain when someone should use this Routine
- **Document inputs**: Explain what each parameter is for and expected format
- **Specify outputs**: Describe what the user will receive

### Handle variability

- **Use input parameters** for anything that changes (dates, file paths, names)
- **Provide sensible defaults** where possible
- **Validate inputs** in the Routine steps (e.g., "Check the file exists")
- **Handle missing inputs gracefully** with fallback behavior

### Test thoroughly

- **Run in Guided mode first** to catch unexpected steps
- **Test with edge cases** (empty files, future dates, special characters)
- **Verify outputs** match expectations before sharing
- **Test on different machines** if sharing with a team

### Version control

- **Duplicate before major changes** to preserve working versions
- **Document changes** in the Routine description or a CHANGELOG
- **Use semantic versioning** in SKILL.md (1.0.0, 1.1.0, 2.0.0) — versions only ever go forward

### Security considerations

- **Do not hardcode credentials** in Routine steps — use connections
- **Be cautious with file paths** — use relative paths or input parameters
- **Review permissions** before sharing — ensure recipients have access to required systems
- **Sanitize inputs** that go into shell commands or URLs

## Advanced: routine storage

Routines are stored as `SKILL.md` files under the `LocalSkills/` folder:

```
LocalSkills/
├── my-routine/
│   └── SKILL.md
└── another-routine/
    └── SKILL.md
```

See [Settings file locations](settings-file-locations.md) for where this folder lives. You can back up your routines by copying it, or sync it across machines via cloud storage — be careful with absolute paths in routines if you do, since they may not work on a different machine.

## Next steps

- [Skills reference](skills.md) — How a routine relates to a skill
- [Sharing skills with your team](sharing-skills-with-your-team.md) — Publishing, installing, and reviewing skills and routines
- [Recording your tasks](recording-your-tasks.md) — Record a workflow to turn into a routine or a knowledge skill
