0xkobold 0.0.1

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 (258) hide show
  1. package/.agents/skills/nextjs-best-practices/SKILL.md +208 -0
  2. package/.agents/skills/sql-optimization-patterns/SKILL.md +509 -0
  3. package/HEARTBEAT.md +45 -0
  4. package/README.md +197 -0
  5. package/USAGE.md +191 -0
  6. package/dist/package.json +77 -0
  7. package/dist/src/agent/pi-adapter.js +307 -0
  8. package/dist/src/agent/pi-adapter.js.map +1 -0
  9. package/dist/src/agent/tool-adapter.js +86 -0
  10. package/dist/src/agent/tool-adapter.js.map +1 -0
  11. package/dist/src/approval/queue.js +114 -0
  12. package/dist/src/approval/queue.js.map +1 -0
  13. package/dist/src/ascii-kobold.js +76 -0
  14. package/dist/src/ascii-kobold.js.map +1 -0
  15. package/dist/src/cli/client.js +217 -0
  16. package/dist/src/cli/client.js.map +1 -0
  17. package/dist/src/cli/commands/agent.js +272 -0
  18. package/dist/src/cli/commands/agent.js.map +1 -0
  19. package/dist/src/cli/commands/chat.js +234 -0
  20. package/dist/src/cli/commands/chat.js.map +1 -0
  21. package/dist/src/cli/commands/config.js +202 -0
  22. package/dist/src/cli/commands/config.js.map +1 -0
  23. package/dist/src/cli/commands/daemon.js +203 -0
  24. package/dist/src/cli/commands/daemon.js.map +1 -0
  25. package/dist/src/cli/commands/gateway.js +184 -0
  26. package/dist/src/cli/commands/gateway.js.map +1 -0
  27. package/dist/src/cli/commands/init.js +175 -0
  28. package/dist/src/cli/commands/init.js.map +1 -0
  29. package/dist/src/cli/commands/kobold.js +21 -0
  30. package/dist/src/cli/commands/kobold.js.map +1 -0
  31. package/dist/src/cli/commands/logs.js +27 -0
  32. package/dist/src/cli/commands/logs.js.map +1 -0
  33. package/dist/src/cli/commands/mode.js +121 -0
  34. package/dist/src/cli/commands/mode.js.map +1 -0
  35. package/dist/src/cli/commands/persona.js +261 -0
  36. package/dist/src/cli/commands/persona.js.map +1 -0
  37. package/dist/src/cli/commands/start.js +66 -0
  38. package/dist/src/cli/commands/start.js.map +1 -0
  39. package/dist/src/cli/commands/status.js +117 -0
  40. package/dist/src/cli/commands/status.js.map +1 -0
  41. package/dist/src/cli/commands/stop.js +27 -0
  42. package/dist/src/cli/commands/stop.js.map +1 -0
  43. package/dist/src/cli/commands/system.js +128 -0
  44. package/dist/src/cli/commands/system.js.map +1 -0
  45. package/dist/src/cli/commands/tui.js +103 -0
  46. package/dist/src/cli/commands/tui.js.map +1 -0
  47. package/dist/src/cli/commands/update.js +133 -0
  48. package/dist/src/cli/commands/update.js.map +1 -0
  49. package/dist/src/cli/extensions/discord.js +113 -0
  50. package/dist/src/cli/extensions/discord.js.map +1 -0
  51. package/dist/src/cli/extensions/env.js +91 -0
  52. package/dist/src/cli/extensions/env.js.map +1 -0
  53. package/dist/src/cli/extensions/heartbeat.js +78 -0
  54. package/dist/src/cli/extensions/heartbeat.js.map +1 -0
  55. package/dist/src/cli/index.js +24 -0
  56. package/dist/src/cli/index.js.map +1 -0
  57. package/dist/src/cli/program.js +70 -0
  58. package/dist/src/cli/program.js.map +1 -0
  59. package/dist/src/cli/repl.js +184 -0
  60. package/dist/src/cli/repl.js.map +1 -0
  61. package/dist/src/cli/shared/discord-service.js +102 -0
  62. package/dist/src/cli/shared/discord-service.js.map +1 -0
  63. package/dist/src/config/index.js +10 -0
  64. package/dist/src/config/index.js.map +1 -0
  65. package/dist/src/config/loader.js +401 -0
  66. package/dist/src/config/loader.js.map +1 -0
  67. package/dist/src/config/paths.js +84 -0
  68. package/dist/src/config/paths.js.map +1 -0
  69. package/dist/src/config/types.js +8 -0
  70. package/dist/src/config/types.js.map +1 -0
  71. package/dist/src/context-detector.js +60 -0
  72. package/dist/src/context-detector.js.map +1 -0
  73. package/dist/src/discord/index.js +376 -0
  74. package/dist/src/discord/index.js.map +1 -0
  75. package/dist/src/event-bus/index.js +97 -0
  76. package/dist/src/event-bus/index.js.map +1 -0
  77. package/dist/src/extensions/command-args.js +68 -0
  78. package/dist/src/extensions/command-args.js.map +1 -0
  79. package/dist/src/extensions/core/agent-registry-extension.js +541 -0
  80. package/dist/src/extensions/core/agent-registry-extension.js.map +1 -0
  81. package/dist/src/extensions/core/agent-worker.js +148 -0
  82. package/dist/src/extensions/core/agent-worker.js.map +1 -0
  83. package/dist/src/extensions/core/compaction-safeguard.js +154 -0
  84. package/dist/src/extensions/core/compaction-safeguard.js.map +1 -0
  85. package/dist/src/extensions/core/confirm-destructive.js +43 -0
  86. package/dist/src/extensions/core/confirm-destructive.js.map +1 -0
  87. package/dist/src/extensions/core/context-aware-extension.js +124 -0
  88. package/dist/src/extensions/core/context-aware-extension.js.map +1 -0
  89. package/dist/src/extensions/core/context-pruning/extension.js +124 -0
  90. package/dist/src/extensions/core/context-pruning/extension.js.map +1 -0
  91. package/dist/src/extensions/core/context-pruning/pruner.js +312 -0
  92. package/dist/src/extensions/core/context-pruning/pruner.js.map +1 -0
  93. package/dist/src/extensions/core/context-pruning/runtime.js +48 -0
  94. package/dist/src/extensions/core/context-pruning/runtime.js.map +1 -0
  95. package/dist/src/extensions/core/context-pruning/settings.js +105 -0
  96. package/dist/src/extensions/core/context-pruning/settings.js.map +1 -0
  97. package/dist/src/extensions/core/dirty-repo-guard.js +42 -0
  98. package/dist/src/extensions/core/dirty-repo-guard.js.map +1 -0
  99. package/dist/src/extensions/core/discord-channel-extension.js +205 -0
  100. package/dist/src/extensions/core/discord-channel-extension.js.map +1 -0
  101. package/dist/src/extensions/core/discord-extension.js +142 -0
  102. package/dist/src/extensions/core/discord-extension.js.map +1 -0
  103. package/dist/src/extensions/core/env-loader-extension.js +157 -0
  104. package/dist/src/extensions/core/env-loader-extension.js.map +1 -0
  105. package/dist/src/extensions/core/fileops-extension.js +699 -0
  106. package/dist/src/extensions/core/fileops-extension.js.map +1 -0
  107. package/dist/src/extensions/core/gateway-extension.js +730 -0
  108. package/dist/src/extensions/core/gateway-extension.js.map +1 -0
  109. package/dist/src/extensions/core/git-checkpoint.js +46 -0
  110. package/dist/src/extensions/core/git-checkpoint.js.map +1 -0
  111. package/dist/src/extensions/core/handoff-extension.js +206 -0
  112. package/dist/src/extensions/core/handoff-extension.js.map +1 -0
  113. package/dist/src/extensions/core/heartbeat-extension.js +373 -0
  114. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -0
  115. package/dist/src/extensions/core/mcp-extension.js +413 -0
  116. package/dist/src/extensions/core/mcp-extension.js.map +1 -0
  117. package/dist/src/extensions/core/mode-manager-extension.js +562 -0
  118. package/dist/src/extensions/core/mode-manager-extension.js.map +1 -0
  119. package/dist/src/extensions/core/multi-channel-extension.js +435 -0
  120. package/dist/src/extensions/core/multi-channel-extension.js.map +1 -0
  121. package/dist/src/extensions/core/ollama-provider-extension.js +66 -0
  122. package/dist/src/extensions/core/ollama-provider-extension.js.map +1 -0
  123. package/dist/src/extensions/core/onboarding-extension.js +122 -0
  124. package/dist/src/extensions/core/onboarding-extension.js.map +1 -0
  125. package/dist/src/extensions/core/persona-loader-extension.js +139 -0
  126. package/dist/src/extensions/core/persona-loader-extension.js.map +1 -0
  127. package/dist/src/extensions/core/pi-notify-extension.js +70 -0
  128. package/dist/src/extensions/core/pi-notify-extension.js.map +1 -0
  129. package/dist/src/extensions/core/protected-paths.js +24 -0
  130. package/dist/src/extensions/core/protected-paths.js.map +1 -0
  131. package/dist/src/extensions/core/questionnaire-extension.js +242 -0
  132. package/dist/src/extensions/core/questionnaire-extension.js.map +1 -0
  133. package/dist/src/extensions/core/self-update-extension.js +181 -0
  134. package/dist/src/extensions/core/self-update-extension.js.map +1 -0
  135. package/dist/src/extensions/core/session-bridge-extension.js +78 -0
  136. package/dist/src/extensions/core/session-bridge-extension.js.map +1 -0
  137. package/dist/src/extensions/core/session-manager-extension.js +319 -0
  138. package/dist/src/extensions/core/session-manager-extension.js.map +1 -0
  139. package/dist/src/extensions/core/session-name-extension.js +88 -0
  140. package/dist/src/extensions/core/session-name-extension.js.map +1 -0
  141. package/dist/src/extensions/core/session-pruning-extension.js +480 -0
  142. package/dist/src/extensions/core/session-pruning-extension.js.map +1 -0
  143. package/dist/src/extensions/core/task-manager-extension.js +661 -0
  144. package/dist/src/extensions/core/task-manager-extension.js.map +1 -0
  145. package/dist/src/extensions/core/update-extension.js +438 -0
  146. package/dist/src/extensions/core/update-extension.js.map +1 -0
  147. package/dist/src/extensions/core/websearch-extension.js +463 -0
  148. package/dist/src/extensions/core/websearch-extension.js.map +1 -0
  149. package/dist/src/extensions/index.js +5 -0
  150. package/dist/src/extensions/index.js.map +1 -0
  151. package/dist/src/extensions/loader.js +80 -0
  152. package/dist/src/extensions/loader.js.map +1 -0
  153. package/dist/src/gateway/index.js +353 -0
  154. package/dist/src/gateway/index.js.map +1 -0
  155. package/dist/src/index.js +150 -0
  156. package/dist/src/index.js.map +1 -0
  157. package/dist/src/llm/anthropic.js +86 -0
  158. package/dist/src/llm/anthropic.js.map +1 -0
  159. package/dist/src/llm/index.js +9 -0
  160. package/dist/src/llm/index.js.map +1 -0
  161. package/dist/src/llm/ollama.js +113 -0
  162. package/dist/src/llm/ollama.js.map +1 -0
  163. package/dist/src/llm/router.js +145 -0
  164. package/dist/src/llm/router.js.map +1 -0
  165. package/dist/src/llm/types.js +7 -0
  166. package/dist/src/llm/types.js.map +1 -0
  167. package/dist/src/memory/index.js +5 -0
  168. package/dist/src/memory/index.js.map +1 -0
  169. package/dist/src/memory/store.js +91 -0
  170. package/dist/src/memory/store.js.map +1 -0
  171. package/dist/src/pi-config.js +80 -0
  172. package/dist/src/pi-config.js.map +1 -0
  173. package/dist/src/skills/builtin/file.js +184 -0
  174. package/dist/src/skills/builtin/file.js.map +1 -0
  175. package/dist/src/skills/builtin/shell.js +100 -0
  176. package/dist/src/skills/builtin/shell.js.map +1 -0
  177. package/dist/src/skills/builtin/subagent.js +62 -0
  178. package/dist/src/skills/builtin/subagent.js.map +1 -0
  179. package/dist/src/skills/hello.js +42 -0
  180. package/dist/src/skills/hello.js.map +1 -0
  181. package/dist/src/skills/index.js +11 -0
  182. package/dist/src/skills/index.js.map +1 -0
  183. package/dist/src/skills/loader.js +382 -0
  184. package/dist/src/skills/loader.js.map +1 -0
  185. package/dist/src/skills/types.js +8 -0
  186. package/dist/src/skills/types.js.map +1 -0
  187. package/dist/src/utils/working-dir.js +71 -0
  188. package/dist/src/utils/working-dir.js.map +1 -0
  189. package/package.json +77 -0
  190. package/skills/1password/SKILL.md +70 -0
  191. package/skills/1password/references/cli-examples.md +29 -0
  192. package/skills/1password/references/get-started.md +17 -0
  193. package/skills/apple-notes/SKILL.md +77 -0
  194. package/skills/apple-reminders/SKILL.md +118 -0
  195. package/skills/bear-notes/SKILL.md +107 -0
  196. package/skills/blogwatcher/SKILL.md +69 -0
  197. package/skills/blucli/SKILL.md +47 -0
  198. package/skills/bluebubbles/SKILL.md +131 -0
  199. package/skills/camsnap/SKILL.md +45 -0
  200. package/skills/canvas/SKILL.md +198 -0
  201. package/skills/clawhub/SKILL.md +77 -0
  202. package/skills/coding-agent/SKILL.md +284 -0
  203. package/skills/discord/SKILL.md +197 -0
  204. package/skills/eightctl/SKILL.md +50 -0
  205. package/skills/food-order/SKILL.md +48 -0
  206. package/skills/gemini/SKILL.md +43 -0
  207. package/skills/gh-issues/SKILL.md +865 -0
  208. package/skills/gifgrep/SKILL.md +79 -0
  209. package/skills/github/SKILL.md +163 -0
  210. package/skills/gog/SKILL.md +116 -0
  211. package/skills/goplaces/SKILL.md +52 -0
  212. package/skills/healthcheck/SKILL.md +245 -0
  213. package/skills/himalaya/SKILL.md +257 -0
  214. package/skills/himalaya/references/configuration.md +184 -0
  215. package/skills/himalaya/references/message-composition.md +199 -0
  216. package/skills/imsg/SKILL.md +122 -0
  217. package/skills/mcporter/SKILL.md +61 -0
  218. package/skills/model-usage/SKILL.md +69 -0
  219. package/skills/model-usage/references/codexbar-cli.md +33 -0
  220. package/skills/model-usage/scripts/model_usage.py +310 -0
  221. package/skills/nano-banana-pro/SKILL.md +58 -0
  222. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  223. package/skills/nano-pdf/SKILL.md +38 -0
  224. package/skills/notion/SKILL.md +172 -0
  225. package/skills/obsidian/SKILL.md +81 -0
  226. package/skills/openai-image-gen/SKILL.md +89 -0
  227. package/skills/openai-image-gen/scripts/gen.py +240 -0
  228. package/skills/openai-whisper/SKILL.md +38 -0
  229. package/skills/openai-whisper-api/SKILL.md +52 -0
  230. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  231. package/skills/openhue/SKILL.md +112 -0
  232. package/skills/oracle/SKILL.md +125 -0
  233. package/skills/ordercli/SKILL.md +78 -0
  234. package/skills/peekaboo/SKILL.md +190 -0
  235. package/skills/sag/SKILL.md +87 -0
  236. package/skills/session-logs/SKILL.md +115 -0
  237. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  238. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  239. package/skills/skill-creator/SKILL.md +370 -0
  240. package/skills/skill-creator/license.txt +202 -0
  241. package/skills/skill-creator/scripts/init_skill.py +378 -0
  242. package/skills/skill-creator/scripts/package_skill.py +111 -0
  243. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  244. package/skills/slack/SKILL.md +144 -0
  245. package/skills/songsee/SKILL.md +49 -0
  246. package/skills/sonoscli/SKILL.md +46 -0
  247. package/skills/spotify-player/SKILL.md +64 -0
  248. package/skills/summarize/SKILL.md +87 -0
  249. package/skills/things-mac/SKILL.md +86 -0
  250. package/skills/tmux/SKILL.md +153 -0
  251. package/skills/tmux/scripts/find-sessions.sh +112 -0
  252. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  253. package/skills/trello/SKILL.md +95 -0
  254. package/skills/video-frames/SKILL.md +46 -0
  255. package/skills/video-frames/scripts/frame.sh +81 -0
  256. package/skills/voice-call/SKILL.md +45 -0
  257. package/skills/wacli/SKILL.md +72 -0
  258. package/skills/weather/SKILL.md +112 -0
