Feature-rich interactive CLI task manager with AI integration, calendar sync, and keyword automation
Project description
jott - AI-Powered CLI Project Management
A feature-rich, keyboard-driven task manager with AI integration, calendar sync, and intelligent automation for developers who live in the terminal.
Features
- Quick-add by default: Just start typing, press Enter to save
- Dual-mode interface: Quick-add mode ↔ Command mode (ESC to switch)
- Cross-project task routing:
jott myproject "task"from anywhere - Keyword automation: Tasks starting with
bullet:,gcal:,ai:,analyze:trigger actions - AI integration: Claude Code integration via the
analyze:keyword for task analysis - Google Calendar sync: Bidirectional sync (export tasks, import events)
- Text-to-speech: Read all tasks aloud with Shift+2
- Fuzzy search: Filter tasks quickly with
Ctrl+/ - Fuzzy project picker: Interactive search when moving tasks between projects
- Leader chord system:
.prefix for 20+ shortcuts (e.g.,.mmove,.nnotes) - Category system: Up to 12 categories per project
- Task metadata: Priority, status, day-of-week assignment, notes
- Backup system: Organized monthly backups
Installation
From PyPI (Recommended)
# Basic installation
pip install jott-cli
# With text-to-speech support
pip install jott-cli[tts]
# Verify installation
jott --version
From Source
git clone https://github.com/son1112/jot.git
cd jot
pip install -e .
Quick Start
# Launch jott in current directory
jott
# Add a task from command line
jott "Update documentation"
# Quick-add to specific project
jott myproject "Fix authentication bug"
Usage
Quick-Add Mode (Default)
Just type and press Enter:
> Update README documentation
✓ Added: Update README documentation
Keyboard Shortcuts
Task Management:
.n- Edit task notesCtrl+D- Delete current task.a- Toggle archived tasks.f- Toggle inline notes display.u- Toggle ALL CAPSShift+4- AI-powered task suggestion
Scheduling:
.w- Assign day of week.p- Set priority.x- Set status
AI Integration:
analyze:keyword - Analyze task with Claude Code (plan mode).j- Mark as agent task
Integrations:
Shift+2- Read tasks aloud (TTS)Shift+3- Re-authenticate Google Calendar.G- Export to Google Calendar (single or bulk with time tags).i- Import from Google Calendar.b- Start priority timer (12-minute focus session)
Navigation & System:
↑/↓orCtrl+N/P- Navigate tasksShift+↑/↓- Reorder tasksCtrl+F- Fuzzy search mode.z- Switch project.l- Toggle all categories viewTab- Cycle through categoriesCtrl+R- Register current projectCtrl+U- Open URLs from task textCtrl+X- QuitESC- Switch to command mode
Keyword Automation
Tasks starting with keywords trigger automatic actions:
bullet: Deep work session→ Starts bullet timergcal: Team standup→ Exports to Google Calendarai: Refactor authentication→ Marks for AI assistanceanalyze: Complex feature→ Triggers Claude Code analysis
Categories
Organize tasks with categories (up to 12 per project):
# Switch to category
Ctrl+C
# Create category-specific tasks
jott --category=bugs "Fix login redirect"
Cross-Project Routing
Register projects for quick access:
# Auto-discover projects in ~/projects/
Ctrl+R
# Route task to different project
jott myproject "task text"
Configuration
Task Storage
- Local:
.jot.json(current directory) - Categories:
.jot-categories/{category}.json - Global categories:
~/.jot-categories/ - ID manager:
.jot.ids.json
Google Calendar Setup
- Enable Google Calendar API
- Download credentials
- Save as
~/.jot/gcal-accounts/default/credentials.json - Use
.Gto export tasks
Re-authentication:
- Press
Shift+3to force re-authentication (if token expires or switching accounts) - Or manually:
rm ~/.jot/gcal-accounts/default/token.json
Text-to-Speech Configuration
Edit .jot.config.json:
{
"tts": {
"enabled": true,
"rate": 150,
"volume": 0.9,
"voice": null
}
}
Claude Code Integration
MCP Server
Jot includes an MCP (Model Context Protocol) server for Claude Code integration:
{
"mcpServers": {
"jot": {
"command": "python",
"args": ["/path/to/jot/mcp_server.py"],
"env": {
"JOT_PROJECT_DIR": "/your/workspace"
}
}
}
}
Slash Commands
Available slash commands for Claude Code:
/jot- Show current tasks/jot-add- Add task to current project/jot-done- Mark task as done/jot-current- Set/show current task/jot-to- Add task to specific project
Development
Running Tests
# Run all tests
make test
# Run with coverage
pytest test_jot.py --cov=jot --cov-report=term-missing
# Run linting
make lint
Test Coverage
- 169 tests (all passing)
- Zero linting errors
Security
Jot has undergone comprehensive security hardening:
- ✅ Command injection vulnerability fixed (EDITOR handling)
- ✅ Path traversal validation (category/project names)
- ✅ OAuth token permissions (0o600)
- ✅ Keyword length validation (DoS prevention)
- ✅ AppleScript quote escaping (notification system)
See SECURITY.md for full details.
Contributing
Contributions welcome! See CONTRIBUTING.md.
Development Setup
git clone https://github.com/son1112/jot.git
cd jot
pip install -e ".[dev]"
make format # Format code
make lint # Check linting
make test # Run tests
License
MIT License - see LICENSE
Links
- GitHub: https://github.com/son1112/jot
- PyPI: https://pypi.org/project/jott-cli/
- Issues: https://github.com/son1112/jot/issues
- Changelog: https://github.com/son1112/jot/blob/main/CHANGELOG.md
Author
Anderson Reinkordt (anderson.reinkordt+can@gmail.com)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jott_cli-0.6.0.tar.gz.
File metadata
- Download URL: jott_cli-0.6.0.tar.gz
- Upload date:
- Size: 138.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7527f93cf4daec72452d67c1dbdc8c7cf9e8dcbe92eaf6636b87ba43012fa4a3
|
|
| MD5 |
d9f295bcadd192e8036e652220693435
|
|
| BLAKE2b-256 |
17a907b5d291eb9a1ad88ced8e82fa48349b7af04ba08cd8a78512d169d797b5
|
File details
Details for the file jott_cli-0.6.0-py3-none-any.whl.
File metadata
- Download URL: jott_cli-0.6.0-py3-none-any.whl
- Upload date:
- Size: 112.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96bbd3087411ac0b186a83bc2244d90936d239c8f299fbf00b8d001a3d897cf4
|
|
| MD5 |
5c473f4fb566045a3a6f66d95ef995cf
|
|
| BLAKE2b-256 |
1d64aaa7a6515bddeb4e0bdcb8374665063cda6b2f068b614ecc09f343e2f71c
|