All Shortcuts
Host Stats
Usage (Last 7 Days)
Top 5 Shortcuts
City Infrastructure
Active Timers
Shortcuts with a 'Repeat on Schedule' step appear here. They run automatically in the background.
Select a run from the list to view its full trace.
Agentic Chat
Describe what you want to do in plain language.
I'll figure out which shortcut to run — or reply
conversationally.
Build Your Automation Layer
Raccourcis is a programmable shortcut engine for Linux. Compose visual workflows from building-block actions — no code required. Connect AI, shell scripts, files, APIs, and services into repeatable one-click automations.
What is Raccourcis?
Think of it as a modular ecosystem for automation. Instead of writing code, you compose Shortcuts (Builds) from Actions (Bricks). Each Category is a City grouping similar builds together.
Visual Pipeline
Each shortcut is a linear pipeline. Data flows top-to-bottom through actions. The output of step
N becomes the {{result}} available in step N+1.
AI as a First-Class Action
LLMs are native building blocks. Send a prompt, summarize a file, generate images, transcribe audio — all without leaving the pipeline.
Full Shell Access
The Run Shell Command action gives you unrestricted Bash. Combine GUI convenience with the raw power of the Linux terminal.
Scheduled Automations
Any shortcut can run on a cron schedule — daily reports, periodic backups, morning briefings — fully automated, zero interaction needed.
The Execution Model
Starts the pipeline. Initial context:
{ result: "", clipboard: "…", vars: {} }
Writes its output into
result. Available to all
subsequent steps via {{result}}.
{{result}},
{{clipboard}}, {{vars.myVar}}Use Save to Variable to snapshot a value and reference it multiple steps later.
The shortcut completes. Traces are logged in the Traces view.
Your First Shortcut in 4 Steps
Click + in the top-right
This opens the Shortcut Editor. Give it a name, choose a colour, pick a category.
Add actions from the right palette
Search for "clipboard", "AI Prompt", "Show Result" — drag or click to add each one to the canvas.
Configure each step
Click a step card to expand its parameters. Use the {v} variable picker to wire
outputs between steps.
Hit Run or Save
Run it immediately to test, or save it to the grid. It's now a one-click automation on your dashboard.
The Ecosystem
Everything in Raccourcis follows the Action-Brick philosophy. Actions are the smallest units (Bricks), Shortcuts are the builds you create, and Categories are the Cities that house them.
Shortcut
The top-level unit. A named, saveable workflow that can be triggered manually or on a schedule.
A Shortcut is the container for your automation. It has a name, an icon colour, a category, and an ordered list of Steps. Think of it like a named function — you call it, it executes its steps in sequence, and produces a final result.
Action
A typed, parameterised unit of work. The vocabulary of the pipeline.
An Action is a registered capability — like a function signature — defined in the
Action Registry (src/actions/). Each action has a type, a set of
parameters it accepts, and an outputType describing what it produces.
{
type: "ai-prompt", // unique key
title: "AI Prompt", // display name in the palette
desc: "Send a prompt…", // shown as a tooltip
icon: "sparkles", // Lucide icon name
color: "#FF375F", // badge colour
outputType: "text", // text | image | audio | file | list | null
defaults: { prompt: "{{result}}", … },
params: [ { name, label, kind, options? } ]
}
When you add an action to a workflow, a Step is created — a copy of the action
definition merged with its defaults, ready to be customised.
Execution Context
The shared state object that flows through every step.
Every action receives and can modify a shared context object. Understanding this is the key to composing powerful pipelines.
{
result: string | null, // ← output of the last step (most important)
clipboard: string, // ← system clipboard content at launch time
vars: { [name]: any }, // ← named variables (set with "Save to Variable")
log: string[] // ← per-run trace log
}
result is overwritten
by each action that produces output. Actions with outputType: null leave it
unchanged.clipboard is captured
once at shortcut launch and never changes mid-run.vars persists across
all steps. Use Save to Variable to snapshot result before it gets
overwritten.Variable Substitution
Template syntax for wiring data between steps.
Any string parameter that has acceptsVars: true in its definition supports
double-brace template syntax. Before an action executes, the engine replaces
placeholders with live context values.
{{result}}
Output of the previous step
{{clipboard}}
System clipboard at launch
{{vars.myVar}}
A named variable you saved earlier
{{vars.url}}
Another named variable — name is yours
Click the {v} button next to any parameter field to open the Variable Picker, which shows all available tokens in real time.
Output Types
The typed contract between actions in a pipeline.
Every action declares an outputType. This determines how the result is rendered and
what downstream actions should expect as input.
textPlain string — the most common type.
Feeds directly into AI prompts, shell commands, file writes.fileAbsolute file path as string. Pass to
file-read, media actions, or shell commands.imageURL or file path to an image.
Rendered in-app; usable with Image Vision.audioFile path to an audio file. Feed
into Speech-to-Text or shell players.listNewline-separated items or JSON array.
AI prompts handle both formats well.jsonStructured JSON string. Use a shell
step with jq to extract fields.nullAction produces no output (e.g.
notifications, confirmations). result is unchanged.Actions Reference
Every action available in the palette, grouped by category. Each action's
output becomes {{result}} for the next step.
Input & File
Read data into your pipeline — from the clipboard, filesystem, or the user.
result.{{result}} as path. Optional hidden files.AI & Media Intelligence
LLM text generation, image creation and analysis, speech synthesis and recognition.
System & Shell
Full access to Linux: shell commands, file operations, screenshots, variables.
result. Fully supports {{result}} interpolation in the command
string.result into a named
variable. Access later via {{vars.name}}.Output & Clipboard
Surface results to the user or pass data to other applications.
result to the system
clipboard.Web Services & APIs
Integrate with the web — scrape, search, calendar, email, messaging, developer tools.
Multimedia Processing
Tag, merge, extract, convert, and compress audio and video files using FFmpeg.
Variables & Data Flow
Variables are how you wire data across multiple steps without losing context. Master them and you can build any workflow.
How result flows
The most important variable is {{result}}. It is a single slot — like a register in a
CPU. Every action that produces output overwrites it. The diagram below shows a realistic pipeline:
url{{vars.url}}Summarise: {{result}}Notice how Save to Variable was used after step 1 — because after Firecrawl
ran, result was replaced. The original URL was preserved in vars.url.
All Variable Tokens
{{result}}Output of the immediately preceding
stepStandard pipe — the default way to chain steps{{clipboard}}System clipboard captured at
shortcut launchWhen you want the original clipboard regardless of later changes to
result{{vars.NAME}}A value stored earlier with
Save to VariableWhen you need to reference a value from N steps ago
Tip: Variable names are case-sensitive. {{vars.url}} and
{{vars.URL}} are different variables. Use consistent lowercase names.
Using Variables in Shell Commands
The Run Shell Command action expands {{…}} tokens before passing the command
to Bash. This lets you build dynamic shell pipelines:
wc -w "{{result}}"
scp "{{vars.filePath}}" user@server:/backups/
mv /tmp/draft.txt "/home/user/notes/{{result}}.txt"
Security note: Values substituted into shell commands are not shell-escaped. Avoid injecting untrusted user input directly into shell actions. Prefer writing the value to a temp file and referencing that.
Scheduling with Cron
Any shortcut can run automatically on a schedule — no daemon required. Raccourcis manages the scheduler internally.
Scheduling a Shortcut
Add a 'Repeat on Schedule' step
Open the editor for the shortcut you want to schedule and add this step from the System category.
Set your cron expression
Use standard 5-field cron syntax (e.g. 0 9 * * * for daily at 9 AM).
Save the shortcut
The scheduler automatically detects the change and updates the system crontab in the background.
Monitor in 'Cron Tasks'
Go to the Cron Tasks view to see all scheduled shortcuts, toggle them on/off, or jump back to the editor.
Cron Expression Reference
┌─── minute (0-59) │ ┌── hour (0-23) │ │ ┌─ day of month (1-31) │ │ │ ┌ month (1-12) │ │ │ │ ┌ day of week (0-6, Sun=0) │ │ │ │ │ * * * * *
0 9 * * 1-5Weekdays at 9:00 AM*/15 * * * *Every 15 minutes0 8 * * *Every day at 8:00 AM0 0 1 * *First of every month at midnight30 18 * * 5Fridays at 6:30 PM0 */6 * * *Every 6 hoursTraces & Debugging
Every time a shortcut runs — whether manually or via cron — an entry is appended to the Traces view. Each trace shows:
result at completionIf a cron task silently fails, check the Traces view — it will contain the error message and which step threw it.
Workflow Recipes
Copy these step-by-step recipes to get up and running fast. Each recipe is a fully working shortcut you can recreate in minutes.
Clipboard Summariser
Copy any text, run this shortcut, get a clean bullet-point summary.
result = copied textURL → Summary
Paste a URL, scrape the article, get an AI summary.
result = the URL{{result}} → clean markdownCode Explainer
Copy code, get an explanation and potential bug report.
result = code snippetMorning Briefing (Cron)
Every morning at 8 AM, get today's calendar + weather summary.
0 8 * * *
Voice Note → Text File
Record your voice, transcribe it, save it as a dated text file.
result = audio file pathresult = transcript textecho "{{result}}" > ~/notes/$(date +%Y-%m-%d).txtSupabase Data Reporter
Query a Supabase table and send the result to Telegram.
{{result}} → your ops chat0 18 * * *
The Developer Ecosystem
Raccourcis is designed to grow with a community of contributors. Actions are plain JavaScript modules. Adding a new integration is a single file and a few lines of code.
Project Architecture
How the codebase is structured — where to look for what.
Adding a Custom Action
Extend the Action Registry with your own integration in under 20 lines.
Every action is a plain JavaScript object in one of the files under src/actions/. To
add your own:
{
type: 'my-api-call', // unique string ID
title: 'My API', // shown in the palette
desc: 'Calls My API → result', // tooltip description
icon: 'globe', // any Lucide icon name
color: '#0A84FF', // hex accent colour
outputType: 'text', // text|image|audio|file|list|json|null
defaults: {
url: 'https://api.infodev.ovh',
param: '{{result}}',
},
params: [
{ name: 'url', label: 'Endpoint URL', kind: 'text' },
{ name: 'param', label: 'Query param', kind: 'text', acceptsVars: true },
],
}
Then register the executor in the main process (IPC handler) — the action type maps
1:1 to an IPC channel. That's the full contract.
Param kinds: text, textarea, number,
select (provide options: [{value, label}]). Set
acceptsVars: true to enable the variable picker button on that field.
The IPC Contract
How the renderer talks to the main process to execute actions.
Actions are executed in Electron's main process (Node.js environment) via IPC. The renderer sends a message and awaits the result:
const result = await window.electronAPI.runAction({
type: step.type, // e.g. "shell"
params: resolvedParams, // after {{var}} substitution
context: { result, clipboard, vars }
})
ipcMain.handle('run-action', async (event, { type, params, context }) => {
if (type === 'my-api-call') {
const data = await fetch(params.url + '?q=' + params.param)
return { result: await data.text() }
}
// … other handlers
})
Return { result: string|null }. Throw an Error to mark the step as failed
— it will be caught, logged to traces, and the pipeline will halt.
Shortcut Exchange Format
Export, share, and import shortcuts as portable JSON.
Shortcuts are stored as JSON and can be exported/imported via the toolbar. The format is a self-describing array — each shortcut is fully portable across installations as long as both have the required action types registered.
[
{
"id": 42,
"name": "Summarise Clipboard",
"icon": "sparkles",
"color": "bg-pink",
"category": "ai",
"favorite": false,
"steps": [
{ "type": "clipboard-read", "title": "Read Clipboard" },
{
"type": "ai-prompt",
"title": "Summarise",
"prompt": "Summarise in 5 bullets:\n\n{{result}}",
"systemPrompt": "You are a helpful assistant.",
"outputFormat": "list"
},
{ "type": "show-result", "title": "Output", "label": "Summary" }
]
}
]
Sharing shortcuts: Export your shortcuts JSON and share it with others. They can import it directly from the toolbar. This is the primary distribution mechanism for the community.
Possibilities & Limits
What's Possible
- Full Linux shell access — any Bash command
- AI text, image, audio (OpenAI-compatible APIs)
- Web scraping and search via Firecrawl + Google
- Calendar, email, messaging integrations
- Database queries (Supabase, Nextcloud)
- Multimedia processing via FFmpeg
- Scheduled automations with cron
- Custom actions via the registry + IPC
Current Limits
- AI actions require a compatible API key
- Shell actions run as current user (no sudo bypass)
- No GUI automation (no xdotool-style control)
- No conditional branching yet (if/else in pipelines)
- No parallel step execution
- Linux / Ubuntu primary target
Knowledge
No assets yet
Files generated or uploaded by your shortcuts will appear here.