taskulus 0.1.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- taskulus-0.3.0/PKG-INFO +185 -0
- taskulus-0.3.0/README.md +155 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/pyproject.toml +18 -1
- taskulus-0.3.0/src/taskulus.egg-info/PKG-INFO +185 -0
- taskulus-0.1.0/PKG-INFO +0 -20
- taskulus-0.1.0/README.md +0 -3
- taskulus-0.1.0/src/taskulus.egg-info/PKG-INFO +0 -20
- {taskulus-0.1.0 → taskulus-0.3.0}/setup.cfg +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/__init__.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/cache.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/cli.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/config.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/config_loader.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/daemon.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/daemon_client.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/daemon_paths.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/daemon_protocol.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/daemon_server.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/dependencies.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/dependency_tree.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/doctor.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/file_io.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/hierarchy.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/ids.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/index.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_close.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_comment.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_creation.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_delete.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_display.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_files.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_listing.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_lookup.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_transfer.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/issue_update.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/maintenance.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/migration.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/models.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/project.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/queries.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/users.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/wiki.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus/workflows.py +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus.egg-info/SOURCES.txt +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus.egg-info/dependency_links.txt +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus.egg-info/entry_points.txt +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus.egg-info/requires.txt +0 -0
- {taskulus-0.1.0 → taskulus-0.3.0}/src/taskulus.egg-info/top_level.txt +0 -0
taskulus-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: taskulus
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: A git-backed project management system.
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Homepage, https://taskul.us
|
|
7
|
+
Project-URL: Repository, https://github.com/AnthusAI/Taskulus
|
|
8
|
+
Project-URL: Issues, https://github.com/AnthusAI/Taskulus/issues
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Software Development :: Bug Tracking
|
|
17
|
+
Classifier: Topic :: Software Development :: Version Control
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
Requires-Dist: click
|
|
21
|
+
Requires-Dist: jinja2
|
|
22
|
+
Requires-Dist: pydantic
|
|
23
|
+
Requires-Dist: pyyaml
|
|
24
|
+
Requires-Dist: pydantic-settings
|
|
25
|
+
Requires-Dist: behave
|
|
26
|
+
Requires-Dist: coverage
|
|
27
|
+
Requires-Dist: ruff
|
|
28
|
+
Requires-Dist: black
|
|
29
|
+
Requires-Dist: sphinx
|
|
30
|
+
|
|
31
|
+
# Taskulus
|
|
32
|
+
|
|
33
|
+
**A tiny Jira clone for your repo.**
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+

|
|
37
|
+

