A lightweight, modern C# CLI tool for managing your Toodledo tasks directly from the terminal. Built with Spectre.Console for a beautiful, interactive command-line experience.
- π¨ Beautiful CLI Interface: Powered by Spectre.Console with rich colors, tables, and formatting
- β‘ Detailed Task Control: Set priority, folder, context, due dates, tags, and notes directly from the command line
- π·οΈ Tag Support: Organize tasks with tags using
#tagshorthand and a dedicatedtagcommand - π Note Management: Add detailed notes to tasks with
n:"..."shorthand and a dedicatednotecommand - π Powerful Filters & Search: Apply complex filters (priority, folder, context) or search by keyword
- π― Smart Random Selection: Intelligent task picking avoids repetition
- π Secure OAuth2 Authentication: Industry-standard OAuth2 flow with automatic token refresh
- πΎ Persistent Sessions: Log in once, stay authenticated for 30 days via refresh tokens
- π Automatic Browser Launch: Seamless authentication flow with automatic browser handling
- π¦ Modular Architecture: Service-based design for maintainability
- π₯οΈ Standardized UI: Consistent 100-column width for all views
- β¨ Modern Code: 100% clean build with zero warnings (Nullable Reference Types enabled)
| Command | Description |
|---|---|
list |
Display all current tasks in a formatted table |
stats |
Show productivity dashboard with charts and progress |
add [text] [params] |
Create task. Params: p:[0-3], f:[name], @[name], !:[date], `*:[1 |
edit [id] |
Edit task using "Shadow Prompt" shorthand mode (supports same params as add) |
view [id] |
View full task details (including notes) |
tag [id]... [tags] |
Quickly update tags for one or more tasks |
note [id]... [text] |
Quickly update note for one or more tasks |
done [id]... |
Mark one or more tasks as completed |
delete [id]... |
Permanently remove one or more tasks |
star [id]... |
Star one or more tasks |
unstar [id]... |
Unstar one or more tasks |
find [text] |
Search for tasks by title or keyword |
filter [params] |
List tasks matching parameters. Params: p:[0-3], f:[name], @[name], !:[date], `*:[1 |
folder [search] |
List all folders (optional search filtering) |
folder-add [name] |
Create a new folder |
| `folder-edit [i | n] [new]` |
| `folder-delete [i | n]...` |
context [search] |
List all contexts (optional search filtering) |
context-add [name] |
Create a new context |
| `context-edit [i | n] [new]` |
| `context-delete [i | n]...` |
location [search] |
List all locations (optional search filtering) |
location-add [name] |
Create a new location |
| `location-edit [i | n] [new]` |
| `location-delete [i | n]...` |
setup |
Run the API credential setup wizard |
random [params] |
Pick a random task matching parameters. Params: p:[0-3], f:[name], @[name], !:[date], `*:[1 |
help |
Show available commands and usage information |
exit |
Close the application |
- .NET 8.0 SDK or later
- A Toodledo account
- Toodledo API credentials (Client ID and Client Secret)
Before you can use this application, you need to register it with Toodledo to get API credentials:
-
Log in to Toodledo: Go to https://www.toodledo.com/
-
Navigate to API Settings: Visit https://api.toodledo.com/3/account/doc_register.php
-
Register Your Application:
- Application Name: Choose any name (e.g., "My Toodledo Console")
- Description: Brief description of your personal use
- Redirect URI:
http://localhost:5000/callback - Application Type: Select "Desktop Application" or "Other"
-
Save Your Credentials: After registration, you'll receive:
- Client ID: A unique identifier for your application
- Client Secret: A secret key for authentication
β οΈ Keep these credentials secure! Never share them or commit them to version control.
git clone https://github.com/ChrisJCraft/ToodledoConsole.git
cd ToodledoConsoledotnet restoredotnet runOn first run, if auth.txt is missing, the Setup Wizard will launch automatically:
- Follow the prompts to enter your Client ID and Client Secret.
- Credentials will be saved securely to
auth.txt(which is ignored by Git).
Alternatively, you can manually create auth.txt in the root folder:
YOUR_CLIENT_ID
YOUR_CLIENT_SECRET
- A browser window will open automatically.
- If it doesn't open, manually navigate to
http://localhost:5000. - You'll be redirected to Toodledo to authorize the application.
- After authorization, you'll be redirected back and can close the browser.
- The application will save your access token for future use.
Note: The OAuth2 redirect URI is configured for
http://localhost:5000/callback. Make sure this matches what you registered with Toodledo.
Use these shorthands with the add and edit commands for rapid task entry:
| Shorthand | Description | Example |
|---|---|---|
p:[0-3] |
Priority (0: Low, 1: Medium, 2: High, 3: Top) | add Milk p:2 |
f:[name] |
Folder Name | add Script f:Work |
@[name] |
Context Name | add Bread @Store |
!:[shortcut] |
Due Date (today, tomorrow, next week) | add Taxes !:today |
s:[status] |
Status code (0: None, 1: Next Action, 2: Active, etc.) | add Review s:1 |
#[tag] |
Add a tag (can be used multiple times) | add Release #v0.1.0 #beta |
n:"[text]" |
Add a note (best in quotes) | add Jira n:"Fix bug" |
* or *:1 |
Star the task | add Urgent * |
Pro Tip: You can combine multiple shorthands in a single command!
add Buy milk p:3 @Store f:Personal !:today #groceries n:"Get whole milk"
- Initial Request: The app starts a local web server on port 5000 and opens your browser
- Authorization: You authorize the app on Toodledo's website
- Token Exchange: The app exchanges the authorization code for an access token and refresh token
- Token Storage: Tokens are securely stored in
token.txt(ignored by Git) - Automatic Refresh: When the access token expires, the app automatically refreshes it using the refresh token
The random command uses intelligent tracking to avoid showing the same tasks repeatedly:
- Tracks previously shown tasks in
random_state.json - Resets the pool when all tasks have been shown
- Ensures a fresh experience each time
ToodledoConsole/
βββ Program.cs # Entry point and command loop
βββ AuthService.cs # OAuth2 authentication & token management
βββ TaskService.cs # Task CRUD and retrieval
βββ ContextService.cs # Context management
βββ FolderService.cs # Folder management
βββ LocationService.cs # Location management
βββ FilterService.cs # Task list filtering logic
βββ TaskParserService.cs # Shorthand parsing & task reconstruction
βββ UIService.cs # Standardized UI rendering (Spectre.Console)
βββ InputService.cs # Console input with history
βββ Models.cs # Shared data models
βββ auth.txt # API credentials (NOT in Git)
βββ token.txt # OAuth tokens (NOT in Git)
βββ random_state.json # Random task selection state (NOT in Git)
βββ README.md # This file
If the browser doesn't launch automatically during authentication:
- Manually navigate to
http://localhost:5000in your browser - Check if port 5000 is already in use by another application
This usually means:
- Your
auth.txtfile is missing or incorrectly formatted - Your Client ID or Client Secret is incorrect
- Verify your credentials in the Toodledo API settings
- Run
setupcommand to re-enter credentials
- Ensure your Toodledo app registration has the redirect URI set to:
http://localhost:5000/callback - The URI must match exactly (including the protocol and port)
- Delete
token.txtand restart the application to re-authenticate - The app should automatically refresh tokens, but manual re-auth may be needed if the refresh token expires
- Try running the
listcommand again to refresh the task list - Verify the task ID is correct
- Check your internet connection
If you get an error that port 5000 is already in use:
- Close any other applications using port 5000
- Or modify the port in
AuthService.cs(remember to update your Toodledo redirect URI accordingly)
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Feel free to:
- Report bugs by opening an issue
- Suggest new features
- Submit pull requests
- See CONTRIBUTING.md for details.
Christopher Jay Craft
Enjoy managing your tasks from the terminal! π