Skip to main content

Overview

RCLI’s 43 actions can be individually enabled or disabled. Preferences persist across sessions in ~/Library/RCLI/config/actions.json.

List All Actions

View all actions with their enabled/disabled status:
rcli actions
Output:
Actions (32 enabled, 11 disabled)

✓ create_note              Create a new note in Apple Notes
✓ create_reminder          Create a reminder in Apple Reminders
— run_shortcut             Run an Apple Shortcut by name
✓ play_on_spotify          Search and play a song/artist on Spotify
...
Legend:
  • ✓ = Enabled
  • — = Disabled

View Single Action Details

Show parameters, examples, and status for a specific action:
rcli actions create_note
Output:
Action: create_note
Description: Create a new note in Apple Notes
Category: productivity
Enabled: yes

Parameters:
  {"title": "note title"}

Example:
  Create a note called Meeting Notes

CLI:
  rcli action create_note '{"title": "Meeting Notes"}'

Enable/Disable Actions

Via TUI (Interactive)

  1. Launch the TUI:
    rcli
    
  2. Press A to open the Actions panel
  3. Navigate with arrow keys
  4. Press Enter to toggle enabled/disabled
  5. Press ESC to close and save preferences
Changes persist immediately to ~/Library/RCLI/config/actions.json.

Via CLI

The CLI commands below are conceptual based on the codebase architecture. The actual CLI implementation may differ. Use rcli --help to see available commands.
Enable an action:
# Conceptual syntax (verify with rcli --help)
rcli action run_shortcut --enable
Disable an action:
rcli action create_note --disable
The current implementation supports direct execution via:
rcli action <name> '<json_args>'
For enable/disable control, use the TUI (press A).

Direct Action Execution

Execute any action directly (bypasses LLM, runs immediately):
rcli action <action_name> '<json_arguments>'

Examples

rcli action create_note '{"title": "Meeting Notes"}'
Note: Actions must be enabled to be called via LLM tool calling. Direct execution via rcli action bypasses the enabled/disabled check.

Persistence

Action preferences are saved to:
~/Library/RCLI/config/actions.json
Format:
{
  "enabled": [
    "create_note",
    "create_reminder",
    "play_on_spotify",
    "open_app",
    "set_volume"
  ],
  "disabled": [
    "run_shortcut",
    "send_message",
    "facetime_call",
    "lock_screen"
  ]
}
Changes made in the TUI or via CLI are written immediately and persist across RCLI restarts. Source: src/actions/action_registry.cpp:177-248

Default Enabled Actions

The following actions are enabled by default (see default_enabled flag in source):

Productivity

  • create_note
  • create_reminder

Media

  • play_on_spotify
  • play_pause_music
  • next_track
  • get_now_playing

System

  • open_app
  • set_volume
  • toggle_dark_mode
  • get_battery
  • get_wifi

Web

  • search_web
All other actions are disabled by default and must be manually enabled.

Filtering Actions for Small LLMs

RCLI uses keyword-based relevance filtering to reduce tool context size for small LLMs:
  1. User query arrives — “play some jazz on Spotify”
  2. Tokenize query — Extract keywords: ["play", "jazz", "spotify"]
  3. Score actions — Each enabled action gets a score based on keyword overlap with name + description
  4. Top-k selection — Return top 20 highest-scoring actions (configurable)
  5. LLM inference — LLM sees only relevant actions, reducing prompt size
This allows 0.6B-1.2B parameter LLMs to handle 43 actions without context overflow. Source: src/actions/action_registry.cpp:47-123

Tool Call Trace

Press T in the TUI to toggle tool call tracing. When enabled, every LLM tool call is displayed inline:
> open Safari
  ~ [TRACE] Tool call: open_app({"app": "Safari"})
  ~ [TRACE] open_app -> OK: {"success": true, "output": "Opened Safari"}
  RCLI: Done! Safari is now open.
Use this to:
  • Debug action failures
  • Verify parameter extraction
  • Evaluate LLM tool-calling accuracy
  • Understand how the LLM routes requests

Benchmark Tool Calling

Run the tool-calling benchmark suite:
rcli bench --suite tools                # Active LLM only
rcli bench --all-llm --suite tools      # Compare all installed LLMs
Output:
Tool Calling Benchmark (LFM2 1.2B Tool)

Accuracy:  95.2% (40/42 correct tool calls)
Latency:   22.5ms average TTFT
           159.6 tok/s generation

Failed calls:
  - "send a message to John" -> No tool call (disabled action)
  - "lock my screen" -> Incorrect tool: toggle_dark_mode
Source: src/bench/ (benchmark harness)

Safety Considerations

Communication Actions Disabled by Default

To prevent accidental messages or calls, all communication actions are disabled by default:
  • send_message
  • facetime_call
  • facetime_audio
Enable them explicitly if you want voice-controlled messaging.

Lock Screen Disabled by Default

lock_screen is disabled to prevent accidental lockouts during voice conversations.

Screenshot Disabled by Default

screenshot is disabled to prevent unintended captures.

Common Workflows

  1. Press A in the TUI
  2. Disable all actions except:
    • create_note, create_reminder
    • play_on_spotify, play_pause_music, next_track, get_now_playing
  3. Press ESC to save
Now RCLI will only respond to note/reminder/music commands.
  1. Press A in the TUI
  2. Enable all 43 actions
  3. Press ESC to save
Use tool call trace (T) to monitor all actions.
rm ~/Library/RCLI/config/actions.json
rcli  # Restart TUI
This resets to default enabled/disabled state.

Troubleshooting

Check:
  1. Verify action is enabled: rcli actions <action_name>
  2. Test direct execution: rcli action <action_name> '{...}'
  3. Check tool call trace (press T in TUI)
  4. Run tool-calling benchmark: rcli bench --suite tools
Common causes:
  • LLM failed to extract correct parameters
  • AppleScript permissions not granted (check System Settings → Privacy)
  • Required app not installed (e.g., Spotify for play_on_spotify)
Check:
  1. Verify file exists: cat ~/Library/RCLI/config/actions.json
  2. Check file permissions: ls -l ~/Library/RCLI/config/
  3. Ensure RCLI has write access to ~/Library/RCLI/
Fix:
mkdir -p ~/Library/RCLI/config
chmod 755 ~/Library/RCLI/config
Solutions:
  1. Use more specific language: “Play Bohemian Rhapsody on Spotify” vs “Play music”
  2. Toggle tool call trace (T) to see what the LLM is calling
  3. Try a larger LLM: rcli upgrade-llm (2B+ models have better tool-calling accuracy)
  4. Benchmark tool calling: rcli bench --all-llm --suite tools

Next Steps

Build docs developers (and LLMs) love