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.
- package/.agents/skills/nextjs-best-practices/SKILL.md +208 -0
- package/.agents/skills/sql-optimization-patterns/SKILL.md +509 -0
- package/HEARTBEAT.md +45 -0
- package/README.md +197 -0
- package/USAGE.md +191 -0
- package/dist/package.json +77 -0
- package/dist/src/agent/pi-adapter.js +307 -0
- package/dist/src/agent/pi-adapter.js.map +1 -0
- package/dist/src/agent/tool-adapter.js +86 -0
- package/dist/src/agent/tool-adapter.js.map +1 -0
- package/dist/src/approval/queue.js +114 -0
- package/dist/src/approval/queue.js.map +1 -0
- package/dist/src/ascii-kobold.js +76 -0
- package/dist/src/ascii-kobold.js.map +1 -0
- package/dist/src/cli/client.js +217 -0
- package/dist/src/cli/client.js.map +1 -0
- package/dist/src/cli/commands/agent.js +272 -0
- package/dist/src/cli/commands/agent.js.map +1 -0
- package/dist/src/cli/commands/chat.js +234 -0
- package/dist/src/cli/commands/chat.js.map +1 -0
- package/dist/src/cli/commands/config.js +202 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/daemon.js +203 -0
- package/dist/src/cli/commands/daemon.js.map +1 -0
- package/dist/src/cli/commands/gateway.js +184 -0
- package/dist/src/cli/commands/gateway.js.map +1 -0
- package/dist/src/cli/commands/init.js +175 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/kobold.js +21 -0
- package/dist/src/cli/commands/kobold.js.map +1 -0
- package/dist/src/cli/commands/logs.js +27 -0
- package/dist/src/cli/commands/logs.js.map +1 -0
- package/dist/src/cli/commands/mode.js +121 -0
- package/dist/src/cli/commands/mode.js.map +1 -0
- package/dist/src/cli/commands/persona.js +261 -0
- package/dist/src/cli/commands/persona.js.map +1 -0
- package/dist/src/cli/commands/start.js +66 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/status.js +117 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/stop.js +27 -0
- package/dist/src/cli/commands/stop.js.map +1 -0
- package/dist/src/cli/commands/system.js +128 -0
- package/dist/src/cli/commands/system.js.map +1 -0
- package/dist/src/cli/commands/tui.js +103 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/cli/commands/update.js +133 -0
- package/dist/src/cli/commands/update.js.map +1 -0
- package/dist/src/cli/extensions/discord.js +113 -0
- package/dist/src/cli/extensions/discord.js.map +1 -0
- package/dist/src/cli/extensions/env.js +91 -0
- package/dist/src/cli/extensions/env.js.map +1 -0
- package/dist/src/cli/extensions/heartbeat.js +78 -0
- package/dist/src/cli/extensions/heartbeat.js.map +1 -0
- package/dist/src/cli/index.js +24 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/program.js +70 -0
- package/dist/src/cli/program.js.map +1 -0
- package/dist/src/cli/repl.js +184 -0
- package/dist/src/cli/repl.js.map +1 -0
- package/dist/src/cli/shared/discord-service.js +102 -0
- package/dist/src/cli/shared/discord-service.js.map +1 -0
- package/dist/src/config/index.js +10 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/loader.js +401 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/paths.js +84 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/types.js +8 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/context-detector.js +60 -0
- package/dist/src/context-detector.js.map +1 -0
- package/dist/src/discord/index.js +376 -0
- package/dist/src/discord/index.js.map +1 -0
- package/dist/src/event-bus/index.js +97 -0
- package/dist/src/event-bus/index.js.map +1 -0
- package/dist/src/extensions/command-args.js +68 -0
- package/dist/src/extensions/command-args.js.map +1 -0
- package/dist/src/extensions/core/agent-registry-extension.js +541 -0
- package/dist/src/extensions/core/agent-registry-extension.js.map +1 -0
- package/dist/src/extensions/core/agent-worker.js +148 -0
- package/dist/src/extensions/core/agent-worker.js.map +1 -0
- package/dist/src/extensions/core/compaction-safeguard.js +154 -0
- package/dist/src/extensions/core/compaction-safeguard.js.map +1 -0
- package/dist/src/extensions/core/confirm-destructive.js +43 -0
- package/dist/src/extensions/core/confirm-destructive.js.map +1 -0
- package/dist/src/extensions/core/context-aware-extension.js +124 -0
- package/dist/src/extensions/core/context-aware-extension.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/extension.js +124 -0
- package/dist/src/extensions/core/context-pruning/extension.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/pruner.js +312 -0
- package/dist/src/extensions/core/context-pruning/pruner.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/runtime.js +48 -0
- package/dist/src/extensions/core/context-pruning/runtime.js.map +1 -0
- package/dist/src/extensions/core/context-pruning/settings.js +105 -0
- package/dist/src/extensions/core/context-pruning/settings.js.map +1 -0
- package/dist/src/extensions/core/dirty-repo-guard.js +42 -0
- package/dist/src/extensions/core/dirty-repo-guard.js.map +1 -0
- package/dist/src/extensions/core/discord-channel-extension.js +205 -0
- package/dist/src/extensions/core/discord-channel-extension.js.map +1 -0
- package/dist/src/extensions/core/discord-extension.js +142 -0
- package/dist/src/extensions/core/discord-extension.js.map +1 -0
- package/dist/src/extensions/core/env-loader-extension.js +157 -0
- package/dist/src/extensions/core/env-loader-extension.js.map +1 -0
- package/dist/src/extensions/core/fileops-extension.js +699 -0
- package/dist/src/extensions/core/fileops-extension.js.map +1 -0
- package/dist/src/extensions/core/gateway-extension.js +730 -0
- package/dist/src/extensions/core/gateway-extension.js.map +1 -0
- package/dist/src/extensions/core/git-checkpoint.js +46 -0
- package/dist/src/extensions/core/git-checkpoint.js.map +1 -0
- package/dist/src/extensions/core/handoff-extension.js +206 -0
- package/dist/src/extensions/core/handoff-extension.js.map +1 -0
- package/dist/src/extensions/core/heartbeat-extension.js +373 -0
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -0
- package/dist/src/extensions/core/mcp-extension.js +413 -0
- package/dist/src/extensions/core/mcp-extension.js.map +1 -0
- package/dist/src/extensions/core/mode-manager-extension.js +562 -0
- package/dist/src/extensions/core/mode-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/multi-channel-extension.js +435 -0
- package/dist/src/extensions/core/multi-channel-extension.js.map +1 -0
- package/dist/src/extensions/core/ollama-provider-extension.js +66 -0
- package/dist/src/extensions/core/ollama-provider-extension.js.map +1 -0
- package/dist/src/extensions/core/onboarding-extension.js +122 -0
- package/dist/src/extensions/core/onboarding-extension.js.map +1 -0
- package/dist/src/extensions/core/persona-loader-extension.js +139 -0
- package/dist/src/extensions/core/persona-loader-extension.js.map +1 -0
- package/dist/src/extensions/core/pi-notify-extension.js +70 -0
- package/dist/src/extensions/core/pi-notify-extension.js.map +1 -0
- package/dist/src/extensions/core/protected-paths.js +24 -0
- package/dist/src/extensions/core/protected-paths.js.map +1 -0
- package/dist/src/extensions/core/questionnaire-extension.js +242 -0
- package/dist/src/extensions/core/questionnaire-extension.js.map +1 -0
- package/dist/src/extensions/core/self-update-extension.js +181 -0
- package/dist/src/extensions/core/self-update-extension.js.map +1 -0
- package/dist/src/extensions/core/session-bridge-extension.js +78 -0
- package/dist/src/extensions/core/session-bridge-extension.js.map +1 -0
- package/dist/src/extensions/core/session-manager-extension.js +319 -0
- package/dist/src/extensions/core/session-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/session-name-extension.js +88 -0
- package/dist/src/extensions/core/session-name-extension.js.map +1 -0
- package/dist/src/extensions/core/session-pruning-extension.js +480 -0
- package/dist/src/extensions/core/session-pruning-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +661 -0
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -0
- package/dist/src/extensions/core/update-extension.js +438 -0
- package/dist/src/extensions/core/update-extension.js.map +1 -0
- package/dist/src/extensions/core/websearch-extension.js +463 -0
- package/dist/src/extensions/core/websearch-extension.js.map +1 -0
- package/dist/src/extensions/index.js +5 -0
- package/dist/src/extensions/index.js.map +1 -0
- package/dist/src/extensions/loader.js +80 -0
- package/dist/src/extensions/loader.js.map +1 -0
- package/dist/src/gateway/index.js +353 -0
- package/dist/src/gateway/index.js.map +1 -0
- package/dist/src/index.js +150 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/anthropic.js +86 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/index.js +9 -0
- package/dist/src/llm/index.js.map +1 -0
- package/dist/src/llm/ollama.js +113 -0
- package/dist/src/llm/ollama.js.map +1 -0
- package/dist/src/llm/router.js +145 -0
- package/dist/src/llm/router.js.map +1 -0
- package/dist/src/llm/types.js +7 -0
- package/dist/src/llm/types.js.map +1 -0
- package/dist/src/memory/index.js +5 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/memory/store.js +91 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/pi-config.js +80 -0
- package/dist/src/pi-config.js.map +1 -0
- package/dist/src/skills/builtin/file.js +184 -0
- package/dist/src/skills/builtin/file.js.map +1 -0
- package/dist/src/skills/builtin/shell.js +100 -0
- package/dist/src/skills/builtin/shell.js.map +1 -0
- package/dist/src/skills/builtin/subagent.js +62 -0
- package/dist/src/skills/builtin/subagent.js.map +1 -0
- package/dist/src/skills/hello.js +42 -0
- package/dist/src/skills/hello.js.map +1 -0
- package/dist/src/skills/index.js +11 -0
- package/dist/src/skills/index.js.map +1 -0
- package/dist/src/skills/loader.js +382 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/types.js +8 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/utils/working-dir.js +71 -0
- package/dist/src/utils/working-dir.js.map +1 -0
- package/package.json +77 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- 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
|
+
}
|