hakonook 0.9.0
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.
- package/README.md +453 -0
- package/dist/hako.js +66859 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# hakonook
|
|
2
|
+
|
|
3
|
+
a cozy CLI for your local projects ✿
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## about
|
|
8
|
+
|
|
9
|
+
I built this for myself. It helps me keep track of scattered projects across my dev folder — what's active, what's on pause, what I forgot about months ago. Probably not for everyone, but if you tend to accumulate projects like I do, it might be useful.
|
|
10
|
+
|
|
11
|
+
The idea is simple: one root folder, projects organized by status, and a quick way to navigate between them.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## concepts
|
|
16
|
+
|
|
17
|
+
**root** — your development folder (default: `~/development`)
|
|
18
|
+
|
|
19
|
+
**statuses** — projects live in status folders:
|
|
20
|
+
- `active` — currently working on
|
|
21
|
+
- `paused` — taking a break
|
|
22
|
+
- `archived` — done or abandoned
|
|
23
|
+
- `stable` — shipped and maintained
|
|
24
|
+
|
|
25
|
+
**index** — cached metadata about your projects, auto-refreshes hourly
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm i -g hakonook
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or build from source (requires [Bun](https://bun.sh)):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git clone https://github.com/chrisdevelops/hakonook.git
|
|
39
|
+
cd hakonook
|
|
40
|
+
bun install
|
|
41
|
+
bun run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**macOS:**
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cp ./dist/hako ~/.local/bin/
|
|
48
|
+
codesign --sign - --force ~/.local/bin/hako
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Linux:**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cp ./dist/hako ~/.local/bin/
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Windows (PowerShell):**
|
|
58
|
+
|
|
59
|
+
```powershell
|
|
60
|
+
New-Item -ItemType Directory -Force -Path "$env:LOCALAPPDATA\hako"
|
|
61
|
+
Copy-Item ./dist/hako.exe "$env:LOCALAPPDATA\hako\hako.exe"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Then add `%LOCALAPPDATA%\hako` to your PATH.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## quick start
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
hako scan # index your projects
|
|
72
|
+
hako # open interactive picker
|
|
73
|
+
hako create my-app # create a project
|
|
74
|
+
hako code my-app # open in IDE
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## interactive mode
|
|
80
|
+
|
|
81
|
+
Run `hako` with no arguments to open the TUI.
|
|
82
|
+
|
|
83
|
+
| key | action |
|
|
84
|
+
|-----|--------|
|
|
85
|
+
| `↑` `↓` `j` `k` | navigate |
|
|
86
|
+
| `enter` `o` | open in Finder |
|
|
87
|
+
| `i` | open in IDE |
|
|
88
|
+
| `c` | open in Claude Code |
|
|
89
|
+
| `t` | open terminal |
|
|
90
|
+
| `a` | archive project |
|
|
91
|
+
| `p` | pause project |
|
|
92
|
+
| `n` | new project wizard |
|
|
93
|
+
| `/` | search |
|
|
94
|
+
| `?` | help |
|
|
95
|
+
| `q` | quit |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## commands
|
|
100
|
+
|
|
101
|
+
### navigation
|
|
102
|
+
|
|
103
|
+
**hako** — interactive project picker
|
|
104
|
+
|
|
105
|
+
**hako list** — list projects
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
hako list # all projects
|
|
109
|
+
hako list -s active # filter by status
|
|
110
|
+
hako list --json # machine-readable output
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
| option | description |
|
|
114
|
+
|--------|-------------|
|
|
115
|
+
| `-s, --status <status>` | filter by status |
|
|
116
|
+
| `--json` | output as JSON |
|
|
117
|
+
|
|
118
|
+
**hako open \<name\>** — open project in file manager
|
|
119
|
+
|
|
120
|
+
**hako code \<name\>** — open project in IDE
|
|
121
|
+
|
|
122
|
+
**hako claude \<name\>** — open project in Claude Code
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
hako claude my-app # default
|
|
126
|
+
hako claude my-app --yolo # skip permissions
|
|
127
|
+
hako claude my-app -p custom # use custom profile
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
| option | description |
|
|
131
|
+
|--------|-------------|
|
|
132
|
+
| `-p, --profile <name>` | use named profile from config |
|
|
133
|
+
| `--yolo` | shortcut for `--profile yolo` |
|
|
134
|
+
|
|
135
|
+
**hako info \<project\>** — show detailed project information
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
hako info my-project # show project details
|
|
139
|
+
hako info my-project --json # machine-readable output
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
| option | description |
|
|
143
|
+
|--------|-------------|
|
|
144
|
+
| `--json` | output as JSON |
|
|
145
|
+
|
|
146
|
+
**hako path \<name\>** — print project path (for shell integration)
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### creation
|
|
151
|
+
|
|
152
|
+
**hako create [name]** — create a new project
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
hako create # launch wizard
|
|
156
|
+
hako create my-app # create blank project
|
|
157
|
+
hako create my-app -t sveltekit # from template
|
|
158
|
+
hako create my-app -g user/repo # clone from GitHub
|
|
159
|
+
hako create my-app --remote <url> # clone from any git remote
|
|
160
|
+
hako create my-app -f other-proj # fork from existing project
|
|
161
|
+
hako create my-app -s paused # start as paused
|
|
162
|
+
hako create my-app --no-open # don't open after
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
| option | description |
|
|
166
|
+
|--------|-------------|
|
|
167
|
+
| `-t, --template <name>` | use registered template |
|
|
168
|
+
| `-g, --github <repo>` | clone from GitHub (user/repo or user/repo/subdir) |
|
|
169
|
+
| `--remote <url>` | clone from any git remote URL |
|
|
170
|
+
| `-f, --fork <project>` | create from an existing project |
|
|
171
|
+
| `--blank` | create empty project with git init |
|
|
172
|
+
| `-s, --status <status>` | initial status (default: active) |
|
|
173
|
+
| `--no-open` | skip opening in IDE after creation |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
### status
|
|
178
|
+
|
|
179
|
+
**hako update \<name\>** — update project properties
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
hako update my-app -s paused # pause the project
|
|
183
|
+
hako update my-app -s archived # archive the project
|
|
184
|
+
hako update my-app -s active # reactivate
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
| option | description |
|
|
188
|
+
|--------|-------------|
|
|
189
|
+
| `-s, --status <status>` | change status (active, paused, archived, stable) |
|
|
190
|
+
|
|
191
|
+
**hako delete \<name\>** — permanently delete a project
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
hako delete my-old-project # delete with confirmation
|
|
195
|
+
hako delete my-old-project -f # delete without confirmation
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
| option | description |
|
|
199
|
+
|--------|-------------|
|
|
200
|
+
| `-f, --force` | skip confirmation prompt |
|
|
201
|
+
|
|
202
|
+
Warns about uncommitted changes, unpushed commits, and missing remotes before deleting.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### templates
|
|
207
|
+
|
|
208
|
+
**hako template list** — show registered templates
|
|
209
|
+
|
|
210
|
+
**hako template add \<name\>** — register a template
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
hako template add starter -g user/repo
|
|
214
|
+
hako template add gitlab --remote <url>
|
|
215
|
+
hako template add local-kit --local templates/kit
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
| option | description |
|
|
219
|
+
|--------|-------------|
|
|
220
|
+
| `-g, --github <repo>` | GitHub repository (user/repo or user/repo/subdir) |
|
|
221
|
+
| `--remote <url>` | any git remote URL |
|
|
222
|
+
| `--local <path>` | local template path |
|
|
223
|
+
|
|
224
|
+
**hako template remove \<name\>** — unregister a template
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
### ai resources
|
|
229
|
+
|
|
230
|
+
**hako ai** — manage AI resources (skills, agents, prompts, MCP configs, snippets)
|
|
231
|
+
|
|
232
|
+
Run `hako ai` with no arguments to open an interactive browser.
|
|
233
|
+
|
|
234
|
+
**hako ai list** — list all resources
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
hako ai list # all resources
|
|
238
|
+
hako ai list --type skill # filter by type
|
|
239
|
+
hako ai list --json # machine-readable
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
| option | description |
|
|
243
|
+
|--------|-------------|
|
|
244
|
+
| `--type <type>` | filter by type (skill, agent, prompt, mcp, snippet) |
|
|
245
|
+
| `--json` | output as JSON |
|
|
246
|
+
|
|
247
|
+
**hako ai use \<resource\>** — install a resource into the current project
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
hako ai use skill/my-skill
|
|
251
|
+
hako ai use my-agent
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**hako ai publish \<path\>** — add a local resource to the library
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
hako ai publish .claude/skills/my-skill
|
|
258
|
+
hako ai publish .claude/agents/helper.md --description "Helper agent"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
| option | description |
|
|
262
|
+
|--------|-------------|
|
|
263
|
+
| `--description <text>` | resource description |
|
|
264
|
+
| `--tags <tags>` | comma-separated tags |
|
|
265
|
+
| `--type <type>` | resource type (auto-detected if not specified) |
|
|
266
|
+
| `--name <name>` | resource name (auto-detected if not specified) |
|
|
267
|
+
|
|
268
|
+
**hako ai remove \<resource\>** — remove a resource from the library
|
|
269
|
+
|
|
270
|
+
**hako ai sync** — sync the library with its git remote
|
|
271
|
+
|
|
272
|
+
**hako ai init** — initialize the AI resources library
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
hako ai init
|
|
276
|
+
hako ai init -g user/ai-resources
|
|
277
|
+
hako ai init --remote git@github.com:user/ai-resources.git
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
| option | description |
|
|
281
|
+
|--------|-------------|
|
|
282
|
+
| `-g, --github <repo>` | GitHub repository (user/repo) |
|
|
283
|
+
| `--remote <url>` | git remote URL for syncing |
|
|
284
|
+
|
|
285
|
+
**hako ai info** — show library status
|
|
286
|
+
|
|
287
|
+
| option | description |
|
|
288
|
+
|--------|-------------|
|
|
289
|
+
| `--json` | output as JSON |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### processes
|
|
294
|
+
|
|
295
|
+
**hako process run \<project\> [script]** — run a script
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
hako process run my-app # run default (dev)
|
|
299
|
+
hako process run my-app start # run specific script
|
|
300
|
+
hako process run my-app -b # run in background
|
|
301
|
+
hako process run my-app -l # list available scripts
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
| option | description |
|
|
305
|
+
|--------|-------------|
|
|
306
|
+
| `-b, --background` | run detached, track process |
|
|
307
|
+
| `-l, --list` | list available scripts |
|
|
308
|
+
|
|
309
|
+
**hako process list** — show tracked processes (TUI)
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
hako process list # interactive
|
|
313
|
+
hako process list --json # machine-readable
|
|
314
|
+
hako process list -a # include dead processes
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
| option | description |
|
|
318
|
+
|--------|-------------|
|
|
319
|
+
| `--json` | output as JSON |
|
|
320
|
+
| `-a, --all` | show all including stopped |
|
|
321
|
+
|
|
322
|
+
**hako process kill \<target\>** — stop a process
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
hako process kill my-app # by project name
|
|
326
|
+
hako process kill 12345 # by PID
|
|
327
|
+
hako process kill my-app -f # force kill
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
| option | description |
|
|
331
|
+
|--------|-------------|
|
|
332
|
+
| `-s, --signal <signal>` | signal to send (default: SIGTERM) |
|
|
333
|
+
| `-f, --force` | use SIGKILL |
|
|
334
|
+
|
|
335
|
+
**hako ps** — alias for `process list`
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### maintenance
|
|
340
|
+
|
|
341
|
+
**hako scan [project]** — rebuild project index
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
hako scan # rescan all project directories
|
|
345
|
+
hako scan my-project # scan single project for AI resources
|
|
346
|
+
hako scan --ai # also detect AI resources
|
|
347
|
+
hako scan --ai --publish # auto-publish all new AI resources
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
| option | description |
|
|
351
|
+
|--------|-------------|
|
|
352
|
+
| `--ai` | also detect AI resources across projects |
|
|
353
|
+
| `--publish` | auto-publish all detected AI resources (use with --ai) |
|
|
354
|
+
|
|
355
|
+
**hako stale** — find inactive projects
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
hako stale # 30+ days inactive
|
|
359
|
+
hako stale -d 60 # 60+ days inactive
|
|
360
|
+
hako stale --json # machine-readable
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
| option | description |
|
|
364
|
+
|--------|-------------|
|
|
365
|
+
| `-d, --days <n>` | days threshold (default: 30) |
|
|
366
|
+
| `--json` | output as JSON |
|
|
367
|
+
|
|
368
|
+
**hako doctor** — health check
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
hako doctor # run all checks
|
|
372
|
+
hako doctor --json # machine-readable
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Checks config validity, root directory, status folders, index freshness, git initialization, and active project count.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### configuration
|
|
380
|
+
|
|
381
|
+
**hako config show** — display current config
|
|
382
|
+
|
|
383
|
+
**hako config edit** — open config in editor
|
|
384
|
+
|
|
385
|
+
**hako config set \<key\> \<value\>** — set a config value
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
hako config set root ~/projects
|
|
389
|
+
hako config set default_ide code
|
|
390
|
+
hako config set active_limit 10
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**hako config path** — print config file path
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## configuration
|
|
398
|
+
|
|
399
|
+
Config file: `~/.config/hako/config.toml`
|
|
400
|
+
|
|
401
|
+
```toml
|
|
402
|
+
# where your projects live
|
|
403
|
+
root = "~/development"
|
|
404
|
+
|
|
405
|
+
# IDE command
|
|
406
|
+
default_ide = "cursor"
|
|
407
|
+
|
|
408
|
+
# warn when active projects exceed this
|
|
409
|
+
active_limit = 5
|
|
410
|
+
|
|
411
|
+
[editor]
|
|
412
|
+
command = "cursor"
|
|
413
|
+
|
|
414
|
+
[github]
|
|
415
|
+
username = ""
|
|
416
|
+
|
|
417
|
+
[claude_code]
|
|
418
|
+
command = "claude"
|
|
419
|
+
default_args = []
|
|
420
|
+
|
|
421
|
+
[claude_code.profiles]
|
|
422
|
+
yolo = ["--dangerously-skip-permissions"]
|
|
423
|
+
|
|
424
|
+
[statuses]
|
|
425
|
+
active = "active"
|
|
426
|
+
paused = "paused"
|
|
427
|
+
archived = "archived"
|
|
428
|
+
stable = "stable"
|
|
429
|
+
|
|
430
|
+
[processes]
|
|
431
|
+
log_dir = "~/.config/hako/logs"
|
|
432
|
+
capture_output = false
|
|
433
|
+
default_script = "dev"
|
|
434
|
+
|
|
435
|
+
[templates]
|
|
436
|
+
# add your own templates here
|
|
437
|
+
# starter = { type = "github", repo = "user/repo" }
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## shell integration
|
|
443
|
+
|
|
444
|
+
Add to your `.zshrc` or `.bashrc`:
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
# cd to a project by name
|
|
448
|
+
hcd() { cd "$(hako path "$1")"; }
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
made with ♡
|