The system manages tasks with priorities, due dates, tags, and interdependencies, using SQLite persistence via Drizzle ORM
and integrates with Ollama for intelligent prioritization suggestions based on the user’s historical patterns.
Live Demo · Documentation · Article ·
- Overview
- Features
- Tech Stack
- Getting Started
- Usage
- API Reference
- Screenshots
- Contributing
- Authors
- Acknowledgements
- License
Tache CLI is a lightweight task, project, and calendar management system built for real-world use, designed for programmers and IT and technology professionals in general who prefer to work directly from the command line.
It enables fast and organized task and project management through a terminal-centric experience,
with support for priorities, deadlines, reminders, alarms, and smart notifications.
Tache CLI can be integrated with Large Language Models (LLMs), transforming task and project management into an intelligent workflow assistant.
-
Task CRUD & Validation
Full create, read, update, and delete operations for tasks, with strict schema validation powered by Zod
— ensuring all inputs are type-safe and well-formed before hitting the database. -
Project & Subtask Management
Support for hierarchical task structures, allowing users to create projects with nested subtasks,
and manage dependencies between them (e.g., a subtask cannot be marked complete until its parent task is done). -
Task Scheduling
Tasks can be scheduled for future execution using cron job syntax or thetaimplexsyntax, allowing users to set recurring or one-time deadlines that trigger background jobs automatically. -
Real-Time Notifications
An event-driven notification system using Node.jsEventEmitter
that fires alerts when tasks are created, updated, completed, or overdue — without polling. -
Export / Import
Users can export their full task list (or filtered subsets) to JSON, CSV, or raw SQL,
and re-import from any of those formats — useful for backups, migrations, or data sharing. -
Fuzzy Search with Levenshtein Distance
A search engine that finds resources even with typos or partial matches,
using the Levenshtein distance algorithm to rank results by similarity. -
Undo / Redo
A command history stack that lets users undo or redo any destructive action (delete, bulk update, etc.) within the current session. -
Custom Norminette Lentte
A project-specific linting ruleset that enforces text style conventions similar to 42's norminette — length limits, naming rules, and forbidden patterns — with clear error messages and auto-fix suggestions. -
Detailed Logging Vlogging
A structured logging module -vlogging- inspired by 42'sft_printfproject,
with log levels, timestamps, color-coded output, and optional verbose mode for debugging internals. -
Memory & Resource Tracking
A lightweight tracker that monitors heap usage, open handles,
and DB connection counts throughout the process lifecycle — surfaced via a--statsCLI flag.
| Layer | Technology |
|---|---|
| Core Language | TypeScript |
| Frontend | Commander.js, Klaur |
| Compiler | Bun |
| Database | SQLite, DrizzleORM |
| DevOps | Docker, Jenkins |
| Testing | Vitest |
| Log | Vlogging |
| Linter | Lentte |
For local development, test, and contribution purposes, you will need to have the following software installed on your machine.
bun = 1.3.14
pnpm >= 10.33.0
docker >= 29.3.0 # optional1. Clone the repository
git clone https://github.com/fevunge/tache-cli.git
cd tache-cli2. Install dependencies
make setup2.1. Compile JS code
make compile2.2. Build executable
make 3. Set up environment variables
make env5. Run at development env
bun dev --help # to run TypeScript code
bun start --help # to run compiled JavaScript code6. Run compiled project
chmod u+x ./bin/tache
./bin/tache --help 7. Install at your local machine
make install
tache --helpCreate a .env file in the root directory. See .env.example for reference.
| Variable | Description | Required |
|---|---|---|
RESOURCE_PATH |
Path to resource files | [x] |
LLM_API_KEY |
API key for LLM integration | [x] |
# Create a new task
$ tache create "Finish project report" --priority high --due "2024-07-01"# Create a project with subtasks and dependencies
$ tache create "Launch Marketing Campaign" --type project
$ tache create "Design Ad Creatives" --parent "Launch Marketing Campaign" --due "2024-06-15"
$ tache create "Set Up Email List" --parent "Launch Marketing Campaign" --due "2024-06-20"
$ tache create "Schedule Social Media Posts" --parent "Launch Marketing Campaign" --due "2024-06-25"💡 Tip: Check the
/examplesdirectory for more comprehensive usage patterns.
Full API reference available at /docs/api.md
GET /api/v1/resource: Returns a list of resources.POST /api/v1/resource: Creates a new resource.
Full API reference available at /docs/api.md
Contributions are what make the open source community incredible.
Any contributions you make are greatly appreciated.
- Fork the repository
- Create your feature branch:
git checkout -b feat/feature-or-bugfix - Commit your changes:
git commit -m 'feat: add some amazing feature or fix a bug' - Push to the branch:
git push origin feat/feature-or-bugfix - Open a Pull Request
Please read CONTRIBUTING.md if it exists for more details on our code of conduct, and the process for submitting pull requests.
Please, follow Conventional Commits:
feat(scope): New feature
fix(scope): Bug fix
docs(scope): Documentation update
style(scope): Formatting (no logic change)
refactor(scope): Code refactoring
test(scope): Adding tests
chore(scope): Maintenance tasks
Made with 🧠 by fevunge
⭐ Star this repo if you found it useful or interesting!
- Awesome Library — Used for X feature
- Design Inspiration — UI/UX reference
- Community Resource — Problem-solving guidance
- Open Source Project — Architectural patterns
Distributed under the MIT License.
