@jcheesepkg/nanobot 0.9.0 → 0.9.2
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 +18 -18
- package/dist/agent/context.d.mts +4 -4
- package/dist/agent/context.d.mts.map +1 -1
- package/dist/agent/context.mjs +27 -28
- package/dist/agent/context.mjs.map +1 -1
- package/dist/agent/loop.d.mts +5 -3
- package/dist/agent/loop.d.mts.map +1 -1
- package/dist/agent/loop.mjs +64 -55
- package/dist/agent/loop.mjs.map +1 -1
- package/dist/agent/memory.d.mts.map +1 -1
- package/dist/agent/memory.mjs +3 -3
- package/dist/agent/memory.mjs.map +1 -1
- package/dist/agent/skills.d.mts.map +1 -1
- package/dist/agent/skills.mjs +4 -4
- package/dist/agent/skills.mjs.map +1 -1
- package/dist/agent/subagent.d.mts.map +1 -1
- package/dist/agent/subagent.mjs +22 -22
- package/dist/agent/subagent.mjs.map +1 -1
- package/dist/agent/tools/base.mjs +2 -2
- package/dist/agent/tools/base.mjs.map +1 -1
- package/dist/agent/tools/cron.d.mts +1 -1
- package/dist/agent/tools/cron.d.mts.map +1 -1
- package/dist/agent/tools/cron.mjs +11 -11
- package/dist/agent/tools/cron.mjs.map +1 -1
- package/dist/agent/tools/filesystem.d.mts +4 -4
- package/dist/agent/tools/filesystem.d.mts.map +1 -1
- package/dist/agent/tools/filesystem.mjs +20 -20
- package/dist/agent/tools/filesystem.mjs.map +1 -1
- package/dist/agent/tools/flex.d.mts +1 -1
- package/dist/agent/tools/flex.d.mts.map +1 -1
- package/dist/agent/tools/flex.mjs +112 -112
- package/dist/agent/tools/flex.mjs.map +1 -1
- package/dist/agent/tools/flex.test.mjs +60 -59
- package/dist/agent/tools/flex.test.mjs.map +1 -1
- package/dist/agent/tools/message.d.mts +1 -1
- package/dist/agent/tools/message.d.mts.map +1 -1
- package/dist/agent/tools/message.mjs +4 -4
- package/dist/agent/tools/message.mjs.map +1 -1
- package/dist/agent/tools/registry.d.mts.map +1 -1
- package/dist/agent/tools/registry.mjs +4 -4
- package/dist/agent/tools/registry.mjs.map +1 -1
- package/dist/agent/tools/shell.d.mts +1 -1
- package/dist/agent/tools/shell.mjs +4 -4
- package/dist/agent/tools/shell.mjs.map +1 -1
- package/dist/agent/tools/spawn.d.mts +1 -1
- package/dist/agent/tools/spawn.d.mts.map +1 -1
- package/dist/agent/tools/spawn.mjs +4 -4
- package/dist/agent/tools/spawn.mjs.map +1 -1
- package/dist/agent/tools/web.d.mts +2 -2
- package/dist/agent/tools/web.d.mts.map +1 -1
- package/dist/agent/tools/web.mjs +36 -36
- package/dist/agent/tools/web.mjs.map +1 -1
- package/dist/bus/events.mjs +1 -1
- package/dist/bus/events.mjs.map +1 -1
- package/dist/bus/queue.d.mts.map +1 -1
- package/dist/bus/queue.mjs.map +1 -1
- package/dist/channels/base.d.mts.map +1 -1
- package/dist/channels/base.mjs +2 -2
- package/dist/channels/base.mjs.map +1 -1
- package/dist/channels/line.d.mts +1 -0
- package/dist/channels/line.d.mts.map +1 -1
- package/dist/channels/line.mjs +65 -65
- package/dist/channels/line.mjs.map +1 -1
- package/dist/channels/line.test.mjs +26 -27
- package/dist/channels/line.test.mjs.map +1 -1
- package/dist/channels/manager.d.mts.map +1 -1
- package/dist/channels/manager.mjs +9 -9
- package/dist/channels/manager.mjs.map +1 -1
- package/dist/channels/telegram.mjs +34 -34
- package/dist/channels/telegram.mjs.map +1 -1
- package/dist/cli/index.mjs +36 -36
- package/dist/cli/index.mjs.map +1 -1
- package/dist/config/loader.d.mts.map +1 -1
- package/dist/config/loader.mjs +1 -1
- package/dist/config/loader.mjs.map +1 -1
- package/dist/config/schema.d.mts +381 -381
- package/dist/config/schema.d.mts.map +1 -1
- package/dist/config/schema.mjs +42 -42
- package/dist/config/schema.mjs.map +1 -1
- package/dist/gateway/server.d.mts.map +1 -1
- package/dist/gateway/server.mjs +48 -54
- package/dist/gateway/server.mjs.map +1 -1
- package/dist/heartbeat/service.d.mts.map +1 -1
- package/dist/heartbeat/service.mjs +8 -8
- package/dist/heartbeat/service.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/node_modules/{@jridgewell → .bun/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell}/sourcemap-codec/dist/sourcemap-codec.mjs +1 -1
- package/dist/node_modules/.bun/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_expect@2.1.9/node_modules/@vitest}/expect/dist/index.mjs +8 -8
- package/dist/node_modules/.bun/@vitest_expect@2.1.9/node_modules/@vitest/expect/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_pretty-format@2.1.9/node_modules/@vitest}/pretty-format/dist/index.mjs +2 -2
- package/dist/node_modules/.bun/@vitest_pretty-format@2.1.9/node_modules/@vitest/pretty-format/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/chunk-tasks.mjs +1 -1
- package/dist/node_modules/.bun/@vitest_runner@2.1.9/node_modules/@vitest/runner/dist/chunk-tasks.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/index.mjs +6 -6
- package/dist/node_modules/.bun/@vitest_runner@2.1.9/node_modules/@vitest/runner/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_snapshot@2.1.9/node_modules/@vitest}/snapshot/dist/index.mjs +5 -5
- package/dist/node_modules/.bun/@vitest_snapshot@2.1.9/node_modules/@vitest/snapshot/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_spy@2.1.9/node_modules/@vitest}/spy/dist/index.mjs +2 -2
- package/dist/node_modules/.bun/@vitest_spy@2.1.9/node_modules/@vitest/spy/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/chunk-_commonjsHelpers.mjs +3 -3
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/chunk-_commonjsHelpers.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/diff.mjs +4 -4
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/diff.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/error.mjs +3 -3
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/error.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/helpers.mjs +1 -1
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/helpers.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/index.mjs +3 -3
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/index.mjs.map +1 -0
- package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/source-map.mjs +1 -1
- package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/source-map.mjs.map +1 -0
- package/dist/node_modules/{chai → .bun/chai@5.3.3/node_modules/chai}/index.mjs +1 -1
- package/dist/node_modules/.bun/chai@5.3.3/node_modules/chai/index.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/arguments.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/arguments.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/array.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/array.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/bigint.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/bigint.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/class.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/class.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/date.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/date.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/error.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/error.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/function.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/function.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/helpers.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/helpers.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/html.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/html.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/index.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/index.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/map.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/map.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/number.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/number.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/object.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/object.mjs.map +1 -0
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/promise.mjs +6 -0
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/promise.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/regexp.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/regexp.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/set.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/set.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/string.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/string.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/symbol.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/symbol.mjs.map +1 -0
- package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/typedarray.mjs +1 -1
- package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/typedarray.mjs.map +1 -0
- package/dist/node_modules/{magic-string → .bun/magic-string@0.30.21/node_modules/magic-string}/dist/magic-string.es.mjs +2 -2
- package/dist/node_modules/.bun/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.mjs.map +1 -0
- package/dist/node_modules/{@vitest/snapshot → .bun/pathe@1.1.2}/node_modules/pathe/dist/shared/pathe.ff20891b.mjs +1 -1
- package/dist/node_modules/.bun/pathe@1.1.2/node_modules/pathe/dist/shared/pathe.ff20891b.mjs.map +1 -0
- package/dist/node_modules/{tinyrainbow → .bun/tinyrainbow@1.2.0/node_modules/tinyrainbow}/dist/chunk-BVHSVHOK.mjs +1 -1
- package/dist/node_modules/.bun/tinyrainbow@1.2.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.mjs.map +1 -0
- package/dist/node_modules/{tinyrainbow → .bun/tinyrainbow@1.2.0/node_modules/tinyrainbow}/dist/node.mjs +1 -1
- package/dist/node_modules/.bun/tinyrainbow@1.2.0/node_modules/tinyrainbow/dist/node.mjs.map +1 -0
- package/dist/node_modules/{tinyspy → .bun/tinyspy@3.0.2/node_modules/tinyspy}/dist/index.mjs +1 -1
- package/dist/node_modules/.bun/tinyspy@3.0.2/node_modules/tinyspy/dist/index.mjs.map +1 -0
- package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs +1 -1
- package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs.map +1 -0
- package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/date.W2xKR2qe.mjs +1 -1
- package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/date.W2xKR2qe.mjs.map +1 -0
- package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/utils.C8RiOc4B.mjs +2 -2
- package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/utils.C8RiOc4B.mjs.map +1 -0
- package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/vi.DgezovHB.mjs +11 -11
- package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/vi.DgezovHB.mjs.map +1 -0
- package/dist/providers/base.d.mts +2 -2
- package/dist/providers/base.d.mts.map +1 -1
- package/dist/providers/openai-provider.d.mts.map +1 -1
- package/dist/providers/openai-provider.mjs +10 -9
- package/dist/providers/openai-provider.mjs.map +1 -1
- package/dist/providers/registry.d.mts +1 -1
- package/dist/providers/registry.d.mts.map +1 -1
- package/dist/providers/registry.mjs +99 -99
- package/dist/providers/registry.mjs.map +1 -1
- package/dist/session/manager.d.mts +2 -2
- package/dist/session/manager.d.mts.map +1 -1
- package/dist/session/manager.mjs +18 -19
- package/dist/session/manager.mjs.map +1 -1
- package/dist/utils/helpers.d.mts.map +1 -1
- package/dist/utils/helpers.mjs.map +1 -1
- package/package.json +11 -11
- package/skills/cron/SKILL.md +12 -8
- package/skills/daily-summary/SKILL.md +5 -1
- package/skills/english/SKILL.md +72 -14
- package/skills/expense/SKILL.md +15 -11
- package/skills/fortune/SKILL.md +25 -21
- package/skills/habit/SKILL.md +7 -6
- package/skills/hydration/SKILL.md +8 -5
- package/skills/memory/SKILL.md +1 -0
- package/skills/mood/SKILL.md +13 -9
- package/skills/skill-creator/SKILL.md +22 -0
- package/skills/summarize/SKILL.md +1 -0
- package/skills/weather/SKILL.md +11 -9
- package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +0 -1
- package/dist/node_modules/@vitest/expect/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/pretty-format/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/runner/dist/chunk-tasks.mjs.map +0 -1
- package/dist/node_modules/@vitest/runner/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/snapshot/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/snapshot/node_modules/pathe/dist/shared/pathe.ff20891b.mjs.map +0 -1
- package/dist/node_modules/@vitest/spy/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/chunk-_commonjsHelpers.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/diff.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/error.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/helpers.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/index.mjs.map +0 -1
- package/dist/node_modules/@vitest/utils/dist/source-map.mjs.map +0 -1
- package/dist/node_modules/chai/index.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/arguments.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/array.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/bigint.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/class.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/date.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/error.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/function.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/helpers.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/html.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/index.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/map.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/number.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/object.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/promise.mjs +0 -6
- package/dist/node_modules/loupe/lib/promise.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/regexp.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/set.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/string.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/symbol.mjs.map +0 -1
- package/dist/node_modules/loupe/lib/typedarray.mjs.map +0 -1
- package/dist/node_modules/magic-string/dist/magic-string.es.mjs.map +0 -1
- package/dist/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.mjs.map +0 -1
- package/dist/node_modules/tinyrainbow/dist/node.mjs.map +0 -1
- package/dist/node_modules/tinyspy/dist/index.mjs.map +0 -1
- package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs.map +0 -1
- package/dist/node_modules/vitest/dist/chunks/date.W2xKR2qe.mjs.map +0 -1
- package/dist/node_modules/vitest/dist/chunks/utils.C8RiOc4B.mjs.map +0 -1
- package/dist/node_modules/vitest/dist/chunks/vi.DgezovHB.mjs.map +0 -1
- /package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/utils.mjs +0 -0
package/skills/cron/SKILL.md
CHANGED
|
@@ -15,21 +15,25 @@ Use the `cron` tool to schedule reminders or recurring tasks.
|
|
|
15
15
|
## Examples
|
|
16
16
|
|
|
17
17
|
Fixed reminder (kind="direct", the default):
|
|
18
|
+
|
|
18
19
|
```
|
|
19
20
|
cron(action="add", message="Time to take a break!", every_seconds=1200)
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
Dynamic task (kind="task", agent executes each time):
|
|
24
|
+
|
|
23
25
|
```
|
|
24
26
|
cron(action="add", message="Check HKUDS/nanobot GitHub stars and report", kind="task", every_seconds=600)
|
|
25
27
|
```
|
|
26
28
|
|
|
27
29
|
Daily at 8am (user is in Asia/Tokyo):
|
|
30
|
+
|
|
28
31
|
```
|
|
29
32
|
cron(action="add", message="おはよう!今日も頑張ろう", cron_expr="0 8 * * *", timezone="Asia/Tokyo")
|
|
30
33
|
```
|
|
31
34
|
|
|
32
35
|
List/remove:
|
|
36
|
+
|
|
33
37
|
```
|
|
34
38
|
cron(action="list")
|
|
35
39
|
cron(action="remove", job_id="abc123")
|
|
@@ -49,11 +53,11 @@ For `every_seconds`, no timezone is needed — it's just an interval.
|
|
|
49
53
|
|
|
50
54
|
## Time Expressions
|
|
51
55
|
|
|
52
|
-
| User says
|
|
53
|
-
|
|
54
|
-
| every 20 minutes
|
|
55
|
-
| every hour
|
|
56
|
-
| every day at 8am
|
|
57
|
-
| weekdays at 5pm
|
|
58
|
-
| In 10 minutes
|
|
59
|
-
| at a specific date/time | at: ISO-8601 with timezone offset
|
|
56
|
+
| User says | Parameters |
|
|
57
|
+
| ----------------------- | ----------------------------------------------------------- |
|
|
58
|
+
| every 20 minutes | every_seconds: 1200 |
|
|
59
|
+
| every hour | every_seconds: 3600 |
|
|
60
|
+
| every day at 8am | cron_expr: "0 8 \* \* \*", timezone: (from system prompt) |
|
|
61
|
+
| weekdays at 5pm | cron_expr: "0 17 \* \* 1-5", timezone: (from system prompt) |
|
|
62
|
+
| In 10 minutes | at: (current time + 10min, with tz offset) |
|
|
63
|
+
| at a specific date/time | at: ISO-8601 with timezone offset |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: daily-summary
|
|
3
|
-
description:
|
|
3
|
+
description: Automated morning briefing combining weather, schedule, and trash day. Use when user asks for 朝の要約 or wants a daily digest setup.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Daily Summary (朝の要約)
|
|
@@ -31,6 +31,7 @@ curl -s "wttr.in/Tokyo?format=j1" | jq -r '
|
|
|
31
31
|
### 2. Schedule
|
|
32
32
|
|
|
33
33
|
Check for events:
|
|
34
|
+
|
|
34
35
|
```bash
|
|
35
36
|
grep "$(date +%Y-%m-%d)" memory/HISTORY.md 2>/dev/null
|
|
36
37
|
```
|
|
@@ -38,6 +39,7 @@ grep "$(date +%Y-%m-%d)" memory/HISTORY.md 2>/dev/null
|
|
|
38
39
|
### 3. Trash Day
|
|
39
40
|
|
|
40
41
|
Day of week:
|
|
42
|
+
|
|
41
43
|
- 火・金 = 燃えるゴミ
|
|
42
44
|
- 水 = 燃えないゴミ
|
|
43
45
|
- 土 = ペットボトル (varies by ward)
|
|
@@ -47,6 +49,7 @@ Day of week:
|
|
|
47
49
|
**ALWAYS use the `flex_message` tool** to display the daily summary as a rich card.
|
|
48
50
|
|
|
49
51
|
Call the tool like this:
|
|
52
|
+
|
|
50
53
|
```
|
|
51
54
|
flex_message(template="morning_summary", data={
|
|
52
55
|
greeting: "おはよう!",
|
|
@@ -63,6 +66,7 @@ The card is sent automatically — do NOT repeat the JSON. Just respond naturall
|
|
|
63
66
|
## Personalization
|
|
64
67
|
|
|
65
68
|
Read from `memory/MEMORY.md`:
|
|
69
|
+
|
|
66
70
|
- `city:` for weather location
|
|
67
71
|
- `ward:` for trash schedule
|
|
68
72
|
- `wake_time:` for optimal push time
|
package/skills/english/SKILL.md
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: english
|
|
3
|
-
description:
|
|
3
|
+
description: English conversation practice with level-based corrections, vocab tracking, and quizzes. Use when user says 英語, English mode, 英会話, 英語クイズ, or vocab test.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# English Chat (英会話練習)
|
|
7
7
|
|
|
8
|
+
## Data
|
|
9
|
+
|
|
10
|
+
All data in `data/english/`:
|
|
11
|
+
|
|
12
|
+
- `settings.json` — level preference
|
|
13
|
+
- `vocab.json` — accumulated vocabulary list
|
|
14
|
+
- `sessions.jsonl` — session logs (one JSON object per line)
|
|
15
|
+
|
|
8
16
|
## Difficulty Level
|
|
9
17
|
|
|
10
|
-
Settings stored in `data/english.json`:
|
|
18
|
+
Settings stored in `data/english/settings.json`:
|
|
19
|
+
|
|
11
20
|
```json
|
|
12
21
|
{ "level": "beginner" }
|
|
13
22
|
```
|
|
14
23
|
|
|
15
|
-
On first activation, if `data/english.json` doesn't exist, ask the user to choose their level:
|
|
24
|
+
On first activation, if `data/english/settings.json` doesn't exist, ask the user to choose their level:
|
|
25
|
+
|
|
16
26
|
```
|
|
17
27
|
flex_message(template="action_buttons", data={
|
|
18
28
|
prompt: "英語レベルを選んでね!\nChoose your English level:",
|
|
@@ -24,22 +34,22 @@ flex_message(template="action_buttons", data={
|
|
|
24
34
|
})
|
|
25
35
|
```
|
|
26
36
|
|
|
27
|
-
Save the choice to `data/english.json`. User can change anytime with "レベル変更".
|
|
37
|
+
Save the choice to `data/english/settings.json`. User can change anytime with "レベル変更".
|
|
28
38
|
|
|
29
39
|
### Level behavior
|
|
30
40
|
|
|
31
|
-
|
|
|
32
|
-
|
|
33
|
-
| Bot's vocab
|
|
34
|
-
| Corrections
|
|
35
|
-
| Japanese help
|
|
36
|
-
| Sentence length | Short, simple
|
|
41
|
+
| | Beginner | Intermediate | Advanced |
|
|
42
|
+
| --------------- | ----------------------- | --------------------- | ----------------------- |
|
|
43
|
+
| Bot's vocab | Simple, common words | Natural, varied | Idioms, slang, nuance |
|
|
44
|
+
| Corrections | Only major grammar | Grammar + word choice | Everything incl. nuance |
|
|
45
|
+
| Japanese help | Always add 日本語 hints | On request only | Never unless asked |
|
|
46
|
+
| Sentence length | Short, simple | Natural | Complex, compound |
|
|
37
47
|
|
|
38
48
|
## Mode
|
|
39
49
|
|
|
40
50
|
When user says "英語モード" / "English mode" / "英会話":
|
|
41
51
|
|
|
42
|
-
1. Read `data/english.json` for level (default: beginner if missing)
|
|
52
|
+
1. Read `data/english/settings.json` for level (default: beginner if missing)
|
|
43
53
|
2. Reply in English, adapted to level
|
|
44
54
|
3. Gently correct mistakes (strictness based on level)
|
|
45
55
|
4. Offer Japanese translation based on level rules above
|
|
@@ -51,11 +61,12 @@ Casual and natural. Like chatting with a friend.
|
|
|
51
61
|
User: "Yesterday I go to Tokyo"
|
|
52
62
|
Bot: "Oh nice! Where did you go in Tokyo? 🗼
|
|
53
63
|
|
|
54
|
-
(Correction: 'Yesterday I
|
|
64
|
+
(Correction: 'Yesterday I _went_ to Tokyo' - past tense!)"
|
|
55
65
|
|
|
56
66
|
## Corrections
|
|
57
67
|
|
|
58
68
|
Only fix:
|
|
69
|
+
|
|
59
70
|
- Major grammar (tense, word order)
|
|
60
71
|
- Wrong word usage
|
|
61
72
|
- Natural phrasing
|
|
@@ -65,6 +76,7 @@ Adjust strictness per level. Skip minor stuff. Keep flow.
|
|
|
65
76
|
## Topic Selection
|
|
66
77
|
|
|
67
78
|
Use quick_replies directive:
|
|
79
|
+
|
|
68
80
|
```
|
|
69
81
|
What do you want to practice?
|
|
70
82
|
|
|
@@ -74,14 +86,17 @@ What do you want to practice?
|
|
|
74
86
|
## Topic Prompts
|
|
75
87
|
|
|
76
88
|
**Daily life:**
|
|
89
|
+
|
|
77
90
|
- "What did you have for breakfast?"
|
|
78
91
|
- "How do you spend weekends?"
|
|
79
92
|
|
|
80
93
|
**Travel:**
|
|
94
|
+
|
|
81
95
|
- "Where do you want to go next?"
|
|
82
96
|
- "Best place you've visited?"
|
|
83
97
|
|
|
84
98
|
**Work:**
|
|
99
|
+
|
|
85
100
|
- "What do you do?"
|
|
86
101
|
- "Remote or office?"
|
|
87
102
|
|
|
@@ -93,6 +108,7 @@ What do you want to practice?
|
|
|
93
108
|
## Code-switching
|
|
94
109
|
|
|
95
110
|
If user struggles:
|
|
111
|
+
|
|
96
112
|
```
|
|
97
113
|
How was your day? (今日どうだった?)
|
|
98
114
|
```
|
|
@@ -106,12 +122,30 @@ When user says "日本語に戻して" / "exit English" / "おわり":
|
|
|
106
122
|
- Corrections you made (original → fixed)
|
|
107
123
|
- New vocabulary or phrases you introduced
|
|
108
124
|
- An encouraging comment about their performance
|
|
109
|
-
|
|
125
|
+
|
|
126
|
+
2. **Save session log** — append one JSON line to `data/english/sessions.jsonl`:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
echo '{"date":"2025-02-13","topics":["daily life","food"],"corrections":[{"wrong":"I go","right":"I went","rule":"past tense"}],"vocab":["commute","grab a bite"],"duration_msgs":12}' >> data/english/sessions.jsonl
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
3. **Update vocab list** — read `data/english/vocab.json`, merge new words, write back:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
[
|
|
136
|
+
{ "word": "commute", "meaning": "通勤する", "date": "2025-02-13" },
|
|
137
|
+
{ "word": "grab a bite", "meaning": "軽く食べる", "date": "2025-02-13" }
|
|
138
|
+
]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
If the file doesn't exist, create it with the new entries. Skip duplicates (same `word`).
|
|
142
|
+
|
|
143
|
+
4. **Send session summary card**:
|
|
110
144
|
|
|
111
145
|
```
|
|
112
146
|
flex_message(template="custom", data={
|
|
113
147
|
title: "📝 English Session",
|
|
114
|
-
body: "Topics:
|
|
148
|
+
body: "Topics: daily life, food\n\nCorrections:\n❌ I go → ✅ I went\n❌ more easy → ✅ easier\n\nNew vocab:\n• commute (通勤する)\n• grab a bite (軽く食べる)\n\n💪 Great job! Your past tense is improving!",
|
|
115
149
|
header_color: "#4CAF50"
|
|
116
150
|
})
|
|
117
151
|
```
|
|
@@ -120,6 +154,30 @@ Keep it honest — if there were no corrections, say so. If there were many, pic
|
|
|
120
154
|
|
|
121
155
|
After the card, respond: "英語練習お疲れ様!👍"
|
|
122
156
|
|
|
157
|
+
## Vocab Review
|
|
158
|
+
|
|
159
|
+
When user says "英語クイズ" / "vocab test" / "復習":
|
|
160
|
+
|
|
161
|
+
1. Read `data/english/vocab.json`
|
|
162
|
+
2. Pick 5 random words from past sessions
|
|
163
|
+
3. Quiz the user — show the English word, ask for meaning or usage in a sentence
|
|
164
|
+
4. Use `action_buttons` for multiple choice if beginner level
|
|
165
|
+
|
|
166
|
+
Example:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
flex_message(template="action_buttons", data={
|
|
170
|
+
prompt: "What does 'commute' mean?",
|
|
171
|
+
buttons: [
|
|
172
|
+
{ label: "通勤する", text: "答え 通勤する", style: "primary" },
|
|
173
|
+
{ label: "通信する", text: "答え 通信する", style: "secondary" },
|
|
174
|
+
{ label: "通過する", text: "答え 通過する", style: "secondary" }
|
|
175
|
+
]
|
|
176
|
+
})
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
For intermediate/advanced: just ask in text, no multiple choice.
|
|
180
|
+
|
|
123
181
|
## Tips
|
|
124
182
|
|
|
125
183
|
- Match user's level
|
package/skills/expense/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: expense
|
|
3
|
-
description:
|
|
3
|
+
description: Expense tracker with auto-categorization and monthly receipt summaries. Use when user mentions spending like 出費, 500円, or asks for expense reports.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Expense Tracker (出費記録)
|
|
@@ -10,21 +10,22 @@ description: Track daily expenses and show monthly summaries.
|
|
|
10
10
|
User says: "コンビニで500円" / "出費 +380 カフェ" / "ランチ 1200"
|
|
11
11
|
|
|
12
12
|
Log to CSV:
|
|
13
|
+
|
|
13
14
|
```bash
|
|
14
|
-
echo "$(date +%Y-%m-%d),$(date +%H:%M),500,コンビニ,コンビニ" >> data/
|
|
15
|
+
echo "$(date +%Y-%m-%d),$(date +%H:%M),500,コンビニ,コンビニ" >> data/expense/log.csv
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
Format: `date,time,amount,note,category`
|
|
18
19
|
|
|
19
20
|
## Auto-categorize
|
|
20
21
|
|
|
21
|
-
| Keywords
|
|
22
|
-
|
|
23
|
-
| コンビニ, セブン, ローソン, ファミマ | コンビニ
|
|
24
|
-
| カフェ, スタバ, ドトール
|
|
25
|
-
| ランチ, 食事, 丼, ラーメン
|
|
26
|
-
| 電車, 地下鉄, バス
|
|
27
|
-
| amazon, ヨドバシ
|
|
22
|
+
| Keywords | Category |
|
|
23
|
+
| ------------------------------------ | ------------ |
|
|
24
|
+
| コンビニ, セブン, ローソン, ファミマ | コンビニ |
|
|
25
|
+
| カフェ, スタバ, ドトール | カフェ |
|
|
26
|
+
| ランチ, 食事, 丼, ラーメン | 食事 |
|
|
27
|
+
| 電車, 地下鉄, バス | 交通 |
|
|
28
|
+
| amazon, ヨドバシ | ショッピング |
|
|
28
29
|
|
|
29
30
|
Default: 雑費
|
|
30
31
|
|
|
@@ -35,18 +36,21 @@ After recording, confirm with a short text: "✅ 記録: カフェ ¥380"
|
|
|
35
36
|
## Summary
|
|
36
37
|
|
|
37
38
|
Monthly totals:
|
|
39
|
+
|
|
38
40
|
```bash
|
|
39
|
-
awk -F, '$1 ~ /^2025-02/ {sum+=$3} END {print sum}' data/
|
|
41
|
+
awk -F, '$1 ~ /^2025-02/ {sum+=$3} END {print sum}' data/expense/log.csv
|
|
40
42
|
```
|
|
41
43
|
|
|
42
44
|
By category:
|
|
45
|
+
|
|
43
46
|
```bash
|
|
44
|
-
awk -F, '$1 ~ /^2025-02/ {cat[$5]+=$3} END {for(c in cat) print c, cat[c]}' data/
|
|
47
|
+
awk -F, '$1 ~ /^2025-02/ {cat[$5]+=$3} END {for(c in cat) print c, cat[c]}' data/expense/log.csv
|
|
45
48
|
```
|
|
46
49
|
|
|
47
50
|
**ALWAYS use `flex_message`** for summaries. The card is auto-sent.
|
|
48
51
|
|
|
49
52
|
Monthly summary as receipt card:
|
|
53
|
+
|
|
50
54
|
```
|
|
51
55
|
flex_message(template="receipt", data={
|
|
52
56
|
title: "2月の出費",
|
package/skills/fortune/SKILL.md
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: fortune
|
|
3
|
-
description: Daily horoscope readings.
|
|
3
|
+
description: Daily horoscope and zodiac readings. Use when user says 占い, 運勢, 星座, or asks about their fortune/horoscope.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Fortune (占い)
|
|
7
7
|
|
|
8
8
|
## 12 Signs
|
|
9
9
|
|
|
10
|
-
| Sign
|
|
11
|
-
|
|
12
|
-
| 牡羊座 | 3/21-4/19
|
|
13
|
-
| 牡牛座 | 4/20-5/20
|
|
14
|
-
| 双子座 | 5/21-6/21
|
|
15
|
-
| 蟹座
|
|
16
|
-
| 獅子座 | 7/23-8/22
|
|
17
|
-
| 乙女座 | 8/23-9/22
|
|
18
|
-
| 天秤座 | 9/23-10/23
|
|
19
|
-
| 蠍座
|
|
20
|
-
| 射手座 | 11/23-12/21 | ♐
|
|
21
|
-
| 山羊座 | 12/22-1/19
|
|
22
|
-
| 水瓶座 | 1/20-2/18
|
|
23
|
-
| 魚座
|
|
10
|
+
| Sign | Dates | Emoji |
|
|
11
|
+
| ------ | ----------- | ----- |
|
|
12
|
+
| 牡羊座 | 3/21-4/19 | ♈ |
|
|
13
|
+
| 牡牛座 | 4/20-5/20 | ♉ |
|
|
14
|
+
| 双子座 | 5/21-6/21 | ♊ |
|
|
15
|
+
| 蟹座 | 6/22-7/22 | ♋ |
|
|
16
|
+
| 獅子座 | 7/23-8/22 | ♌ |
|
|
17
|
+
| 乙女座 | 8/23-9/22 | ♍ |
|
|
18
|
+
| 天秤座 | 9/23-10/23 | ♎ |
|
|
19
|
+
| 蠍座 | 10/24-11/22 | ♏ |
|
|
20
|
+
| 射手座 | 11/23-12/21 | ♐ |
|
|
21
|
+
| 山羊座 | 12/22-1/19 | ♑ |
|
|
22
|
+
| 水瓶座 | 1/20-2/18 | ♒ |
|
|
23
|
+
| 魚座 | 2/19-3/20 | ♓ |
|
|
24
24
|
|
|
25
25
|
## Generate Fortune
|
|
26
26
|
|
|
27
27
|
Random daily seed:
|
|
28
|
+
|
|
28
29
|
```bash
|
|
29
30
|
seed=$(date +%Y%m%d)$sign_index
|
|
30
31
|
fortune_level=$((seed % 5 + 1)) # 1-5 stars
|
|
@@ -32,19 +33,20 @@ fortune_level=$((seed % 5 + 1)) # 1-5 stars
|
|
|
32
33
|
|
|
33
34
|
Fortune messages:
|
|
34
35
|
|
|
35
|
-
| Stars | Message
|
|
36
|
-
|
|
37
|
-
| ★★★★★ | 最高の日!自信を持って
|
|
36
|
+
| Stars | Message |
|
|
37
|
+
| ----- | ---------------------------- |
|
|
38
|
+
| ★★★★★ | 最高の日!自信を持って |
|
|
38
39
|
| ★★★★☆ | いい流れ。チャンスを掴んで! |
|
|
39
|
-
| ★★★☆☆ | 普通。マイペースで
|
|
40
|
-
| ★★☆☆☆ | 注意深く。深呼吸して
|
|
41
|
-
| ★☆☆☆☆ | 慎重に。無理は禁物
|
|
40
|
+
| ★★★☆☆ | 普通。マイペースで |
|
|
41
|
+
| ★★☆☆☆ | 注意深く。深呼吸して |
|
|
42
|
+
| ★☆☆☆☆ | 慎重に。無理は禁物 |
|
|
42
43
|
|
|
43
44
|
## Output
|
|
44
45
|
|
|
45
46
|
**ALWAYS use the `flex_message` tool** to display fortune results as a rich card.
|
|
46
47
|
|
|
47
48
|
Call the tool like this:
|
|
49
|
+
|
|
48
50
|
```
|
|
49
51
|
flex_message(template="fortune", data={
|
|
50
52
|
sign: "♍ 乙女座",
|
|
@@ -65,6 +67,7 @@ The card is sent automatically — do NOT repeat the JSON. Just respond naturall
|
|
|
65
67
|
## Personalization
|
|
66
68
|
|
|
67
69
|
Store in `memory/MEMORY.md`:
|
|
70
|
+
|
|
68
71
|
```
|
|
69
72
|
- 星座: 牡羊座
|
|
70
73
|
- 誕生日: 4月15日
|
|
@@ -79,6 +82,7 @@ cron(action="add", message="今日の運勢見る?", cron_expr="0 8 * * *", ti
|
|
|
79
82
|
## Personality
|
|
80
83
|
|
|
81
84
|
Match bot tone:
|
|
85
|
+
|
|
82
86
|
- フレンドリー: message="今日はラッキーかも!"
|
|
83
87
|
- 執事: message="本日の運勢でございます"
|
|
84
88
|
- ツンデレ: message="べ、別に...星4つ"
|
package/skills/habit/SKILL.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: habit
|
|
3
|
-
description:
|
|
3
|
+
description: Habit tracker with streak counting and weekly summaries. Use when user says 習慣, mentions completing a habit, or wants to add/check habits.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Habit Tracker (習慣トラッカー)
|
|
7
7
|
|
|
8
8
|
## Setup
|
|
9
9
|
|
|
10
|
-
Store habits in `data/
|
|
10
|
+
Store habits in `data/habit/config.json`:
|
|
11
|
+
|
|
11
12
|
```json
|
|
12
13
|
{
|
|
13
14
|
"habits": [
|
|
@@ -45,19 +46,19 @@ The card is auto-sent — do NOT repeat the JSON.
|
|
|
45
46
|
|
|
46
47
|
- Green header (#4CAF50) = already done today
|
|
47
48
|
- Orange header (#FF9800) = not done yet
|
|
48
|
-
- Read `data/habit
|
|
49
|
+
- Read `data/habit/log.csv` to check today's status before building the carousel
|
|
49
50
|
|
|
50
51
|
## Logging
|
|
51
52
|
|
|
52
53
|
```bash
|
|
53
|
-
echo "$(date +%Y-%m-%d)|meditate|1" >> data/habit
|
|
54
|
+
echo "$(date +%Y-%m-%d)|meditate|1" >> data/habit/log.csv
|
|
54
55
|
```
|
|
55
56
|
|
|
56
57
|
## Streaks
|
|
57
58
|
|
|
58
59
|
```bash
|
|
59
60
|
# Count consecutive days
|
|
60
|
-
awk -F"|" '$2=="meditate" && $3=="1" {print $1}' data/habit
|
|
61
|
+
awk -F"|" '$2=="meditate" && $3=="1" {print $1}' data/habit/log.csv | uniq | tail -7 | wc -l
|
|
61
62
|
```
|
|
62
63
|
|
|
63
64
|
## Summary
|
|
@@ -82,4 +83,4 @@ flex_message(template="custom", data={
|
|
|
82
83
|
## Motivation
|
|
83
84
|
|
|
84
85
|
- Streak celebration: "🔥 7日連続すごい!"
|
|
85
|
-
- Gentle nudge: "今日まだ瞑想してないよ〜"
|
|
86
|
+
- Gentle nudge: "今日まだ瞑想してないよ〜"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hydration
|
|
3
|
-
description:
|
|
3
|
+
description: Water intake tracker with reminders and progress display. Use when user says 水飲んだ, 一杯, or asks about hydration.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hydration Tracker (水分摂取)
|
|
@@ -10,14 +10,15 @@ description: Track daily water intake with reminders.
|
|
|
10
10
|
User says: "水飲んだ" / "一杯飲んだ" / "+1"
|
|
11
11
|
|
|
12
12
|
Log:
|
|
13
|
+
|
|
13
14
|
```bash
|
|
14
|
-
echo "$(date -Iseconds)|1" >> data/hydration.
|
|
15
|
+
echo "$(date -Iseconds)|1" >> data/hydration/log.csv
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
## Check Progress
|
|
18
19
|
|
|
19
20
|
```bash
|
|
20
|
-
grep "$(date +%Y-%m-%d)" data/hydration.
|
|
21
|
+
grep "$(date +%Y-%m-%d)" data/hydration/log.csv | wc -l
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
## Output
|
|
@@ -25,6 +26,7 @@ grep "$(date +%Y-%m-%d)" data/hydration.log | wc -l
|
|
|
25
26
|
**ALWAYS use the `flex_message` tool** to display hydration status.
|
|
26
27
|
|
|
27
28
|
Call the tool like this:
|
|
29
|
+
|
|
28
30
|
```
|
|
29
31
|
flex_message(template="hydration", data={
|
|
30
32
|
title: "水飲んだ?",
|
|
@@ -47,11 +49,12 @@ cron(action="add", message="水飲んだ?リマインド送って", every_seco
|
|
|
47
49
|
## Reset
|
|
48
50
|
|
|
49
51
|
Archive at midnight:
|
|
52
|
+
|
|
50
53
|
```bash
|
|
51
|
-
[ -f data/hydration.
|
|
54
|
+
[ -f data/hydration/log.csv ] && mv data/hydration/log.csv data/hydration/log-$(date +%Y-%m-%d).csv
|
|
52
55
|
```
|
|
53
56
|
|
|
54
57
|
## Notes
|
|
55
58
|
|
|
56
59
|
- ALWAYS use the `flex_message` tool — the card is auto-sent
|
|
57
|
-
- Update `current` count by reading from `data/hydration.
|
|
60
|
+
- Update `current` count by reading from `data/hydration/log.csv` before calling the tool
|
package/skills/memory/SKILL.md
CHANGED
|
@@ -22,6 +22,7 @@ Use the `exec` tool to run grep. Combine patterns: `grep -iE "meeting|deadline"
|
|
|
22
22
|
## When to Update MEMORY.md
|
|
23
23
|
|
|
24
24
|
Write important facts immediately using `edit_file` or `write_file`:
|
|
25
|
+
|
|
25
26
|
- User preferences ("I prefer dark mode")
|
|
26
27
|
- Project context ("The API uses OAuth2")
|
|
27
28
|
- Relationships ("Alice is the project lead")
|
package/skills/mood/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mood
|
|
3
|
-
description:
|
|
3
|
+
description: Mood journal with emoji tracking and weekly reports. Use when user shares feelings like 気分, だるい, 疲れた, いい感じ, or asks for mood summary.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Mood Journal (気分日記)
|
|
@@ -11,16 +11,17 @@ User says: "今日はいい感じ" / "気分いい" / "だるい" / "疲れた"
|
|
|
11
11
|
|
|
12
12
|
Map to emoji + score:
|
|
13
13
|
|
|
14
|
-
| Input patterns
|
|
15
|
-
|
|
16
|
-
| いい, 最高, 😊, 🥰, 嬉しい | 😊
|
|
17
|
-
| まあまあ, 普通, 😐
|
|
18
|
-
| だるい, 疲れた, 😔, 悲しい | 😔
|
|
19
|
-
| 最悪, 😢, 辛い
|
|
14
|
+
| Input patterns | Emoji | Score |
|
|
15
|
+
| -------------------------- | ----- | ----- |
|
|
16
|
+
| いい, 最高, 😊, 🥰, 嬉しい | 😊 | 5 |
|
|
17
|
+
| まあまあ, 普通, 😐 | 😐 | 3 |
|
|
18
|
+
| だるい, 疲れた, 😔, 悲しい | 😔 | 2 |
|
|
19
|
+
| 最悪, 😢, 辛い | 😢 | 1 |
|
|
20
20
|
|
|
21
21
|
Log to CSV:
|
|
22
|
+
|
|
22
23
|
```bash
|
|
23
|
-
echo "$(date +%Y-%m-%d),$(date +%H:%M),😊,5,今日はいい感じ" >> data/mood.csv
|
|
24
|
+
echo "$(date +%Y-%m-%d),$(date +%H:%M),😊,5,今日はいい感じ" >> data/mood/log.csv
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
Format: `date,time,emoji,score,note`
|
|
@@ -28,6 +29,7 @@ Format: `date,time,emoji,score,note`
|
|
|
28
29
|
## Daily Check-in
|
|
29
30
|
|
|
30
31
|
Use `action_buttons` flex for tap response:
|
|
32
|
+
|
|
31
33
|
```
|
|
32
34
|
flex_message(template="action_buttons", data={
|
|
33
35
|
prompt: "今日の気分は?",
|
|
@@ -41,6 +43,7 @@ flex_message(template="action_buttons", data={
|
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
The card is auto-sent. Set up cron for nightly check-in:
|
|
46
|
+
|
|
44
47
|
```
|
|
45
48
|
cron(action="add", message="気分チェックインのカードを送って", cron_expr="0 21 * * *", timezone="Asia/Tokyo", kind="task")
|
|
46
49
|
```
|
|
@@ -48,8 +51,9 @@ cron(action="add", message="気分チェックインのカードを送って", c
|
|
|
48
51
|
## Summary
|
|
49
52
|
|
|
50
53
|
Calculate average:
|
|
54
|
+
|
|
51
55
|
```bash
|
|
52
|
-
awk -F, 'NR>7 {sum+=$4; count++} END {print "avg:", sum/count}' data/mood.csv
|
|
56
|
+
awk -F, 'NR>7 {sum+=$4; count++} END {print "avg:", sum/count}' data/mood/log.csv
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
**ALWAYS use `flex_message`** for weekly summaries. The card is auto-sent.
|
|
@@ -36,6 +36,7 @@ skill-name/
|
|
|
36
36
|
scripts/ (optional) - Executable code
|
|
37
37
|
references/ (optional) - Documentation for context
|
|
38
38
|
assets/ (optional) - Files used in output
|
|
39
|
+
data/ (optional) - User data, settings, logs
|
|
39
40
|
```
|
|
40
41
|
|
|
41
42
|
#### SKILL.md
|
|
@@ -72,6 +73,24 @@ Skills use three-level loading:
|
|
|
72
73
|
- `description`: What the skill does AND when to use it. Include trigger contexts.
|
|
73
74
|
All "when to use" info goes here since the body only loads after triggering.
|
|
74
75
|
|
|
76
|
+
### Data Storage
|
|
77
|
+
|
|
78
|
+
**Custom skills** live in the workspace `skills/` directory. Store user data in `data/` within the skill, using the **full path from workspace root** in SKILL.md:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
skills/my-skill/
|
|
82
|
+
SKILL.md
|
|
83
|
+
data/
|
|
84
|
+
log.csv
|
|
85
|
+
settings.json
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
echo "..." >> skills/my-skill/data/log.csv
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
NOT `data/log.csv` — that would write to the workspace root.
|
|
93
|
+
|
|
75
94
|
### Flex Message Integration
|
|
76
95
|
|
|
77
96
|
If the skill produces output that would benefit from rich visual display (cards, progress trackers, summaries, confirmations), include `flex_message` tool usage in the SKILL.md.
|
|
@@ -81,6 +100,7 @@ Available templates: `fortune`, `info_card`, `action_buttons`, `receipt`, `morni
|
|
|
81
100
|
#### Custom template
|
|
82
101
|
|
|
83
102
|
Single card with auto-built layout:
|
|
103
|
+
|
|
84
104
|
```
|
|
85
105
|
flex_message(template="custom", data={
|
|
86
106
|
title: "カードタイトル",
|
|
@@ -96,6 +116,7 @@ flex_message(template="custom", data={
|
|
|
96
116
|
```
|
|
97
117
|
|
|
98
118
|
Carousel (horizontally swipeable cards):
|
|
119
|
+
|
|
99
120
|
```
|
|
100
121
|
flex_message(template="custom", data={
|
|
101
122
|
bubbles: [
|
|
@@ -108,6 +129,7 @@ flex_message(template="custom", data={
|
|
|
108
129
|
#### Output section for skills using flex
|
|
109
130
|
|
|
110
131
|
The card is **auto-sent** when the tool returns. Include this in SKILL.md:
|
|
132
|
+
|
|
111
133
|
```markdown
|
|
112
134
|
## Output
|
|
113
135
|
|
|
@@ -10,6 +10,7 @@ Fast CLI to summarize URLs, local files, and YouTube links.
|
|
|
10
10
|
## When to use
|
|
11
11
|
|
|
12
12
|
Use this skill when the user:
|
|
13
|
+
|
|
13
14
|
- Sends a URL and asks "what's this about?"
|
|
14
15
|
- Asks to summarize an article, blog post, or web page
|
|
15
16
|
- Asks to transcribe or summarize a YouTube video
|