A tool to queue Claude Code prompts and automatically execute them when token limits reset, preventing manual waiting during 5-hour limit windows.
- Markdown-based Queue: Each prompt is a
.mdfile with YAML frontmatter - Automatic Rate Limit Handling: Detects rate limits and waits for reset windows
- Priority System: Execute high-priority prompts first
- Retry Logic: Automatically retry failed and rate-limited prompts; both share the
max_retriestotal-attempts counter - Persistent Storage: Queue survives system restarts
- Prompt Bank: Save and reuse templates for recurring tasks
- Interactive Prompt Box: Browse and select files interactively with fuzzy search
- CLI Interface: Simple command-line interface
pip install claude-code-queueOptional Rust TUI: The interactive prompt-box feature requires opting in at
install time. To build it, you need the Rust toolchain and:
BUILD_RUST=1 pip install claude-code-queueWithout BUILD_RUST=1, the rest of claude-code-queue installs and works
normally — only claude-queue prompt-box will be unavailable.
Linux only: building prompt-box also requires X11 development headers
(libxcb-dev on Debian/Ubuntu, libxcb-devel on Fedora/RHEL, libxcb on Arch).
At runtime, clipboard support requires xclip or xsel to be installed.
If you use Claude Code, install the bundled /queue
skill so Claude can help you construct and manage queue tasks:
claude-queue install-skillThis copies a SKILL.md to ~/.claude/skills/queue/. After restarting Claude
Code, type /queue to invoke it directly, and Claude will also proactively
suggest queuing when a task is complex or likely to hit rate limits. Use
--force to update an existing installation after upgrading the package.
Or, for local development:
cd claude-code-queue
pip install -e .After installation, use the claude-queue command:
-
Test Claude Code connection:
claude-queue test -
Add a quick prompt:
claude-queue add "Fix the authentication bug" --priority 1 -
Create a detailed prompt template:
claude-queue template my-feature --priority 2 # Edit ~/.claude-queue/queue/my-feature.md with your prompt -
Launch the interactive prompt box:
claude-queue prompt-box
-
Start the queue processor:
claude-queue start
Quick prompt:
claude-queue add "Implement user authentication" --priority 1 --working-dir /path/to/projectTemplate for detailed prompt:
claude-queue template auth-featureThis creates ~/.claude-queue/queue/auth-feature.md:
---
priority: 0
working_directory: .
context_files: []
max_retries: 3
estimated_tokens: null
---
# Prompt Title
Write your prompt here...
## Context
Any additional context or requirements...
## Expected Output
What should be delivered...Check status:
claude-queue status --detailedList prompts:
claude-queue list --status queuedCancel a prompt:
claude-queue cancel abc123Start processing:
claude-queue startStart with verbose output:
claude-queue start --verboseThe Prompt Bank allows you to save and reuse templates for recurring tasks like daily documentation updates, weekly reports, or standard maintenance tasks.
Create a new template in the bank:
claude-queue bank save update-docs --priority 1This creates ~/.claude-queue/bank/update-docs.md which you can edit:
---
priority: 1
working_directory: /path/to/project
context_files:
- README.md
- docs/
max_retries: 3
estimated_tokens: 1500
---
# Update Project Documentation
Please review and update the project documentation:
## Tasks
1. Update README.md with latest features
2. Check code examples are current
3. Update API documentation
4. Fix any broken links
## Context
This is the daily documentation review task.List available templates:
claude-queue bank listUse a template (adds to queue):
claude-queue bank use update-docsDelete a template:
claude-queue bank delete update-docs-
One-time setup:
# Create and customize your template claude-queue bank save daily-standup --priority 1 # Edit ~/.claude-queue/bank/daily-standup.md with your specific requirements
-
Daily usage:
# Simply add to queue whenever needed claude-queue bank use daily-standup claude-queue start
This eliminates the need to recreate the same prompt structure every time!
The prompt box provides an interactive terminal UI for browsing and selecting files with fuzzy search capabilities.
claude-queue prompt-box- Fuzzy File Search: Type to filter files by name or path
- Real-time Preview: See file contents as you navigate
- Keyboard Navigation: Use arrow keys to browse files
- File Selection: Select files to include in prompts
- Directory Traversal: Browse through project directories
- Copy to Clipboard: Copy file paths or contents
Input Mode:
↑/↓: Navigate history←/→: Move cursor left/rightHome/End: Move cursor to beginning/endEnter: Submit inputTab: Trigger file picker for @ mentionsCtrl+C: Copy to clipboardCtrl+Q: Quit application
Picker Mode (file selection):
↑/↓: Navigate through filesEnter: Select current fileEsc: Exit picker mode- Type to search files with fuzzy matching
The prompt box is built with Rust for fast file indexing and responsive UI, making it easy to explore large codebases and select relevant files for your Claude Code prompts.
- Queue Processing: Runs prompts in priority order (lower number = higher priority)
- Rate Limit Detection: Monitors Claude Code output for rate limit messages
- Automatic Waiting: When rate limited, parses the actual reset time from Claude's output when available; falls back to estimating the next 5-hour window boundary otherwise
- Retry Logic: Failed prompts are retried up to
max_retriestotal attempts. Interrupted prompts (from crashes or ungraceful shutdowns) are automatically re-queued on the next startup — at-least-once semantics apply: a task that finished but whose result was not saved before a crash will run again. Design tasks to be idempotent where possible. - File Organization:
~/.claude-queue/queue/- Pending prompts~/.claude-queue/completed/- Successful executions~/.claude-queue/failed/- Failed prompts~/.claude-queue/bank/- Saved template library~/.claude-queue/queue-state.json- Queue metadata
- Execution Logs: After each execution attempt, a log is appended to the prompt's
.mdfile for human inspection. The log is automatically stripped before the prompt is sent to Claude, so Claude always receives only the original prompt text regardless of how many times the task has been retried.
claude-queue --helpKey options:
--storage-dir: Queue storage location (default:~/.claude-queue)--claude-command: Claude CLI command (default:claude)--check-interval: Check interval in seconds (default: 30)--timeout: Command timeout in seconds (default: 3600)
Each prompt supports these YAML frontmatter options:
---
priority: 1 # Execution priority (0 = highest)
working_directory: /path/to/project # Where to run the prompt
context_files: # Files to include as context
- src/main.py
- README.md
max_retries: 3 # Maximum total execution attempts (1 = no retries, -1 = unlimited)
estimated_tokens: 1000 # Estimated token usage (optional)
---max_retries semantics: this field controls the total number of execution attempts, not the number of retries after the first failure. max_retries: 3 means 3 total attempts (initial + 2 retries); max_retries: 1 means a single attempt with no retries; max_retries: -1 means unlimited retries. Rate-limited executions and failure retries share the same counter.
# Add a simple prompt
claude-queue add "Run tests and fix any failures" --priority 1
# Create template for complex prompt
claude-queue template database-migration --priority 2
# Launch interactive file browser
claude-queue prompt-box
# Save a reusable template
claude-queue bank save update-docs --priority 1
# Use a saved template
claude-queue bank use update-docs
# Start processing
claude-queue start---
priority: 1
working_directory: /Users/me/my-project
context_files:
- src/auth.py
- tests/test_auth.py
- docs/auth-requirements.md
max_retries: 2
estimated_tokens: 2000
---
# Fix Authentication Bug
There's a bug in the user authentication system where users can't log in with special characters in their passwords.
## Context
- The issue affects passwords containing @, #, $ symbols
- Error occurs in the password validation function
- Tests are failing in test_auth.py
## Requirements
1. Fix the password validation to handle special characters
2. Update tests to cover edge cases
3. Ensure backward compatibility
## Expected Output
- Fixed authentication code
- Updated test cases
- Documentation update if neededThe system automatically detects Claude Code rate limits by monitoring:
- "usage limit reached" messages
- Claude's reset time information
- Standard rate limit error patterns
When rate limited:
- Prompt status changes to
rate_limited - The queue determines the reset time using a two-tier strategy:
- Parsed reset time: extracts the actual reset time from Claude's output when available
- Estimated reset time: falls back to estimating the next 5-hour window boundary (00:00–05:00, 05:00–10:00, 10:00–15:00, 15:00–20:00, 20:00–01:00) based on the current time
- Once the reset time is reached, the prompt is re-queued and execution resumes
Queue not processing:
# Check Claude Code connection
claude-queue test
# Check queue status
claude-queue status --detailedPrompts stuck in executing state:
Interrupted prompts are automatically re-queued on the next startup — no manual intervention is needed. Simply restart the queue:
claude-queue startWarning — at-least-once execution: If the daemon was killed after Claude finished but before the result was saved to disk, the task will run again on restart. Design tasks to be idempotent (safe to run more than once) where possible.
Rate limit not detected:
- Check if Claude Code output format changed
- File an issue with the error message you received
~/.claude-queue/
├── queue/ # Pending prompts
│ ├── 001-fix-bug.md
│ └── 002-feature.executing.md
├── completed/ # Successful executions
│ └── 001-fix-bug-completed.md
├── failed/ # Failed prompts
│ └── 003-failed-task.md
├── bank/ # Saved template library
│ ├── update-docs.md
│ ├── daily-standup.md
│ └── weekly-report.md
└── queue-state.json # Queue metadata