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.
Files changed (3) hide show
  1. package/README.md +453 -0
  2. package/dist/hako.js +66859 -0
  3. 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 ♡