Notes and one-time reminders from a fast command, kept in view by “Rallo the Red Panda” on your desktop
that waves when Claude Code, Codex, Grok, Gemini CLI, or a ClickUp teammate is waiting on you.
Made by Eyakub · © Razlio
Install · Quick start · Shortcuts & Siri · Coding agents · ClickUp · Privacy · Build
Rallo is a small Mac app for the thoughts you'd otherwise lose: "call the dentist", "check the CI flake", "stretch in 20 minutes". You save them in a second, from the terminal, Siri, Shortcuts, or any app's right-click menu, and a red panda sitting on your desktop keeps them quietly in view. When something needs you, a reminder coming due, an agent asking for permission, or a teammate's message, it waves. And when typing is slower than talking, press ⌃⌥⌘V and speak: Rallo types for you in any app, from the terminal to the browser.
Everything lives on your Mac. No account, no server, no telemetry.
![]() Notes open |
![]() Needs you |
![]() Listening |
![]() Saved |
![]() Done! |
![]() Nothing open |
- Click it to open your notes; drag it anywhere.
- An orange badge counts reminders that are due, a blue badge counts agents and people waiting on you.
- Its eyes follow your cursor. Stroke it slowly while it sleeps and it gets comfy; jiggle the cursor fast and it wakes up (twice, and it's grumpy).
- Reduce Motion and Pause Animations keep it still. Hide it any time; your notes stay in the menu bar.
curl -fsSL https://raw.githubusercontent.com/Eyakub/Rallo/master/scripts/install.sh | bashThe script downloads the latest release, checks its SHA-256 and signature, installs it in
~/Applications (no administrator password), sets up the rallo command, and opens the
app. Look for the paw in the menu bar.
Note
Rallo is signed with its own certificate, not notarized: there's no paid Apple Developer
account behind it. Installs through the script or rallo update open normally and are
checked against that certificate. A zip downloaded in a browser
needs System Settings → Privacy & Security → Open Anyway once. After each update,
macOS asks once before Rallo reads your ClickUp token or cloud voice key: click
Always Allow.
If the installer adds ~/.local/bin to your PATH, open a new terminal window before using
rallo. Requirements: an Apple Silicon Mac with macOS 14 or later.
rallo note "Call the dentist"
rallo remind "Stretch" --in 20m
rallo remind "Standup notes" --at "tomorrow 9:30am" # or "fri 5pm", "oct 20", RFC 3339
rallo list # open notes; --due, --all, --deleted
rallo search dentist
rallo done <id> # the short ID from list/search
rallo snooze <id> --in 10m
rallo delete <id> # soft delete; `rallo restore <id>` brings it back--at reads plain times in your Mac's time zone: 5pm, fri 9am, tomorrow 17:00,
oct 20, in 2 hours. A time needs am/pm or a two-digit 24-hour clock, and Rallo refuses
vague ones like "later" or "next fri" instead of guessing
(decision 0016 has the full list).
Every command takes --json and returns one JSON document, so scripts and agents can use
the same interface you do. rallo --help lists them all;
docs/cli-contract.md is the full contract.
| Notes panel | Click the pet or press ⌃⌥⌘N. Add, edit, complete, and snooze notes. Remind Me offers 20 minutes, 1 hour, tomorrow at 9:00, or Custom…, where you type a time ("fri 5pm") and see when it lands before you set it. A "Waiting for you" section lists agents and people who need you; swipe one sideways to dismiss it. |
| Menu bar | The paw shows how many are waiting. The menu lists them, and jumps to one with ⌃⌥⌘J (longest waiting first). |
| Settings (⌘,) | Open at Login, the pet, the terminal command, notifications, agent hooks, ClickUp, voice typing, export and import, updates (including an opt-in daily check). |
| Voice typing (experimental) | Turn it on in Settings → Voice, then press ⌃⌥⌘V, talk, and Rallo types into whatever app has focus; press again to stop (it also stops after 10 s of silence). Pick Apple's built-in engine (macOS 26), Whisper large-v3 turbo (macOS 14+, a 1.6 GB download you start yourself), or a cloud engine that uses your own Groq, OpenAI or compatible API key (macOS 14+). It never presses Return, so a dictated command waits for you in the terminal. Add names it should know ("Rallo", your teammates) under Words to recognize; "um"s and stutters ("like like") are dropped. The pet cups an ear while it listens. Needs Microphone and Accessibility access. |
| Reminders | Delivered by macOS Notification Center, even after Rallo quits. Up to 32 active at once. |
- Shortcuts: "Add Rallo Note" and "Add Rallo Reminder" are actions you can use in your own
shortcuts. "When" takes the same words as
rallo remind --at("fri 5pm", "tomorrow 9am", "in 2 hours") or an ISO 8601 date and time with its offset (Shortcuts' Format Date → ISO 8601). A Date from another action works too ("Oct 9, 2026 at 5:00 PM"), and so do Siri's spelled-out numbers ("in two hours"). Both run in the background and reply "Saved to Rallo." or "Reminder set for …". - Spotlight: on macOS 26, press ⌘Space and type "Add Rallo Note" or "Add Rallo Reminder".
- Siri: on a Mac, Siri doesn't run an app's built-in phrases (Apple supports those on iPhone and iPad only), but it runs your shortcuts by name. Make a shortcut with Add Rallo Reminder, set Note and When to Ask Each Time, name it "Remind me in Rallo", and say "Hey Siri, remind me in Rallo".
- Any app: select text, right-click, and choose Services → New Rallo Note. The pet smiles when it's saved; if it can't be saved, the notes panel opens and says why. Give it a key in System Settings → Keyboard → Keyboard Shortcuts → Services.
Rallo sees only the text sent with the request, when the item is used. If Rallo isn't running, macOS starts it first.
Rallo works with Claude Code, Codex, Grok, and Gemini CLI in two ways.
Let agents save notes for you. rallo setup skill installs a skill that teaches
Claude Code, Cursor, Codex, Grok, and Gemini CLI to use rallo when you ask ("remind me to check the
deploy in an hour"). Agents only act when asked, and treat note text as data, never
as instructions.
Know when an agent is waiting. rallo setup hooks adds Rallo's hook to Claude Code,
Codex, Grok, and Gemini CLI. When an agent asks for permission or has a question, the pet waves, the
paw shows a count, and the row says what it's asking ("Asks to use Bash"). Click the row
to jump straight to that agent:
- cmux: the exact workspace and pane,
- Terminal and iTerm2: the exact tab (macOS asks once to let Rallo control them),
- anything else: the app comes to the front.
Gemini CLI allows comments in ~/.gemini/settings.json; Rallo leaves such a file alone and
says so. With folder trust on, Gemini runs no hooks in folders you haven't trusted.
A row disappears when the agent moves on or its terminal closes. Optionally, Rallo notifies you when an agent has waited 5 minutes. The hook never stores prompts or replies: only which agent, the last two folders of where it runs, and the tool it asks for.
Connect ClickUp in Settings → ClickUp with a personal API token (ClickUp → Settings → Apps). Rallo then checks once a minute, from your Mac, for direct and group messages whose latest message isn't yours, and lists them under "Waiting for you": "Muhsin — Messaged you on ClickUp · 2 min". Click to open the conversation in the ClickUp app; replying, opening it from Rallo, or swiping it away clears the row.
The token stays in your Keychain. Rallo only reads, and stores the sender's name, never message text. Channel @mentions and task comments aren't covered yet (decision 0010).
- Local. Notes live in SQLite at
~/Library/Application Support/Razlio/Rallo. There is no account and no telemetry. - Network. Only
rallo update, when you run it, ClickUp, if you connect it, a daily check for new releases, if you turn it on in Settings → General, and voice typing's Whisper model download or cloud engine, if you choose them (below). - Voice typing is off by default and runs on your Mac, with Apple's speech engine or
Whisper. Audio and the text are never stored or logged; macOS may download Apple's speech
model the first time you use it. The Whisper model is downloaded from Hugging Face only when
you click Download, and is stored in
~/.cache/huggingface/hub, where other tools can use it. - Cloud voice engine. Only if you choose it and add your own API key, each dictated phrase is sent to that provider (Groq, OpenAI or the address you set) to be transcribed. The key stays in your Keychain. Nothing else sends audio anywhere.
- Siri and Services. Rallo reads text only when New Rallo Note is used, and only the text sent with it. Siri turns your voice into text (that part is Apple's); Rallo receives only the text. Like any Services item, other apps on your Mac can call it too; all it can do is add a note.
- Agent and ClickUp rows live in a separate throwaway file that is never backed up, exported, or included in Time Machine, and is cleared as soon as nobody is waiting.
- Backups. Rallo snapshots your notes before every schema change and every update;
rallo backupmakes one on demand, andrallo exportwrites JSON or CSV. See docs/backup-and-restore.md.
rallo update --check # is there a newer release?
rallo update # install it (backs up your notes first)
rallo uninstall # remove Rallo; keeps your notes
rallo uninstall --purge # also delete your notes (after exporting them to ~/Downloads)Settings → General has an opt-in "Check for updates daily" that tells you when a release is out; installing still waits for you.
rallo uninstall (or Settings → About → Uninstall Rallo…) removes the app, the
rallo command, the agent hooks and skill, Open at Login, scheduled reminders,
the ClickUp token, and voice API keys. If the rallo command is already gone, use the install
script instead:
curl -fsSL https://raw.githubusercontent.com/Eyakub/Rallo/master/scripts/install.sh | bash -s -- --uninstall
# add --purge to also delete your notes (after exporting them to ~/Downloads)You need Xcode 26 or later, Rust via rustup,
XcodeGen, and CMake (brew install cmake; the first
build downloads and compiles whisper.cpp).
scripts/build-macos.sh --install # Release build → ~/Applications/Rallo.app
cargo test --workspace # Rust tests
(cd apps/macos && xcodegen generate) && xcodebuild -project apps/macos/Rallo.xcodeproj \
-scheme Rallo -configuration Release -derivedDataPath build/DerivedData test # Swift testsUse --data-dir (or RALLO_DATA_DIR) for experiments, so tests never touch your real notes.
scripts/screenshots.sh regenerates the images in docs/images from a demo instance with
sample data.
| Path | What's there |
|---|---|
crates/rallo-core |
Storage, reminders, the pet's state machine, agent and ClickUp rows (pure Rust, no platform code) |
crates/rallo-cli |
The rallo command |
crates/rallo-platform-macos |
macOS specifics: process lookup, change signals, launching, updates |
crates/rallo-ffi |
UniFFI bindings the app calls into |
apps/macos |
The Swift/AppKit/SwiftUI app; project.yml generates the Xcode project |
docs/decisions |
Decision records: what was chosen, why, and what was measured |
Pull requests are welcome. CI runs cargo fmt, clippy, and the Rust tests on every
pull request, and changes to master need the maintainer's review. Commits follow
Conventional Commits. For anything bigger than a
fix, read docs/architecture.md and the decision records first;
larger changes usually start with one.
- Architecture: what is built and how the pieces talk
- CLI contract: every command, its JSON, and exit codes
- Reminder semantics: how reminders are scheduled and delivered
- Distribution: install, update, uninstall, and releasing without a Developer ID
- Platform support: tested Macs and known limits
- Agent skill: how agents should use
rallo






