Prioritized daily digest for your Asana tasks — overdue, today, this week — straight in your terminal.
Project description
asanable
Prioritized daily digest for your Asana tasks — overdue, today, this week — straight in your terminal.
Features
- Fetch incomplete Asana tasks assigned to you, sorted by due date
- Score and prioritize: overdue > today > this week > later
- Rich CLI output with colored sections and summary
- Optional: daily scheduler, Slack and Telegram notifications
Setup
git clone https://github.com/navfa/asanable.git && cd asanable
cp .env.example .env
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
Edit .env with your Asana personal access token and workspace GID.
Usage
# First time setup (interactive wizard)
asanable --init
# Run the full digest
asanable
# Summary only (quiet mode)
asanable --quiet
# Filter by project (case-insensitive substring match)
asanable --project "Mobile App"
asanable -p admin
# Use cached data (no API call, instant)
asanable --cache
# Force refresh from API
asanable --refresh
# Show only overdue tasks
asanable --overdue
# Show only tasks due today
asanable --today
# Export as HTML
asanable --output html > digest.html
# Combine flags
asanable -p mobile -q
asanable --cache --overdue
asanable --cache -o html > mobile.html
# Run as a daily scheduler
asanable --schedule
# Show version
asanable --version
Development
All common commands are available via make:
make install # Install project with dev dependencies
make lint # Run linter (with auto-fix)
make format # Format code
make check # Lint + format check (CI mode, no fix)
make test # Run all tests
make cov # Run tests with coverage report (80% threshold)
make run # Run the digest
make quiet # Run digest in quiet mode
make project P="Mobile App" # Filter by project
make html # Export digest as HTML to stdout
make init # Run interactive setup wizard
make schedule # Start the daily scheduler
make clean # Remove build artifacts and caches
Or run commands directly:
# Run a specific test file
pytest tests/unit/test_priority_service.py -v
# Run a single test
pytest tests/unit/test_priority_service.py::TestScoring::test_overdue_gets_highest_score -v
Architecture
CLI (main.py) → Services (business logic) → Clients (external APIs)
↑
Domain (pure entities)
↓
Renderers (CLI, HTML, Slack, Telegram)
| Layer | Responsibility |
|---|---|
domain/ |
Pure dataclasses: AsanaTask, DigestItem, Digest |
clients/ |
API wrappers returning domain entities (Asana SDK) |
services/ |
Business logic: scoring, digest building |
renderers/ |
Output formatting: rich CLI, HTML, Slack blocks, Telegram markdown |
scheduler/ |
Daily cron via schedule lib |
Configuration
All settings via environment variables (.env file). See .env.example for the full list.
| Variable | Required | Default | Description |
|---|---|---|---|
ASANA_ACCESS_TOKEN |
yes | — | Asana personal access token |
ASANA_WORKSPACE_GID |
yes | — | Asana workspace GID |
DIGEST_SCHEDULE_TIME |
no | 08:00 |
Daily digest time (for --schedule mode) |
SLACK_WEBHOOK_URL |
no | — | Slack incoming webhook URL |
TELEGRAM_BOT_TOKEN |
no | — | Telegram bot token |
TELEGRAM_CHAT_ID |
no | — | Telegram chat ID |
License
MIT
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 asanable-1.0.0.tar.gz.
File metadata
- Download URL: asanable-1.0.0.tar.gz
- Upload date:
- Size: 4.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9779b24001ecfde332baa77ec6a350c182d71ed491e309d014f71bc7f3b60c21
|
|
| MD5 |
7ef633f42b193be1c0e121851ca6dec2
|
|
| BLAKE2b-256 |
c9bea2bbb9647168d56b6497c9dd20d87fbfc1cd67dc1bc7765a79fb895b54b2
|
File details
Details for the file asanable-1.0.0-py3-none-any.whl.
File metadata
- Download URL: asanable-1.0.0-py3-none-any.whl
- Upload date:
- Size: 24.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5db3ff1b5053d7c0d62d1a687c148c91a82543748689767effaf10bf54504fcf
|
|
| MD5 |
84ec165d2f5598004eff56f24416423e
|
|
| BLAKE2b-256 |
ce7f181168607b72fb726f5e0e8a2aaf438fb980bb885f49f72f77b425bf0dcf
|