|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
## Inspiration & Lineage
|
|
41
|
+
|
|
42
|
+
Taskulus is a spiritual successor to [Beads](https://github.com/steveyegge/beads), inspired by its elegant, domain-specific approach to project management. We are deeply grateful to the Beads author and community for proving that a dedicated cognitive framework for tasks is game-changing.
|
|
43
|
+
|
|
44
|
+
Taskulus builds on this foundation by adapting the model to be a thinner, more native layer over Git—optimizing for AI agents and distributed teams:
|
|
45
|
+
|
|
46
|
+
* **A Thinner Layer over Git**: We removed the secondary SQLite index. The complexity of maintaining and synchronizing a shadow database isn't worth the operational cost. Taskulus reads files directly.
|
|
47
|
+
* **Better Storage Alignment**: Things like "exclusively claiming" a task don't align well with the distributed Git model. We removed them to ensure the tool behaves exactly like the version control system underneath it.
|
|
48
|
+
* **Conflict-Free Storage**: Instead of a single JSON-L file (which guarantees merge conflicts when agents work in parallel), Taskulus stores separate tasks in separate files. This eliminates conflicts and allows deep linking to specific issues from GitHub.
|
|
49
|
+
* **Streamlined Cognitive Model**: Beads is powerful but complex, with 130+ attributes per issue. We streamlined this to a focused core (Status, Priority, Dependencies) to reduce the "context pollution" for AI agents. We want the model to think about the work, not how to use the tracker. The goal is a **helpful cognitive model** that unburdens your mental state rather than adding to it.
|
|
50
|
+
* **AI-Native Nomenclature**: Instead of teaching models new terms like "beads", we use the standard Jira vocabulary (Epics, Tasks, Sub-tasks) that AI models are already extensively pre-trained on. This leverages their existing knowledge graph for better reasoning.
|
|
51
|
+
* **Git-Native Scoping**: We replaced complex "contributor roles" with standard Git patterns. Want local tasks? Just `.gitignore` a folder. Working in a monorepo? Taskulus respects your current directory scope automatically.
|
|
52
|
+
|
|
53
|
+
## Frictionless Workflow
|
|
54
|
+
|
|
55
|
+
Taskulus is designed to **remove friction**, not add it.
|
|
56
|
+
|
|
57
|
+
* **No Syncing**: There is no secondary database to synchronize. The files on disk are the source of truth. You will never be blocked from pushing code because a background daemon is out of sync.
|
|
58
|
+
* **Git Hooks Help You**: Git hooks should assist your workflow, not interrupt it. Taskulus hooks are designed to be invisible helpers, ensuring data integrity without stopping you from getting work done.
|
|
59
|
+
|
|
60
|
+
For a detailed comparison, see [Taskulus vs. Beads](docs/VS_BEADS.md).
|
|
61
|
+
|
|
62
|
+
## Why Taskulus?
|
|
63
|
+
|
|
64
|
+
### 1. The Sleep Factor
|
|
65
|
+
Offload your mental context. Instead of keeping 15 different chat sessions and open loops in your head, tell your agent to "record the current state" into Taskulus. It's a permanent, searchable memory bank for your AI workforce.
|
|
66
|
+
|
|
67
|
+
### 2. Files are the Database
|
|
68
|
+
- **No SQL Server**: We removed the SQLite daemon entirely. Each command reads the JSON files directly, so there is nothing to synchronize or keep running.
|
|
69
|
+
- **No JSONL Merge Conflicts**: There is no monolithic JSONL file. Every issue has its own JSON document, which eliminates merge conflicts when teams (or agents) edit work in parallel.
|
|
70
|
+
- **No Daemon**: There is no background process to crash or manage.
|
|
71
|
+
- **No API**: Your agents read and write files directly (or use the simple CLI).
|
|
72
|
+
|
|
73
|
+
### 3. Concurrency Solved
|
|
74
|
+
Unlike other file-based systems that use a single JSONL file (guaranteeing merge conflicts), Taskulus stores **one issue per file**. This allows multiple agents and developers to work in parallel without blocking each other.
|
|
75
|
+
|
|
76
|
+
### 4. Jira + Confluence for Agents
|
|
77
|
+
Taskulus includes a **Wiki Engine** that renders Markdown templates with live issue data. Your planning documents always reflect the real-time state of the project, giving agents the "forest view" they often lack.
|
|
78
|
+
|
|
79
|
+
### 5. Zero Cost Footprint
|
|
80
|
+
There are no per-seat licenses or hosted fees. If you have a git repository, you already have the database—and that keeps Taskulus affordable for very large teams (or fleets of agents).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Status: Planning Phase
|
|
85
|
+
|
|
86
|
+
This repository contains the complete vision, implementation plan, and task breakdown for building Taskulus. We are building it in public, using Taskulus (via Beads) to track itself.
|
|
87
|
+
|
|
88
|
+
## Quick Start
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Initialize a new project
|
|
92
|
+
tsk init
|
|
93
|
+
|
|
94
|
+
# Create an issue
|
|
95
|
+
tsk create "Implement the login flow"
|
|
96
|
+
|
|
97
|
+
# List open tasks
|
|
98
|
+
tsk list --status todo
|
|
99
|
+
|
|
100
|
+
# Show details
|
|
101
|
+
tsk show tsk-a1b
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Daemon Behavior
|
|
105
|
+
|
|
106
|
+
Taskulus uses a just-in-time index daemon for read-heavy commands such as `tsk list`. The CLI auto-starts the daemon when needed, reuses a healthy socket, and removes stale sockets before restarting.
|
|
107
|
+
|
|
108
|
+
To disable daemon mode for a command:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
TASKULUS_NO_DAEMON=1 tsk list
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Operational commands:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
tsk daemon-status
|
|
118
|
+
tsk daemon-stop
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Python vs Rust
|
|
122
|
+
|
|
123
|
+
We provide two implementations driven by the same behavior specification:
|
|
124
|
+
|
|
125
|
+
**Choose Python if:**
|
|
126
|
+
- You want easy `pip install` with no compilation
|
|
127
|
+
- You are scripting custom agent workflows
|
|
128
|
+
|
|
129
|
+
**Choose Rust if:**
|
|
130
|
+
- You need maximum performance (sub-millisecond queries)
|
|
131
|
+
- You have a massive repository (> 2000 issues)
|
|
132
|
+
|
|
133
|
+
## Project Structure
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
Taskulus/
|
|
137
|
+
|-- planning/
|
|
138
|
+
| |-- VISION.md # Complete specification
|
|
139
|
+
| `-- IMPLEMENTATION_PLAN.md # Detailed technical plan
|
|
140
|
+
|-- specs/ # Shared Gherkin feature files
|
|
141
|
+
|-- python/ # Python implementation
|
|
142
|
+
|-- rust/ # Rust implementation
|
|
143
|
+
|-- apps/ # Public website (Gatsby)
|
|
144
|
+
`-- .beads/ # Project task database
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Contributing
|
|
148
|
+
|
|
149
|
+
We welcome contributions! Please:
|
|
150
|
+
1. Pick a task from `bd ready` (we use Beads for bootstrapping).
|
|
151
|
+
2. Follow the BDD workflow in [AGENTS.md](AGENTS.md).
|
|
152
|
+
3. Ensure all quality gates pass.
|
|
153
|
+
|
|
154
|
+
## Testing
|
|
155
|
+
|
|
156
|
+
Run the full quality gates:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
make check-all
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Run only Python checks:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
make check-python
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Run only Rust checks:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
make check-rust
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Benchmarking
|
|
175
|
+
|
|
176
|
+
Run index build and cache load benchmarks:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
python tools/benchmark_index.py
|
|
180
|
+
cd rust && cargo run --release --bin index_benchmark
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
MIT
|
taskulus-0.3.0/README.md
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Taskulus
|
|
2
|
+
|
|
3
|
+
**A tiny Jira clone for your repo.**
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
## Inspiration & Lineage
|
|
11
|
+
|
|
12
|
+
Taskulus is a spiritual successor to [Beads](https://github.com/steveyegge/beads), inspired by its elegant, domain-specific approach to project management. We are deeply grateful to the Beads author and community for proving that a dedicated cognitive framework for tasks is game-changing.
|
|
13
|
+
|
|
14
|
+
Taskulus builds on this foundation by adapting the model to be a thinner, more native layer over Git—optimizing for AI agents and distributed teams:
|
|
15
|
+
|
|
16
|
+
* **A Thinner Layer over Git**: We removed the secondary SQLite index. The complexity of maintaining and synchronizing a shadow database isn't worth the operational cost. Taskulus reads files directly.
|
|
17
|
+
* **Better Storage Alignment**: Things like "exclusively claiming" a task don't align well with the distributed Git model. We removed them to ensure the tool behaves exactly like the version control system underneath it.
|
|
18
|
+
* **Conflict-Free Storage**: Instead of a single JSON-L file (which guarantees merge conflicts when agents work in parallel), Taskulus stores separate tasks in separate files. This eliminates conflicts and allows deep linking to specific issues from GitHub.
|
|
19
|
+
* **Streamlined Cognitive Model**: Beads is powerful but complex, with 130+ attributes per issue. We streamlined this to a focused core (Status, Priority, Dependencies) to reduce the "context pollution" for AI agents. We want the model to think about the work, not how to use the tracker. The goal is a **helpful cognitive model** that unburdens your mental state rather than adding to it.
|
|
20
|
+
* **AI-Native Nomenclature**: Instead of teaching models new terms like "beads", we use the standard Jira vocabulary (Epics, Tasks, Sub-tasks) that AI models are already extensively pre-trained on. This leverages their existing knowledge graph for better reasoning.
|
|
21
|
+
* **Git-Native Scoping**: We replaced complex "contributor roles" with standard Git patterns. Want local tasks? Just `.gitignore` a folder. Working in a monorepo? Taskulus respects your current directory scope automatically.
|
|
22
|
+
|
|
23
|
+
## Frictionless Workflow
|
|
24
|
+
|
|
25
|
+
Taskulus is designed to **remove friction**, not add it.
|
|
26
|
+
|
|
27
|
+
* **No Syncing**: There is no secondary database to synchronize. The files on disk are the source of truth. You will never be blocked from pushing code because a background daemon is out of sync.
|
|
28
|
+
* **Git Hooks Help You**: Git hooks should assist your workflow, not interrupt it. Taskulus hooks are designed to be invisible helpers, ensuring data integrity without stopping you from getting work done.
|
|
29
|
+
|
|
30
|
+
For a detailed comparison, see [Taskulus vs. Beads](docs/VS_BEADS.md).
|
|
31
|
+
|
|
32
|
+
## Why Taskulus?
|
|
33
|
+
|
|
34
|
+
### 1. The Sleep Factor
|
|
35
|
+
Offload your mental context. Instead of keeping 15 different chat sessions and open loops in your head, tell your agent to "record the current state" into Taskulus. It's a permanent, searchable memory bank for your AI workforce.
|
|
36
|
+
|
|
37
|
+
### 2. Files are the Database
|
|
38
|
+
- **No SQL Server**: We removed the SQLite daemon entirely. Each command reads the JSON files directly, so there is nothing to synchronize or keep running.
|
|
39
|
+
- **No JSONL Merge Conflicts**: There is no monolithic JSONL file. Every issue has its own JSON document, which eliminates merge conflicts when teams (or agents) edit work in parallel.
|
|
40
|
+
- **No Daemon**: There is no background process to crash or manage.
|
|
41
|
+
- **No API**: Your agents read and write files directly (or use the simple CLI).
|
|
42
|
+
|
|
43
|
+
### 3. Concurrency Solved
|
|
44
|
+
Unlike other file-based systems that use a single JSONL file (guaranteeing merge conflicts), Taskulus stores **one issue per file**. This allows multiple agents and developers to work in parallel without blocking each other.
|
|
45
|
+
|
|
46
|
+
### 4. Jira + Confluence for Agents
|
|
47
|
+
Taskulus includes a **Wiki Engine** that renders Markdown templates with live issue data. Your planning documents always reflect the real-time state of the project, giving agents the "forest view" they often lack.
|
|
48
|
+
|
|
49
|
+
### 5. Zero Cost Footprint
|
|
50
|
+
There are no per-seat licenses or hosted fees. If you have a git repository, you already have the database—and that keeps Taskulus affordable for very large teams (or fleets of agents).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Status: Planning Phase
|
|
55
|
+
|
|
56
|
+
This repository contains the complete vision, implementation plan, and task breakdown for building Taskulus. We are building it in public, using Taskulus (via Beads) to track itself.
|
|
57
|
+
|
|
58
|
+
## Quick Start
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Initialize a new project
|
|
62
|
+
tsk init
|
|
63
|
+
|
|
64
|
+
# Create an issue
|
|
65
|
+
tsk create "Implement the login flow"
|
|
66
|
+
|
|
67
|
+
# List open tasks
|
|
68
|
+
tsk list --status todo
|
|
69
|
+
|
|
70
|
+
# Show details
|
|
71
|
+
tsk show tsk-a1b
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Daemon Behavior
|
|
75
|
+
|
|
76
|
+
Taskulus uses a just-in-time index daemon for read-heavy commands such as `tsk list`. The CLI auto-starts the daemon when needed, reuses a healthy socket, and removes stale sockets before restarting.
|
|
77
|
+
|
|
78
|
+
To disable daemon mode for a command:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
TASKULUS_NO_DAEMON=1 tsk list
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Operational commands:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
tsk daemon-status
|
|
88
|
+
tsk daemon-stop
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Python vs Rust
|
|
92
|
+
|
|
93
|
+
We provide two implementations driven by the same behavior specification:
|
|
94
|
+
|
|
95
|
+
**Choose Python if:**
|
|
96
|
+
- You want easy `pip install` with no compilation
|
|
97
|
+
- You are scripting custom agent workflows
|
|
98
|
+
|
|
99
|
+
**Choose Rust if:**
|
|
100
|
+
- You need maximum performance (sub-millisecond queries)
|
|
101
|
+
- You have a massive repository (> 2000 issues)
|
|
102
|
+
|
|
103
|
+
## Project Structure
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
Taskulus/
|
|
107
|
+
|-- planning/
|
|
108
|
+
| |-- VISION.md # Complete specification
|
|
109
|
+
| `-- IMPLEMENTATION_PLAN.md # Detailed technical plan
|
|
110
|
+
|-- specs/ # Shared Gherkin feature files
|
|
111
|
+
|-- python/ # Python implementation
|
|
112
|
+
|-- rust/ # Rust implementation
|
|
113
|
+
|-- apps/ # Public website (Gatsby)
|
|
114
|
+
`-- .beads/ # Project task database
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Contributing
|
|
118
|
+
|
|
119
|
+
We welcome contributions! Please:
|
|
120
|
+
1. Pick a task from `bd ready` (we use Beads for bootstrapping).
|
|
121
|
+
2. Follow the BDD workflow in [AGENTS.md](AGENTS.md).
|
|
122
|
+
3. Ensure all quality gates pass.
|
|
123
|
+
|
|
124
|
+
## Testing
|
|
125
|
+
|
|
126
|
+
Run the full quality gates:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
make check-all
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Run only Python checks:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
make check-python
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Run only Rust checks:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
make check-rust
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Benchmarking
|
|
145
|
+
|
|
146
|
+
Run index build and cache load benchmarks:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
python tools/benchmark_index.py
|
|
150
|
+
cd rust && cargo run --release --bin index_benchmark
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
MIT
|
|
@@ -4,10 +4,11 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "taskulus"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "A git-backed project management system."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
11
12
|
dependencies = [
|
|
12
13
|
"click",
|
|
13
14
|
"jinja2",
|
|
@@ -20,6 +21,22 @@ dependencies = [
|
|
|
20
21
|
"black",
|
|
21
22
|
"sphinx",
|
|
22
23
|
]
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Development Status :: 3 - Alpha",
|
|
26
|
+
"Environment :: Console",
|
|
27
|
+
"Operating System :: OS Independent",
|
|
28
|
+
"Programming Language :: Python :: 3",
|
|
29
|
+
"Programming Language :: Python :: 3.11",
|
|
30
|
+
"Programming Language :: Python :: 3.12",
|
|
31
|
+
"Programming Language :: Python :: 3.13",
|
|
32
|
+
"Topic :: Software Development :: Bug Tracking",
|
|
33
|
+
"Topic :: Software Development :: Version Control",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[project.urls]
|
|
37
|
+
Homepage = "https://taskul.us"
|
|
38
|
+
Repository = "https://github.com/AnthusAI/Taskulus"
|
|
39
|
+
Issues = "https://github.com/AnthusAI/Taskulus/issues"
|
|
23
40
|
|
|
24
41
|
[project.scripts]
|
|
25
42
|
tsk = "taskulus.cli:cli"
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: taskulus
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: A git-backed project management system.
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Homepage, https://taskul.us
|
|
7
|
+
Project-URL: Repository, https://github.com/AnthusAI/Taskulus
|
|
8
|
+
Project-URL: Issues, https://github.com/AnthusAI/Taskulus/issues
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Software Development :: Bug Tracking
|
|
17
|
+
Classifier: Topic :: Software Development :: Version Control
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
Requires-Dist: click
|
|
21
|
+
Requires-Dist: jinja2
|
|
22
|
+
Requires-Dist: pydantic
|
|
23
|
+
Requires-Dist: pyyaml
|
|
24
|
+
Requires-Dist: pydantic-settings
|
|
25
|
+
Requires-Dist: behave
|
|
26
|
+
Requires-Dist: coverage
|
|
27
|
+
Requires-Dist: ruff
|
|
28
|
+
Requires-Dist: black
|
|
29
|
+
Requires-Dist: sphinx
|
|
30
|
+
|
|
31
|
+
# Taskulus
|
|
32
|
+
|
|
33
|
+
**A tiny Jira clone for your repo.**
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+

|
|
37
|
+

|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
## Inspiration & Lineage
|
|
41
|
+
|
|
42
|
+
Taskulus is a spiritual successor to [Beads](https://github.com/steveyegge/beads), inspired by its elegant, domain-specific approach to project management. We are deeply grateful to the Beads author and community for proving that a dedicated cognitive framework for tasks is game-changing.
|
|
43
|
+
|
|
44
|
+
Taskulus builds on this foundation by adapting the model to be a thinner, more native layer over Git—optimizing for AI agents and distributed teams:
|
|
45
|
+
|
|
46
|
+
* **A Thinner Layer over Git**: We removed the secondary SQLite index. The complexity of maintaining and synchronizing a shadow database isn't worth the operational cost. Taskulus reads files directly.
|
|
47
|
+
* **Better Storage Alignment**: Things like "exclusively claiming" a task don't align well with the distributed Git model. We removed them to ensure the tool behaves exactly like the version control system underneath it.
|
|
48
|
+
* **Conflict-Free Storage**: Instead of a single JSON-L file (which guarantees merge conflicts when agents work in parallel), Taskulus stores separate tasks in separate files. This eliminates conflicts and allows deep linking to specific issues from GitHub.
|
|
49
|
+
* **Streamlined Cognitive Model**: Beads is powerful but complex, with 130+ attributes per issue. We streamlined this to a focused core (Status, Priority, Dependencies) to reduce the "context pollution" for AI agents. We want the model to think about the work, not how to use the tracker. The goal is a **helpful cognitive model** that unburdens your mental state rather than adding to it.
|
|
50
|
+
* **AI-Native Nomenclature**: Instead of teaching models new terms like "beads", we use the standard Jira vocabulary (Epics, Tasks, Sub-tasks) that AI models are already extensively pre-trained on. This leverages their existing knowledge graph for better reasoning.
|
|
51
|
+
* **Git-Native Scoping**: We replaced complex "contributor roles" with standard Git patterns. Want local tasks? Just `.gitignore` a folder. Working in a monorepo? Taskulus respects your current directory scope automatically.
|
|
52
|
+
|
|
53
|
+
## Frictionless Workflow
|
|
54
|
+
|
|
55
|
+
Taskulus is designed to **remove friction**, not add it.
|
|
56
|
+
|
|
57
|
+
* **No Syncing**: There is no secondary database to synchronize. The files on disk are the source of truth. You will never be blocked from pushing code because a background daemon is out of sync.
|
|
58
|
+
* **Git Hooks Help You**: Git hooks should assist your workflow, not interrupt it. Taskulus hooks are designed to be invisible helpers, ensuring data integrity without stopping you from getting work done.
|
|
59
|
+
|
|
60
|
+
For a detailed comparison, see [Taskulus vs. Beads](docs/VS_BEADS.md).
|
|
61
|
+
|
|
62
|
+
## Why Taskulus?
|
|
63
|
+
|
|
64
|
+
### 1. The Sleep Factor
|
|
65
|
+
Offload your mental context. Instead of keeping 15 different chat sessions and open loops in your head, tell your agent to "record the current state" into Taskulus. It's a permanent, searchable memory bank for your AI workforce.
|
|
66
|
+
|
|
67
|
+
### 2. Files are the Database
|
|
68
|
+
- **No SQL Server**: We removed the SQLite daemon entirely. Each command reads the JSON files directly, so there is nothing to synchronize or keep running.
|
|
69
|
+
- **No JSONL Merge Conflicts**: There is no monolithic JSONL file. Every issue has its own JSON document, which eliminates merge conflicts when teams (or agents) edit work in parallel.
|
|
70
|
+
- **No Daemon**: There is no background process to crash or manage.
|
|
71
|
+
- **No API**: Your agents read and write files directly (or use the simple CLI).
|
|
72
|
+
|
|
73
|
+
### 3. Concurrency Solved
|
|
74
|
+
Unlike other file-based systems that use a single JSONL file (guaranteeing merge conflicts), Taskulus stores **one issue per file**. This allows multiple agents and developers to work in parallel without blocking each other.
|
|
75
|
+
|
|
76
|
+
### 4. Jira + Confluence for Agents
|
|
77
|
+
Taskulus includes a **Wiki Engine** that renders Markdown templates with live issue data. Your planning documents always reflect the real-time state of the project, giving agents the "forest view" they often lack.
|
|
78
|
+
|
|
79
|
+
### 5. Zero Cost Footprint
|
|
80
|
+
There are no per-seat licenses or hosted fees. If you have a git repository, you already have the database—and that keeps Taskulus affordable for very large teams (or fleets of agents).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Status: Planning Phase
|
|
85
|
+
|
|
86
|
+
This repository contains the complete vision, implementation plan, and task breakdown for building Taskulus. We are building it in public, using Taskulus (via Beads) to track itself.
|
|
87
|
+
|
|
88
|
+
## Quick Start
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Initialize a new project
|
|
92
|
+
tsk init
|
|
93
|
+
|
|
94
|
+
# Create an issue
|
|
95
|
+
tsk create "Implement the login flow"
|
|
96
|
+
|
|
97
|
+
# List open tasks
|
|
98
|
+
tsk list --status todo
|
|
99
|
+
|
|
100
|
+
# Show details
|
|
101
|
+
tsk show tsk-a1b
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Daemon Behavior
|
|
105
|
+
|
|
106
|
+
Taskulus uses a just-in-time index daemon for read-heavy commands such as `tsk list`. The CLI auto-starts the daemon when needed, reuses a healthy socket, and removes stale sockets before restarting.
|
|
107
|
+
|
|
108
|
+
To disable daemon mode for a command:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
TASKULUS_NO_DAEMON=1 tsk list
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Operational commands:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
tsk daemon-status
|
|
118
|
+
tsk daemon-stop
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Python vs Rust
|
|
122
|
+
|
|
123
|
+
We provide two implementations driven by the same behavior specification:
|
|
124
|
+
|
|
125
|
+
**Choose Python if:**
|
|
126
|
+
- You want easy `pip install` with no compilation
|
|
127
|
+
- You are scripting custom agent workflows
|
|
128
|
+
|
|
129
|
+
**Choose Rust if:**
|
|
130
|
+
- You need maximum performance (sub-millisecond queries)
|
|
131
|
+
- You have a massive repository (> 2000 issues)
|
|
132
|
+
|
|
133
|
+
## Project Structure
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
Taskulus/
|
|
137
|
+
|-- planning/
|
|
138
|
+
| |-- VISION.md # Complete specification
|
|
139
|
+
| `-- IMPLEMENTATION_PLAN.md # Detailed technical plan
|
|
140
|
+
|-- specs/ # Shared Gherkin feature files
|
|
141
|
+
|-- python/ # Python implementation
|
|
142
|
+
|-- rust/ # Rust implementation
|
|
143
|
+
|-- apps/ # Public website (Gatsby)
|
|
144
|
+
`-- .beads/ # Project task database
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Contributing
|
|
148
|
+
|
|
149
|
+
We welcome contributions! Please:
|
|
150
|
+
1. Pick a task from `bd ready` (we use Beads for bootstrapping).
|
|
151
|
+
2. Follow the BDD workflow in [AGENTS.md](AGENTS.md).
|
|
152
|
+
3. Ensure all quality gates pass.
|
|
153
|
+
|
|
154
|
+
## Testing
|
|
155
|
+
|
|
156
|
+
Run the full quality gates:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
make check-all
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Run only Python checks:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
make check-python
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Run only Rust checks:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
make check-rust
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Benchmarking
|
|
175
|
+
|
|
176
|
+
Run index build and cache load benchmarks:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
python tools/benchmark_index.py
|
|
180
|
+
cd rust && cargo run --release --bin index_benchmark
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
MIT
|
taskulus-0.1.0/PKG-INFO
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: taskulus
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: A git-backed project management system.
|
|
5
|
-
Requires-Python: >=3.11
|
|
6
|
-
Description-Content-Type: text/markdown
|
|
7
|
-
Requires-Dist: click
|
|
8
|
-
Requires-Dist: jinja2
|
|
9
|
-
Requires-Dist: pydantic
|
|
10
|
-
Requires-Dist: pyyaml
|
|
11
|
-
Requires-Dist: pydantic-settings
|
|
12
|
-
Requires-Dist: behave
|
|
13
|
-
Requires-Dist: coverage
|
|
14
|
-
Requires-Dist: ruff
|
|
15
|
-
Requires-Dist: black
|
|
16
|
-
Requires-Dist: sphinx
|
|
17
|
-
|
|
18
|
-
# Taskulus (Python)
|
|
19
|
-
|
|
20
|
-
This file exists for packaging metadata in editable installs. For full project documentation, see the repository README.md.
|
taskulus-0.1.0/README.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: taskulus
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: A git-backed project management system.
|
|
5
|
-
Requires-Python: >=3.11
|
|
6
|
-
Description-Content-Type: text/markdown
|
|
7
|
-
Requires-Dist: click
|
|
8
|
-
Requires-Dist: jinja2
|
|
9
|
-
Requires-Dist: pydantic
|
|
10
|
-
Requires-Dist: pyyaml
|
|
11
|
-
Requires-Dist: pydantic-settings
|
|
12
|
-
Requires-Dist: behave
|
|
13
|
-
Requires-Dist: coverage
|
|
14
|
-
Requires-Dist: ruff
|
|
15
|
-
Requires-Dist: black
|
|
16
|
-
Requires-Dist: sphinx
|
|
17
|
-
|
|
18
|
-
# Taskulus (Python)
|
|
19
|
-
|
|
20
|
-
This file exists for packaging metadata in editable installs. For full project documentation, see the repository README.md.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|