Raycast has a nice setup for making shell scripts into actions. I have one wrapper for emacsclient that just invokes a GUI Emacs window from a running Emacs server and then foregrounds the window:

#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Emacsd
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Emacs

# Documentation:
# @raycast.description Launch Emacs
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph

/opt/homebrew/bin/emacsclient -c --no-wait
osascript -e 'tell application "Emacs" to activate'

… and I made another one that lets me trigger git-auto-sync operations when I’m going to step away for a while and want to make sure everything in my notes repo has been pushed:

#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Sync Notes
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖

# Documentation:
# @raycast.description Run git-auto-sync on notes directory
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph

set -euo pipefail
IFS=$'\n\t'

# ——— set up a user‐level log directory ———
LOGDIR="$HOME/Library/Logs/git-auto-sync"
mkdir -p "$LOGDIR"
LOGFILE="$LOGDIR/sync.log"

on_error() {
    local exit_code=$?
    local lineno=$1
    local msg="ERROR on line $lineno (exit $exit_code)"
    echo "$(date '+%Y-%m-%d %H:%M:%S') ▶ $msg" >>"$LOGFILE"
    logger -t git-auto-sync "$msg"
    terminal-notifier \
        -title "🔥🤖🔥 git-auto-sync FAILED" \
        -message "See Console.app or $LOGFILE" \
        -sound default
    exit $exit_code
}
trap 'on_error $LINENO' ERR

{
    echo "=== Sync started at $(date '+%Y-%m-%d %H:%M:%S') ==="
    logger -t git-auto-sync "Sync started"
    cd "$HOME/notes"
    /opt/homebrew/bin/git-auto-sync s
    echo "=== Sync succeeded at $(date '+%Y-%m-%d %H:%M:%S') ==="
    logger -t git-auto-sync "Sync succeeded"
} >>"$LOGFILE" 2>&1

terminal-notifier \
    -title "🤖 git-auto-sync" \
    -message "Sync complete" \
    -sound default

It uses terminal-notifier to let me know things either worked:

img

… or didn’t:

img

I pinned both actions to the top of my Raycast window:

img

Left to its own devices, git-auto-sync does its thing every few minutes. This is just a way to know it’s safe to close the laptop if I’ve been working in my notes.

I really like Raycast. The number of supported apps in the store is pretty impressive, and there’s a nice SDK/API for making GUI tools. My work Asana is much easier to deal with when I can make a card without having to actually be in the Asana web app, and without having to deal with a plaintext syntax to express which project/board, who owns it, the deadline, etc.