holoctl 0.5.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.
- holoctl-0.5.0/LICENSE +21 -0
- holoctl-0.5.0/PKG-INFO +297 -0
- holoctl-0.5.0/README.md +246 -0
- holoctl-0.5.0/holoctl/__init__.py +5 -0
- holoctl-0.5.0/holoctl/__main__.py +56 -0
- holoctl-0.5.0/holoctl/cli/__init__.py +0 -0
- holoctl-0.5.0/holoctl/cli/_console.py +4 -0
- holoctl-0.5.0/holoctl/cli/agent.py +101 -0
- holoctl-0.5.0/holoctl/cli/board.py +153 -0
- holoctl-0.5.0/holoctl/cli/compile_.py +39 -0
- holoctl-0.5.0/holoctl/cli/doctor.py +126 -0
- holoctl-0.5.0/holoctl/cli/init_.py +108 -0
- holoctl-0.5.0/holoctl/cli/overview.py +165 -0
- holoctl-0.5.0/holoctl/cli/repo.py +116 -0
- holoctl-0.5.0/holoctl/cli/serve.py +20 -0
- holoctl-0.5.0/holoctl/cli/sync_.py +81 -0
- holoctl-0.5.0/holoctl/lib/__init__.py +0 -0
- holoctl-0.5.0/holoctl/lib/board.py +341 -0
- holoctl-0.5.0/holoctl/lib/compiler/__init__.py +26 -0
- holoctl-0.5.0/holoctl/lib/compiler/claude.py +76 -0
- holoctl-0.5.0/holoctl/lib/compiler/copilot.py +24 -0
- holoctl-0.5.0/holoctl/lib/compiler/cursor.py +38 -0
- holoctl-0.5.0/holoctl/lib/compiler/devin.py +51 -0
- holoctl-0.5.0/holoctl/lib/compiler/generic.py +51 -0
- holoctl-0.5.0/holoctl/lib/compiler/template.py +21 -0
- holoctl-0.5.0/holoctl/lib/compiler/windsurf.py +22 -0
- holoctl-0.5.0/holoctl/lib/config.py +102 -0
- holoctl-0.5.0/holoctl/lib/discover.py +94 -0
- holoctl-0.5.0/holoctl/lib/filetree.py +107 -0
- holoctl-0.5.0/holoctl/lib/git.py +41 -0
- holoctl-0.5.0/holoctl/lib/markdown.py +72 -0
- holoctl-0.5.0/holoctl/lib/templates.py +690 -0
- holoctl-0.5.0/holoctl/server/__init__.py +0 -0
- holoctl-0.5.0/holoctl/server/app.py +830 -0
- holoctl-0.5.0/holoctl/server/static/holoctl-ui.js +216 -0
- holoctl-0.5.0/holoctl/server/static/holoctl.css +1334 -0
- holoctl-0.5.0/holoctl/templates/commands/holoctl-claude.md +88 -0
- holoctl-0.5.0/holoctl/templates/commands/holoctl-copilot.prompt.md +32 -0
- holoctl-0.5.0/holoctl/templates/commands/holoctl-cursor.md +36 -0
- holoctl-0.5.0/holoctl/templates/commands/holoctl-devin.md +32 -0
- holoctl-0.5.0/holoctl/templates/commands/holoctl-windsurf.md +31 -0
- holoctl-0.5.0/holoctl.egg-info/PKG-INFO +297 -0
- holoctl-0.5.0/holoctl.egg-info/SOURCES.txt +47 -0
- holoctl-0.5.0/holoctl.egg-info/dependency_links.txt +1 -0
- holoctl-0.5.0/holoctl.egg-info/entry_points.txt +3 -0
- holoctl-0.5.0/holoctl.egg-info/requires.txt +4 -0
- holoctl-0.5.0/holoctl.egg-info/top_level.txt +1 -0
- holoctl-0.5.0/pyproject.toml +57 -0
- holoctl-0.5.0/setup.cfg +4 -0
holoctl-0.5.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Felipe Carillo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
holoctl-0.5.0/PKG-INFO
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: holoctl
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Universal project operating system for AI coding assistants
|
|
5
|
+
Author: Felipe Carillo
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Felipe Carillo
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/FelipeCarillo/holoctl
|
|
29
|
+
Project-URL: Repository, https://github.com/FelipeCarillo/holoctl
|
|
30
|
+
Keywords: ai,project-management,kanban,claude-code,cursor,windsurf,copilot,aider,agents,cli
|
|
31
|
+
Classifier: Development Status :: 4 - Beta
|
|
32
|
+
Classifier: Intended Audience :: Developers
|
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
36
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
38
|
+
Classifier: Topic :: Software Development
|
|
39
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
40
|
+
Classifier: Operating System :: OS Independent
|
|
41
|
+
Classifier: Environment :: Console
|
|
42
|
+
Classifier: Environment :: Web Environment
|
|
43
|
+
Requires-Python: >=3.11
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
License-File: LICENSE
|
|
46
|
+
Requires-Dist: typer>=0.12
|
|
47
|
+
Requires-Dist: rich>=13
|
|
48
|
+
Requires-Dist: fastapi>=0.115
|
|
49
|
+
Requires-Dist: uvicorn>=0.30
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# holoctl
|
|
53
|
+
|
|
54
|
+
> Universal project operating system for AI coding assistants.
|
|
55
|
+
|
|
56
|
+
<p>
|
|
57
|
+
<a href="./README.md"><img src="https://img.shields.io/badge/lang-English-blue?style=flat-square" alt="English"/></a>
|
|
58
|
+
<a href="./README.pt-br.md"><img src="https://img.shields.io/badge/lang-Português-green?style=flat-square" alt="Português"/></a>
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
[](https://pypi.org/project/holoctl/)
|
|
62
|
+
[](https://pypi.org/project/holoctl/)
|
|
63
|
+
[](LICENSE)
|
|
64
|
+
[](https://www.python.org)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## What is holoctl?
|
|
69
|
+
|
|
70
|
+
**holoctl** is a CLI tool that turns any directory into a fully structured AI-ready project. It gives you a Kanban board, agent definitions, slash commands, and a live web dashboard — all version-controlled in `.holoctl/` alongside your code.
|
|
71
|
+
|
|
72
|
+
One project root. Any number of sub-repos and directories underneath. One `/holoctl` slash command to set it all up inside Claude Code.
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
my-project/ ← project root (holoctl init here)
|
|
76
|
+
├── backend/ [git · Node]
|
|
77
|
+
├── frontend/ [git · React]
|
|
78
|
+
├── mobile/ [git · React Native]
|
|
79
|
+
├── infra/ [Terraform]
|
|
80
|
+
├── .holoctl/ ← all project state lives here
|
|
81
|
+
│ ├── config.json
|
|
82
|
+
│ ├── board/
|
|
83
|
+
│ │ └── tickets/
|
|
84
|
+
│ ├── agents/
|
|
85
|
+
│ ├── commands/
|
|
86
|
+
│ └── context/
|
|
87
|
+
└── README.md
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Install
|
|
93
|
+
|
|
94
|
+
Recommended (handles PATH automatically):
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
uv tool install holoctl
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Or with pip:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pip install holoctl
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> **`holoctl` lives entirely inside your workspace.** It writes nothing to `$HOME` and keeps no global registry of projects. Initialize once with `holoctl init`, run `holoctl compile --target claude` to wire up the `/holoctl` slash command in that workspace's `.claude/commands/`. Repeat per workspace.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Quick Start
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# 1. Go to your project root
|
|
114
|
+
cd ~/my-project
|
|
115
|
+
|
|
116
|
+
# 2. Initialize
|
|
117
|
+
holoctl init
|
|
118
|
+
|
|
119
|
+
# 3. Open the dashboard
|
|
120
|
+
holoctl serve
|
|
121
|
+
# → http://127.0.0.1:4242
|
|
122
|
+
|
|
123
|
+
# 4. Compile for your AI tool(s)
|
|
124
|
+
holoctl compile --target claude # CLAUDE.md + .claude/commands/
|
|
125
|
+
holoctl compile --target cursor # .cursor/commands/ + .cursor/rules/
|
|
126
|
+
holoctl compile --target windsurf # .windsurfrules
|
|
127
|
+
holoctl compile --target copilot # .github/copilot-instructions.md
|
|
128
|
+
holoctl compile --target devin # AGENTS.md + .devin/skills/
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Or just type `/holoctl` in Claude Code — it detects, initializes, and compiles automatically.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Features
|
|
136
|
+
|
|
137
|
+
### 📋 Kanban Board
|
|
138
|
+
|
|
139
|
+
Ticket management built for AI agents. Every ticket is a Markdown file with frontmatter — readable by humans and machines.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
holoctl board add '{"title":"Add auth flow","agent":"developer","projects":["backend"]}'
|
|
143
|
+
holoctl board add '{"title":"Wire SSE","agent":"developer","projects":["backend","frontend"]}'
|
|
144
|
+
holoctl board ls
|
|
145
|
+
holoctl board ls --project backend --status doing
|
|
146
|
+
holoctl board move PRJ-001 doing
|
|
147
|
+
holoctl board set PRJ-001 priority p0
|
|
148
|
+
holoctl board stat
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Tickets vincúlam a **um ou vários** projetos descobertos no workspace via o campo `projects: string[]` (substituiu o antigo `scope`).
|
|
152
|
+
|
|
153
|
+
### 📁 Multi-Project Workspace
|
|
154
|
+
|
|
155
|
+
A workspace (the directory where you ran `holoctl init`) is auto-scanned: any direct subdirectory containing a project marker (`.git`, `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) appears as a project in the dashboard's **Projects** tab and on the board's project filter — no manual registration required.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
holoctl repo list # see what was discovered
|
|
159
|
+
holoctl repo add ./infra --name infra # optional: override / add a subdir the scan missed
|
|
160
|
+
holoctl repo info backend
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 🌐 Web Dashboard
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
holoctl serve # http://127.0.0.1:4242 (localhost only)
|
|
167
|
+
holoctl serve --host 0.0.0.0 # expose on local network
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
| Tab | Description |
|
|
171
|
+
|---|---|
|
|
172
|
+
| **Board** | Kanban view with real-time SSE updates |
|
|
173
|
+
| **Repos** | Git status per sub-repo: branch, last commit, remote link |
|
|
174
|
+
| **Files** | Full file tree with tech-stack badges |
|
|
175
|
+
| **Agents** | AI agent definitions |
|
|
176
|
+
| **Commands** | Slash commands library |
|
|
177
|
+
| **Context** | Project knowledge base |
|
|
178
|
+
|
|
179
|
+
**File tree badges:** Git, Node, React, Vue, React Native, Python, Go, Rust, Flutter, Docker, Terraform, iOS, Java, PHP.
|
|
180
|
+
|
|
181
|
+
### 🤖 AI Tool Integration
|
|
182
|
+
|
|
183
|
+
`holoctl compile` translates `.holoctl/` into the native format of each AI tool:
|
|
184
|
+
|
|
185
|
+
| Tool | Slash Command | Context File |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| Claude Code | `.claude/commands/*.md` | `CLAUDE.md` |
|
|
188
|
+
| Cursor | `.cursor/commands/*.md` | `.cursor/rules/holoctl.md` |
|
|
189
|
+
| Windsurf | (n/a) | `.windsurfrules` |
|
|
190
|
+
| GitHub Copilot | (n/a) | `.github/copilot-instructions.md` |
|
|
191
|
+
| Devin CLI | `.devin/skills/*/SKILL.md` | `AGENTS.md` |
|
|
192
|
+
|
|
193
|
+
### 🔧 No Global Setup
|
|
194
|
+
|
|
195
|
+
`holoctl` writes nothing to `$HOME` — there is no global registry of projects and no global slash-command installer. The `/holoctl` slash command is generated **per workspace** by `holoctl compile --target claude`, which writes `.claude/commands/holoctl.md` inside that workspace. Run `compile` once per workspace where you want the slash command available.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Commands
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
holoctl init Initialize .holoctl/ in the current workspace
|
|
203
|
+
holoctl overview One-screen workspace snapshot (board, projects, agents, suggested next)
|
|
204
|
+
holoctl board <cmd> Manage tickets (add, ls, move, set, stat, get)
|
|
205
|
+
holoctl repo <cmd> Inspect / override discovered subprojects
|
|
206
|
+
holoctl compile Compile to tool-specific files
|
|
207
|
+
holoctl serve Start the web dashboard
|
|
208
|
+
holoctl agent <cmd> Manage agent definitions
|
|
209
|
+
holoctl doctor Check workspace health
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## .holoctl/ Structure
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
.holoctl/
|
|
218
|
+
├── config.json ← project settings (name, prefix, board config, repos)
|
|
219
|
+
├── activity.jsonl ← append-only event log
|
|
220
|
+
├── board/
|
|
221
|
+
│ ├── index.json ← ticket index (auto-rebuilt from .md files)
|
|
222
|
+
│ └── tickets/
|
|
223
|
+
│ └── PRJ-001-my-ticket.md
|
|
224
|
+
├── agents/
|
|
225
|
+
│ └── developer.md
|
|
226
|
+
├── commands/
|
|
227
|
+
│ └── review.md
|
|
228
|
+
└── context/
|
|
229
|
+
├── decisions/
|
|
230
|
+
└── documents/
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Ticket Format
|
|
236
|
+
|
|
237
|
+
```markdown
|
|
238
|
+
---
|
|
239
|
+
id: PRJ-001
|
|
240
|
+
title: Add authentication
|
|
241
|
+
agent: developer
|
|
242
|
+
projects: backend, shared
|
|
243
|
+
status: doing
|
|
244
|
+
priority: p1
|
|
245
|
+
sprint: sprint-1
|
|
246
|
+
created: 2026-05-04
|
|
247
|
+
updated: 2026-05-04
|
|
248
|
+
completed: null
|
|
249
|
+
depends: null
|
|
250
|
+
tags: auth, security
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
# Start
|
|
254
|
+
(Current state before starting)
|
|
255
|
+
|
|
256
|
+
# Goal — Definition of Done
|
|
257
|
+
- [ ] JWT auth implemented
|
|
258
|
+
- [ ] Tests passing
|
|
259
|
+
|
|
260
|
+
# Context
|
|
261
|
+
Why this ticket exists.
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Configuration
|
|
267
|
+
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"project": {
|
|
271
|
+
"name": "My Project",
|
|
272
|
+
"prefix": "MP",
|
|
273
|
+
"repos": [
|
|
274
|
+
{ "name": "backend", "path": "./backend", "description": "Node API" },
|
|
275
|
+
{ "name": "frontend", "path": "./frontend", "description": "React app" }
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
"board": {
|
|
279
|
+
"statuses": ["backlog", "doing", "review", "done", "cancelled"],
|
|
280
|
+
"priorities": ["p0", "p1", "p2", "p3"],
|
|
281
|
+
"idPadding": 3
|
|
282
|
+
},
|
|
283
|
+
"targets": ["claude", "cursor"]
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Requirements
|
|
290
|
+
|
|
291
|
+
- Python ≥ 3.11
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## License
|
|
296
|
+
|
|
297
|
+
MIT © [Felipe Carillo](https://github.com/FelipeCarillo)
|
holoctl-0.5.0/README.md
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# holoctl
|
|
2
|
+
|
|
3
|
+
> Universal project operating system for AI coding assistants.
|
|
4
|
+
|
|
5
|
+
<p>
|
|
6
|
+
<a href="./README.md"><img src="https://img.shields.io/badge/lang-English-blue?style=flat-square" alt="English"/></a>
|
|
7
|
+
<a href="./README.pt-br.md"><img src="https://img.shields.io/badge/lang-Português-green?style=flat-square" alt="Português"/></a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
[](https://pypi.org/project/holoctl/)
|
|
11
|
+
[](https://pypi.org/project/holoctl/)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
[](https://www.python.org)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## What is holoctl?
|
|
18
|
+
|
|
19
|
+
**holoctl** is a CLI tool that turns any directory into a fully structured AI-ready project. It gives you a Kanban board, agent definitions, slash commands, and a live web dashboard — all version-controlled in `.holoctl/` alongside your code.
|
|
20
|
+
|
|
21
|
+
One project root. Any number of sub-repos and directories underneath. One `/holoctl` slash command to set it all up inside Claude Code.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
my-project/ ← project root (holoctl init here)
|
|
25
|
+
├── backend/ [git · Node]
|
|
26
|
+
├── frontend/ [git · React]
|
|
27
|
+
├── mobile/ [git · React Native]
|
|
28
|
+
├── infra/ [Terraform]
|
|
29
|
+
├── .holoctl/ ← all project state lives here
|
|
30
|
+
│ ├── config.json
|
|
31
|
+
│ ├── board/
|
|
32
|
+
│ │ └── tickets/
|
|
33
|
+
│ ├── agents/
|
|
34
|
+
│ ├── commands/
|
|
35
|
+
│ └── context/
|
|
36
|
+
└── README.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
Recommended (handles PATH automatically):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
uv tool install holoctl
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Or with pip:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pip install holoctl
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
> **`holoctl` lives entirely inside your workspace.** It writes nothing to `$HOME` and keeps no global registry of projects. Initialize once with `holoctl init`, run `holoctl compile --target claude` to wire up the `/holoctl` slash command in that workspace's `.claude/commands/`. Repeat per workspace.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# 1. Go to your project root
|
|
63
|
+
cd ~/my-project
|
|
64
|
+
|
|
65
|
+
# 2. Initialize
|
|
66
|
+
holoctl init
|
|
67
|
+
|
|
68
|
+
# 3. Open the dashboard
|
|
69
|
+
holoctl serve
|
|
70
|
+
# → http://127.0.0.1:4242
|
|
71
|
+
|
|
72
|
+
# 4. Compile for your AI tool(s)
|
|
73
|
+
holoctl compile --target claude # CLAUDE.md + .claude/commands/
|
|
74
|
+
holoctl compile --target cursor # .cursor/commands/ + .cursor/rules/
|
|
75
|
+
holoctl compile --target windsurf # .windsurfrules
|
|
76
|
+
holoctl compile --target copilot # .github/copilot-instructions.md
|
|
77
|
+
holoctl compile --target devin # AGENTS.md + .devin/skills/
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Or just type `/holoctl` in Claude Code — it detects, initializes, and compiles automatically.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Features
|
|
85
|
+
|
|
86
|
+
### 📋 Kanban Board
|
|
87
|
+
|
|
88
|
+
Ticket management built for AI agents. Every ticket is a Markdown file with frontmatter — readable by humans and machines.
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
holoctl board add '{"title":"Add auth flow","agent":"developer","projects":["backend"]}'
|
|
92
|
+
holoctl board add '{"title":"Wire SSE","agent":"developer","projects":["backend","frontend"]}'
|
|
93
|
+
holoctl board ls
|
|
94
|
+
holoctl board ls --project backend --status doing
|
|
95
|
+
holoctl board move PRJ-001 doing
|
|
96
|
+
holoctl board set PRJ-001 priority p0
|
|
97
|
+
holoctl board stat
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Tickets vincúlam a **um ou vários** projetos descobertos no workspace via o campo `projects: string[]` (substituiu o antigo `scope`).
|
|
101
|
+
|
|
102
|
+
### 📁 Multi-Project Workspace
|
|
103
|
+
|
|
104
|
+
A workspace (the directory where you ran `holoctl init`) is auto-scanned: any direct subdirectory containing a project marker (`.git`, `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) appears as a project in the dashboard's **Projects** tab and on the board's project filter — no manual registration required.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
holoctl repo list # see what was discovered
|
|
108
|
+
holoctl repo add ./infra --name infra # optional: override / add a subdir the scan missed
|
|
109
|
+
holoctl repo info backend
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 🌐 Web Dashboard
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
holoctl serve # http://127.0.0.1:4242 (localhost only)
|
|
116
|
+
holoctl serve --host 0.0.0.0 # expose on local network
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| Tab | Description |
|
|
120
|
+
|---|---|
|
|
121
|
+
| **Board** | Kanban view with real-time SSE updates |
|
|
122
|
+
| **Repos** | Git status per sub-repo: branch, last commit, remote link |
|
|
123
|
+
| **Files** | Full file tree with tech-stack badges |
|
|
124
|
+
| **Agents** | AI agent definitions |
|
|
125
|
+
| **Commands** | Slash commands library |
|
|
126
|
+
| **Context** | Project knowledge base |
|
|
127
|
+
|
|
128
|
+
**File tree badges:** Git, Node, React, Vue, React Native, Python, Go, Rust, Flutter, Docker, Terraform, iOS, Java, PHP.
|
|
129
|
+
|
|
130
|
+
### 🤖 AI Tool Integration
|
|
131
|
+
|
|
132
|
+
`holoctl compile` translates `.holoctl/` into the native format of each AI tool:
|
|
133
|
+
|
|
134
|
+
| Tool | Slash Command | Context File |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| Claude Code | `.claude/commands/*.md` | `CLAUDE.md` |
|
|
137
|
+
| Cursor | `.cursor/commands/*.md` | `.cursor/rules/holoctl.md` |
|
|
138
|
+
| Windsurf | (n/a) | `.windsurfrules` |
|
|
139
|
+
| GitHub Copilot | (n/a) | `.github/copilot-instructions.md` |
|
|
140
|
+
| Devin CLI | `.devin/skills/*/SKILL.md` | `AGENTS.md` |
|
|
141
|
+
|
|
142
|
+
### 🔧 No Global Setup
|
|
143
|
+
|
|
144
|
+
`holoctl` writes nothing to `$HOME` — there is no global registry of projects and no global slash-command installer. The `/holoctl` slash command is generated **per workspace** by `holoctl compile --target claude`, which writes `.claude/commands/holoctl.md` inside that workspace. Run `compile` once per workspace where you want the slash command available.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Commands
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
holoctl init Initialize .holoctl/ in the current workspace
|
|
152
|
+
holoctl overview One-screen workspace snapshot (board, projects, agents, suggested next)
|
|
153
|
+
holoctl board <cmd> Manage tickets (add, ls, move, set, stat, get)
|
|
154
|
+
holoctl repo <cmd> Inspect / override discovered subprojects
|
|
155
|
+
holoctl compile Compile to tool-specific files
|
|
156
|
+
holoctl serve Start the web dashboard
|
|
157
|
+
holoctl agent <cmd> Manage agent definitions
|
|
158
|
+
holoctl doctor Check workspace health
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## .holoctl/ Structure
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
.holoctl/
|
|
167
|
+
├── config.json ← project settings (name, prefix, board config, repos)
|
|
168
|
+
├── activity.jsonl ← append-only event log
|
|
169
|
+
├── board/
|
|
170
|
+
│ ├── index.json ← ticket index (auto-rebuilt from .md files)
|
|
171
|
+
│ └── tickets/
|
|
172
|
+
│ └── PRJ-001-my-ticket.md
|
|
173
|
+
├── agents/
|
|
174
|
+
│ └── developer.md
|
|
175
|
+
├── commands/
|
|
176
|
+
│ └── review.md
|
|
177
|
+
└── context/
|
|
178
|
+
├── decisions/
|
|
179
|
+
└── documents/
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Ticket Format
|
|
185
|
+
|
|
186
|
+
```markdown
|
|
187
|
+
---
|
|
188
|
+
id: PRJ-001
|
|
189
|
+
title: Add authentication
|
|
190
|
+
agent: developer
|
|
191
|
+
projects: backend, shared
|
|
192
|
+
status: doing
|
|
193
|
+
priority: p1
|
|
194
|
+
sprint: sprint-1
|
|
195
|
+
created: 2026-05-04
|
|
196
|
+
updated: 2026-05-04
|
|
197
|
+
completed: null
|
|
198
|
+
depends: null
|
|
199
|
+
tags: auth, security
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
# Start
|
|
203
|
+
(Current state before starting)
|
|
204
|
+
|
|
205
|
+
# Goal — Definition of Done
|
|
206
|
+
- [ ] JWT auth implemented
|
|
207
|
+
- [ ] Tests passing
|
|
208
|
+
|
|
209
|
+
# Context
|
|
210
|
+
Why this ticket exists.
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Configuration
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"project": {
|
|
220
|
+
"name": "My Project",
|
|
221
|
+
"prefix": "MP",
|
|
222
|
+
"repos": [
|
|
223
|
+
{ "name": "backend", "path": "./backend", "description": "Node API" },
|
|
224
|
+
{ "name": "frontend", "path": "./frontend", "description": "React app" }
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
"board": {
|
|
228
|
+
"statuses": ["backlog", "doing", "review", "done", "cancelled"],
|
|
229
|
+
"priorities": ["p0", "p1", "p2", "p3"],
|
|
230
|
+
"idPadding": 3
|
|
231
|
+
},
|
|
232
|
+
"targets": ["claude", "cursor"]
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Requirements
|
|
239
|
+
|
|
240
|
+
- Python ≥ 3.11
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
MIT © [Felipe Carillo](https://github.com/FelipeCarillo)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
if sys.platform == "win32":
|
|
5
|
+
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
|
6
|
+
sys.stderr.reconfigure(encoding="utf-8", errors="replace")
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
|
|
10
|
+
from .cli.init_ import app as _init_app, init_cmd
|
|
11
|
+
from .cli.board import app as _board_app
|
|
12
|
+
from .cli.compile_ import app as _compile_app, compile_cmd
|
|
13
|
+
from .cli.sync_ import app as _sync_app, sync_cmd
|
|
14
|
+
from .cli.doctor import app as _doctor_app, doctor_cmd
|
|
15
|
+
from .cli.agent import app as _agent_app
|
|
16
|
+
from .cli.repo import app as _repo_app
|
|
17
|
+
from .cli.serve import app as _serve_app, serve_cmd
|
|
18
|
+
from .cli.overview import app as _overview_app, overview_cmd
|
|
19
|
+
from . import __version__
|
|
20
|
+
|
|
21
|
+
app = typer.Typer(
|
|
22
|
+
name="holoctl",
|
|
23
|
+
help="Universal project operating system for AI coding assistants",
|
|
24
|
+
no_args_is_help=True,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Sub-group commands
|
|
28
|
+
app.add_typer(_board_app, name="board", help="Manage the project board")
|
|
29
|
+
app.add_typer(_agent_app, name="agent", help="Manage agent definitions")
|
|
30
|
+
app.add_typer(_repo_app, name="repo", help="Manage repos within a project")
|
|
31
|
+
|
|
32
|
+
# Direct commands
|
|
33
|
+
app.command("init")(init_cmd)
|
|
34
|
+
app.command("compile")(compile_cmd)
|
|
35
|
+
app.command("sync")(sync_cmd)
|
|
36
|
+
app.command("doctor")(doctor_cmd)
|
|
37
|
+
app.command("serve")(serve_cmd)
|
|
38
|
+
app.command("overview")(overview_cmd)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _version_callback(value: bool):
|
|
42
|
+
if value:
|
|
43
|
+
print(__version__)
|
|
44
|
+
raise typer.Exit()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@app.callback(invoke_without_command=True)
|
|
48
|
+
def main(
|
|
49
|
+
version: bool = typer.Option(None, "--version", "-v", callback=_version_callback, is_eager=True),
|
|
50
|
+
ctx: typer.Context = typer.Context,
|
|
51
|
+
):
|
|
52
|
+
pass
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
app()
|
|
File without changes
|