package/HEARTBEAT.md ADDED
@@ -0,0 +1,45 @@
1
+ # Heartbeat Checklist
2
+
3
+ <!--
4
+ This file controls what the agent checks during periodic heartbeats.
5
+ Keep it short and actionable. If this file is empty or only contains headers,
6
+ heartbeats will be skipped to save tokens.
7
+
8
+ The agent can read this file using the /heartbeat now command or via
9
+ scheduled checks (if HEARTBEAT_ENABLED is set in environment).
10
+
11
+ If nothing needs attention, the agent should reply with HEARTBEAT_OK.
12
+ If something needs attention, the agent describes the issue.
13
+ -->
14
+
15
+ ## Regular Checks
16
+
17
+ - [ ] Review any pending tasks flagged in the workspace
18
+ - [ ] Check for blocked items needing human input
19
+ - [ ] Verify no critical system alerts
20
+
21
+ ## Context-Aware (only check when relevant)
22
+
23
+ - [ ] Sessions that haven't been updated recently
24
+ - [ ] Scheduled tasks or reminders
25
+ - [ ] Follow-ups from previous conversations
26
+
27
+ ## Response Protocol
28
+
29
+ | Situation | Response |
30
+ |-----------|----------|
31
+ | Nothing needs attention | Reply: `HEARTBEAT_OK` |
32
+ | Minor item noted | Brief description (no HEARTBEAT_OK) |
33
+ | Urgent issue | Alert message (no HEARTBEAT_OK) |
34
+
35
+ ## Environment Variables
36
+
37
+ - `HEARTBEAT_ENABLED` - Set to "false" to disable (default: true)
38
+ - `HEARTBEAT_EVERY` - Interval like "30m", "1h", "2h" (default: 30m)
39
+ - `HEARTBEAT_ACK_MAX_CHARS` - Max length of ack message (default: 300)
40
+
41
+ ## Commands
42
+
43
+ - `/heartbeat` - Show status
44
+ - `/heartbeat now` - Trigger immediate check
45
+ - `/heartbeat-init` - Create this template file
package/README.md ADDED
@@ -0,0 +1,197 @@
1
+ # 0xKobold
2
+
3
+ ```
4
+ ..
5
+ . ..
6
+ . ,^ . . ..... ......
7
+ ,^ ... :: . . ... ,;. ...
8
+ .lI^ I.`I,.. ;;.. . `l}^ ^:;+td]^.. ^:!!i .
9
+ . ,:^I^I< . :+,.. ..l+tI`!?o@f, .,~fWQft?<..
10
+ `:. ^<l>,!I>^`<!^ .. `?_-11COQYI:;l!l+1o@#[l
11
+ !<`l.ii,~l^iI-,`!I.. .. ... ^l>??}JOoUUZ1]-fYXB@fl ,+i..
12
+ . `.:<+:<ll>~l>+-<:~!^ . I_>_?<+?}Bb+M8%oOf}-_+_!~~+[CQJ:..
13
+ `:,lI,:Ii!<:`!iii>_+^ :!^ ^``^,l+?<_}+fJ?1ItJ1<>?[?JX1YdOOodtl ..
14
+ . li:^~Il, :Il`::,:i!,I>I`^l_~--<i_<>?+~?_-CY}~i+-?~]fO@@@@@Ml
15
+ ..,!``I,!]JZXJ{]I,,~~;, I[_<-t}1doCdfdQCOB%oJ{+?{ddMO@@@#@o>` .:-< .
16
+ .``l;;{QW%###WQZ+;>>I ...<YfZ{]}Xb!IQ@@8%W@@QJ{[-JJZ@@@@@@%dZbMX[,..
17
+ . II ,I]bo%8%%MQd?>; . ;li . ,Z@@@@#@MI]~ZUOX}YB@@@@@8oQY};
18
+ . ^>^.^~fbXXdZf_,, Il . I~d@@#MOIY>l[ZoW@@@@@@@@@UIMO{. .
19
+ `I!<` ,lllll :,i;,^` ...~+<d#oJQQbIIJdUB@@@@@@@#%OU8WW@@81+,`
20
+ .,i[l:i!, `:I<-l<-, ^^` ..:]ZodXIdbC1i1Z#@@@@@@%%BWWoO%@@@@%bQf[^.
21
+ .J-I ~I!.iCU->-1_<`ii>~:....:_1}It}!.::+tX%#@%MbMBQ%@@@@@@%%WbY]+-~`.
22
+ XWOUMO{,Z@B-;1B]:I_->i^ ... `;;JOB#QB#M8@@@@@@8OOOQdZ{~i!i!:.
23
+ ..iJB@@M[1@%Y<X@o][]]>:III,^, ....,Z@@@@@@@@@@@@@@8#WOMoZI~~~~+I..
24
+ `~M@8X#@8Zf#@BUWb1{1?]1}]<!^ ...:b@@@@@@@@@@@@@8BW#dXZf[?-+l:`..
25
+ .. :JB@@@@%%@@@B#@%W%OQ8BMQbU> ..>M%@@@@@@@@@@@#8WBMZII]_I:^
26
+ .. ^?1YbMWO#@@@@@@@@@@@@@@OZ-` d@#@@@@@@@@#%W8##OoXZXQCi^ ...
27
+ .. .`.:!~-CXd%@@@@@@@8oQ}}%@@@@@@@@@@@BWWBWMMdbf[->>^..
28
+ ..... :{@@@@@@@OYUCQ8@@@@@@@@8BB8WMQModU?++:!I..
29
+ .......... _@@B8%@#QMdYJO@@@@%BB%obO%obbXZ{?-~l,;..
30
+ .. {ooQB%o@%OO-{Z@%oOooWOXZYYII}?_~iiI.`
31
+ . ^+IoQWQbOQXdJbfU#BdUZYJI[{[--l>:`
32
+ `><+-]1??_~>++~!]J{}~>i>>;!;` ..
33
+ ` . ..
34
+ ........ ......... .........
35
+ ```
36
+
37
+ > *"Your digital familiar - a personal AI assistant that learns, evolves, and helps you code 24/7"*
38
+
39
+ ## Hybrid Architecture
40
+
41
+ Best of both worlds:
42
+ - **Bun + Elysia** for blazing fast gateway
43
+ - **@mariozechner/pi-agent-core** for proven agent loop
44
+ - **Event bus** for decoupled architecture
45
+ - **Hot-reload skills** - just edit .ts files
46
+ - **Approval queue** for safety
47
+ - **Multi-provider LLM** (Ollama default, Anthropic supported)
48
+ - **Subagents** for parallel work
49
+
50
+ ## Installation
51
+
52
+ ### Via NPM (Recommended)
53
+
54
+ ```bash
55
+ # Install globally
56
+ npm install -g 0xkobold
57
+
58
+ # Or use with npx
59
+ npx 0xkobold init
60
+ npx 0xkobold start
61
+ ```
62
+
63
+ ### From Source
64
+
65
+ ```bash
66
+ # Clone and install
67
+ git clone https://github.com/yourusername/0xkobold.git
68
+ cd 0xkobold
69
+ bun install
70
+
71
+ # Start Ollama (in another terminal)
72
+ ollama run kimi-k2.5:cloud
73
+
74
+ # Start the server
75
+ bun run start
76
+ ```
77
+
78
+ ## Project Structure
79
+
80
+ ```
81
+ 0xkobold/
82
+ ├── src/
83
+ │ ├── agent/ # Pi Agent Core adapter with subagent support
84
+ │ ├── approval/ # Approval queue for risky operations
85
+ │ ├── channels/ # Discord integration
86
+ │ ├── config/ # Zod config system
87
+ │ ├── discord/ # Discord bot
88
+ │ ├── event-bus/ # Decoupled event system
89
+ │ ├── gateway/ # Elysia WebSocket gateway
90
+ │ ├── llm/ # Ollama + Anthropic providers
91
+ │ ├── memory/ # JSON persistence
92
+ │ ├── skills/ # Hot-reload skill system
93
+ │ └── index.ts # Main entry
94
+ ├── skills/ # Your custom skills (hot-reloaded)
95
+ └── package.json
96
+ ```
97
+
98
+ ## Creating Skills
99
+
100
+ Skills are plain TypeScript files in the `skills/` folder:
101
+
102
+ ```typescript
103
+ // skills/hello.ts
104
+ import type { Skill } from '../src/skills/types';
105
+
106
+ export const helloSkill: Skill = {
107
+ name: 'hello',
108
+ description: 'Say hello to someone',
109
+ risk: 'safe',
110
+
111
+ toolDefinition: {
112
+ type: 'function',
113
+ function: {
114
+ name: 'hello',
115
+ description: 'Say hello to someone',
116
+ parameters: {
117
+ type: 'object',
118
+ properties: {
119
+ name: { type: 'string', description: 'Name to greet' },
120
+ },
121
+ required: ['name'],
122
+ },
123
+ },
124
+ },
125
+
126
+ async execute(args) {
127
+ return { message: `Hello, ${args.name}!` };
128
+ },
129
+ };
130
+
131
+ export default helloSkill;
132
+ ```
133
+
134
+ The skill is automatically hot-reloaded when you save!
135
+
136
+ ## Safety
137
+
138
+ Risk levels:
139
+ - `safe` - No approval needed (math, string operations)
140
+ - `medium` - Confirmation for write operations (file write, web requests)
141
+ - `high` - Explicit approval for dangerous operations (shell, delete)
142
+
143
+ ## Subagents
144
+
145
+ Spawn child agents for parallel work:
146
+
147
+ ```typescript
148
+ const result = await agent.spawn('Research this topic');
149
+ ```
150
+
151
+ The `spawn_subagent` skill is built-in and lets agents create child agents automatically.
152
+
153
+ ## Commands
154
+
155
+ ```bash
156
+ bun run start # Start server
157
+ bun run tui # Start TUI
158
+ bun run cli # CLI commands
159
+ ```
160
+
161
+ ## Configuration
162
+
163
+ Config is stored in `~/.0xkobold/config.json5`:
164
+
165
+ ```json5
166
+ {
167
+ agents: {
168
+ default: {
169
+ model: 'ollama/kimi-k2.5:cloud',
170
+ capabilities: ['chat', 'code'],
171
+ },
172
+ },
173
+ gateway: {
174
+ enabled: true,
175
+ port: 18789,
176
+ },
177
+ discord: {
178
+ enabled: false,
179
+ token: '${DISCORD_BOT_TOKEN}',
180
+ },
181
+ }
182
+ ```
183
+
184
+ ## Architecture Differences from OpenClaw
185
+
186
+ | Aspect | OpenClaw | 0xKobold |
187
+ |--------|----------|----------|
188
+ | **Gateway** | Bun.serve | Elysia.js (3x faster) |
189
+ | **Orchestration** | Tight coupling | Event bus (decoupled) |
190
+ | **Agent Loop** | Custom | @mariozechner/pi-agent-core |
191
+ | **Skills** | Compiled | Hot-reload .ts files |
192
+ | **Approval** | Basic | Risk-based queue |
193
+ | **Dependencies** | Many | Minimal (~10) |
194
+
195
+ ## License
196
+
197
+ MIT
package/USAGE.md ADDED
@@ -0,0 +1,191 @@
1
+ # 0xKobold Usage Guide
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ # Clone the repo
7
+ git clone https://github.com/yourusername/0xKobolds.git
8
+ cd 0xKobolds
9
+
10
+ # Install dependencies
11
+ bun install
12
+
13
+ # Build the project
14
+ bun run build
15
+
16
+ # Link globally (recommended)
17
+ bun link
18
+
19
+ # Or install globally
20
+ npm install -g .
21
+ ```
22
+
23
+ ## Usage Modes
24
+
25
+ ### Global Mode (Default)
26
+
27
+ When you run `0xkobold` from anywhere, it uses the global configuration:
28
+
29
+ ```bash
30
+ # Start TUI
31
+ 0xkobold
32
+
33
+ # Or explicitly
34
+ 0xkobold tui
35
+ ```
36
+
37
+ **In Global Mode:**
38
+ - Extensions load from the installed 0xKobold package (dist folder)
39
+ - Config: `~/.config/kobold/kobold.json` (or `~/.0xkobold/`)
40
+ - Sessions: `~/.0xkobold/sessions/`
41
+ - Skills: `~/.0xkobold/skills/`
42
+
43
+ ### Local Mode (Per-Project)
44
+
45
+ Use `--local` flag to develop within a specific project:
46
+
47
+ ```bash
48
+ # Navigate to your project
49
+ cd ~/my-project
50
+
51
+ # Start in local mode
52
+ 0xkobold --local
53
+
54
+ # Or use the explicit local command
55
+ 0xkobold local
56
+ ```
57
+
58
+ **In Local Mode:**
59
+ - Extensions still load from the installed 0xKobold package (so features work)
60
+ - Config: `./kobold.json` (creates if doesn't exist)
61
+ - Sessions: `./.kobold/sessions/`
62
+ - Skills: `./skills/` (falls back to global)
63
+ - Memory: `./.kobold/memory.db`
64
+
65
+ ## Project Setup (Local Mode)
66
+
67
+ Create a `kobold.json` in your project root:
68
+
69
+ ```json
70
+ {
71
+ "meta": {
72
+ "version": "1.0.0",
73
+ "description": "My Project"
74
+ },
75
+ "agents": {
76
+ "defaults": {
77
+ "model": "ollama/kimi-k2.5:cloud",
78
+ "heartbeat": {
79
+ "enabled": true,
80
+ "every": "30m"
81
+ }
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ Create a `HEARTBEAT.md` for periodic check-ins:
88
+
89
+ ```markdown
90
+ # Project Checklist
91
+
92
+ - [ ] Review pending tasks
93
+ - [ ] Check for blocked items
94
+ - [ ] Update documentation
95
+ ```
96
+
97
+ ## Extension System
98
+
99
+ Extensions are bundled with the package and auto-load:
100
+
101
+ | Category | Extensions |
102
+ |----------|-----------|
103
+ | Infrastructure | ollama-provider, session-bridge |
104
+ | Core | heartbeat, mode-manager, task-manager, context-pruning |
105
+ | Multi-Channel | discord-channel, multi-channel |
106
+ | Safety | protected-paths, confirm-destructive, git-checkpoint |
107
+ | Integrations | mcp, gateway, websearch |
108
+
109
+ ## Troubleshooting
110
+
111
+ ### Extensions Not Loading
112
+
113
+ If you see "No models available" or extensions fail to load:
114
+
115
+ ```bash
116
+ # Rebuild the project
117
+ bun run build
118
+
119
+ # Re-link if using bun link
120
+ bun unlink
121
+ bun link
122
+ ```
123
+
124
+ ### Local Mode Not Working
125
+
126
+ ```bash
127
+ # Check if local mode is active
128
+ echo $KOBOLD_LOCAL_MODE # should print 'true' in local mode
129
+
130
+ # Verify kobold.json exists in CWD
131
+ ls -la kobold.json
132
+
133
+ # Check which config is being loaded
134
+ 0xkobold config file
135
+ ```
136
+
137
+ ### Debug Extension Paths
138
+
139
+ The TUI will print whether it's running in:
140
+ - `Production (from dist)` - global install, uses .js extensions
141
+ - `Development (from source)` - dev mode, uses .ts extensions
142
+ - `LOCAL mode` - project-specific development
143
+
144
+ ## Environment Variables
145
+
146
+ | Variable | Description |
147
+ |----------|-------------|
148
+ | `KOBOLD_CONFIG_PATH` | Override config file location |
149
+ | `KOBOLD_HOME` | Override base directory (default: ~/.config/kobold) |
150
+ | `KOBOLD_LOCAL_MODE` | Set to 'true' for local mode (auto-set by --local) |
151
+ | `PI_CODING_AGENT_DIR` | Base dir for pi-coding-agent (default: ~/.0xkobold) |
152
+
153
+ ## CLI Commands
154
+
155
+ ```bash
156
+ # Global commands
157
+ 0xkobold status # Check service status
158
+ 0xkobold stop # Stop daemon
159
+ 0xkobold logs # View logs
160
+
161
+ # Discord
162
+ 0xkobold discord status # Check Discord connection
163
+ 0xkobold discord test # Send test message
164
+
165
+ # Config
166
+ 0xkobold config file # Show config path
167
+ 0xkobold config init # Create default config
168
+
169
+ # Local development
170
+ 0xkobold local # Start in local mode
171
+ 0xkobold --local # Same as above
172
+ ```
173
+
174
+ ## Development
175
+
176
+ When developing 0xKobold itself:
177
+
178
+ ```bash
179
+ cd ~/Documents/code/0xKobolds
180
+
181
+ # Run from source (dev mode)
182
+ bun run tui
183
+
184
+ # Watch and rebuild
185
+ bun run dev
186
+
187
+ # Build for production
188
+ bun run build
189
+ ```
190
+
191
+ In dev mode, extensions load directly from `src/` as `.ts` files.
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "0xkobold",
3
+ "version": "0.0.1",
4
+ "description": "Your digital familiar - a personal AI assistant that learns and evolves",
5
+ "main": "dist/src/index.js",
6
+ "types": "dist/src/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "0xkobold": "./dist/src/cli/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/src/index.js",
14
+ "types": "./dist/src/index.d.ts"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "start": "bun run src/index.ts",
22
+ "cli": "bun run src/cli/index.ts",
23
+ "tui": "bun run src/index.ts",
24
+ "init": "bun run src/cli/index.ts init",
25
+ "test": "bun test",
26
+ "update": "bun run src/cli/index.ts update",
27
+ "update:check": "bun run src/cli/index.ts update check",
28
+ "update:install": "bun run src/cli/index.ts update install",
29
+ "update:framework": "bun run src/cli/index.ts update framework",
30
+ "setup-hooks": "bash scripts/install-hooks.sh",
31
+ "prepublishOnly": "bun run build"
32
+ },
33
+ "keywords": ["ai", "assistant", "cli", "agent", "kobold"],
34
+ "author": "0xKobold Team",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "@mariozechner/pi-agent-core": "0.56.2",
38
+ "@mariozechner/pi-coding-agent": "0.56.2",
39
+ "@mariozechner/pi-tui": "0.56.2",
40
+ "ajv": "^8.18.0",
41
+ "blessed": "^0.1.81",
42
+ "commander": "^11.1.0",
43
+ "discord.js": "^14.25.1",
44
+ "glob": "^10.5.0",
45
+ "json5": "^2.2.3",
46
+ "react": "^19.2.4",
47
+ "sharp": "^0.33.5",
48
+ "zod": "^3.25.76"
49
+ },
50
+ "devDependencies": {
51
+ "@types/blessed": "^0.1.27",
52
+ "@types/json5": "^2.2.0",
53
+ "@types/node": "^20.19.35",
54
+ "bun-types": "latest",
55
+ "typescript": "^5.9.3",
56
+ "@types/bun": "latest"
57
+ },
58
+ "engines": {
59
+ "node": ">=18.0.0",
60
+ "bun": ">=1.0.0"
61
+ },
62
+ "packageManager": "bun@1.3.7",
63
+ "private": false,
64
+ "files": [
65
+ "dist",
66
+ "README.md",
67
+ "LICENSE",
68
+ "package.json",
69
+ "USAGE.md",
70
+ "HEARTBEAT.md",
71
+ "skills/",
72
+ ".agents/skills/"
73
+ ],
74
+ "publishConfig": {
75
+ "access": "public"
76
+ }
77
+ }