@aitne-sh/aitne 0.1.8 → 0.1.10

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 (308) hide show
  1. package/README.md +251 -164
  2. package/agent-assets/agent-profiles/_safety.md +3 -3
  3. package/agent-assets/agent-profiles/browser-task.md +108 -0
  4. package/agent-assets/agent-profiles/conversational.md +3 -3
  5. package/agent-assets/agent-profiles/profile-importer.md +2 -2
  6. package/agent-assets/agent-profiles/routine-fetch-window.md +30 -19
  7. package/agent-assets/agents/context-index-reconcile/agent.md +52 -0
  8. package/agent-assets/agents/evening-review/agent.md +53 -0
  9. package/agent-assets/agents/hourly-check/agent.md +62 -0
  10. package/agent-assets/agents/monthly-review/agent.md +55 -0
  11. package/agent-assets/agents/morning-routine/agent.md +78 -0
  12. package/agent-assets/agents/roadmap-maintenance/agent.md +52 -0
  13. package/agent-assets/agents/skill-curation/agent.md +52 -0
  14. package/agent-assets/agents/user-profile-sweep-evening/agent.md +48 -0
  15. package/agent-assets/agents/user-profile-sweep-morning/agent.md +53 -0
  16. package/agent-assets/agents/weekly-review/agent.md +51 -0
  17. package/agent-assets/docs/concepts/agent-day.md +13 -11
  18. package/agent-assets/docs/concepts/auth-health.md +47 -10
  19. package/agent-assets/docs/concepts/backends-and-tiers.md +66 -31
  20. package/agent-assets/docs/concepts/costs-and-quotas.md +51 -15
  21. package/agent-assets/docs/concepts/delegated-mode.md +56 -17
  22. package/agent-assets/docs/concepts/memory-model.md +77 -34
  23. package/agent-assets/docs/concepts/observations.md +49 -11
  24. package/agent-assets/docs/concepts/process-keys.md +56 -22
  25. package/agent-assets/docs/concepts/routines.md +60 -33
  26. package/agent-assets/docs/concepts/safety-and-execution.md +50 -21
  27. package/agent-assets/docs/concepts/safety-model.md +61 -50
  28. package/agent-assets/docs/concepts/skills.md +34 -18
  29. package/agent-assets/docs/features/integrations/browser-history.md +196 -0
  30. package/agent-assets/docs/features/integrations/calendar.md +39 -29
  31. package/agent-assets/docs/features/integrations/git.md +18 -7
  32. package/agent-assets/docs/features/integrations/github.md +84 -33
  33. package/agent-assets/docs/features/integrations/mail.md +61 -17
  34. package/agent-assets/docs/features/integrations/notion.md +18 -6
  35. package/agent-assets/docs/features/integrations/obsidian.md +28 -5
  36. package/agent-assets/docs/features/lifestyle/git.md +44 -40
  37. package/agent-assets/docs/features/lifestyle/reading.md +57 -22
  38. package/agent-assets/docs/features/lifestyle/receipts.md +51 -21
  39. package/agent-assets/docs/features/lifestyle/travel-bookings.md +77 -14
  40. package/agent-assets/docs/features/memory-files/agent-journal.md +132 -53
  41. package/agent-assets/docs/features/memory-files/agent-lessons.md +177 -0
  42. package/agent-assets/docs/features/memory-files/projects.md +73 -17
  43. package/agent-assets/docs/features/memory-files/roadmap.md +54 -11
  44. package/agent-assets/docs/features/memory-files/schedule.md +113 -70
  45. package/agent-assets/docs/features/memory-files/today.md +46 -21
  46. package/agent-assets/docs/features/memory-files/user-profile.md +63 -33
  47. package/agent-assets/docs/features/messaging/bang-commands.md +113 -36
  48. package/agent-assets/docs/features/messaging/dashboard-chat.md +43 -21
  49. package/agent-assets/docs/features/messaging/discord.md +35 -4
  50. package/agent-assets/docs/features/messaging/overview.md +37 -19
  51. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +94 -27
  52. package/agent-assets/docs/features/messaging/slack.md +67 -14
  53. package/agent-assets/docs/features/messaging/telegram.md +22 -8
  54. package/agent-assets/docs/features/messaging/whatsapp.md +71 -17
  55. package/agent-assets/docs/features/operations/activity-and-conversations.md +45 -15
  56. package/agent-assets/docs/features/operations/approvals.md +49 -16
  57. package/agent-assets/docs/features/operations/backend-routing.md +68 -16
  58. package/agent-assets/docs/features/operations/cost-tracking.md +84 -17
  59. package/agent-assets/docs/features/operations/managed-chromium.md +222 -0
  60. package/agent-assets/docs/features/operations/notifications.md +52 -11
  61. package/agent-assets/docs/features/operations/quiet-hours.md +64 -40
  62. package/agent-assets/docs/features/operations/schedule-approaching.md +54 -24
  63. package/agent-assets/docs/features/routines/custom-routines.md +98 -26
  64. package/agent-assets/docs/features/routines/evening-review.md +82 -21
  65. package/agent-assets/docs/features/routines/hourly-check.md +149 -29
  66. package/agent-assets/docs/features/routines/morning-routine.md +54 -35
  67. package/agent-assets/docs/features/routines/weekly-review.md +46 -21
  68. package/agent-assets/docs/features/wiki/commands.md +26 -16
  69. package/agent-assets/docs/features/wiki/cost-and-approval.md +241 -0
  70. package/agent-assets/docs/features/wiki/dashboard.md +256 -0
  71. package/agent-assets/docs/features/wiki/overview.md +70 -12
  72. package/agent-assets/docs/features/wiki/search.md +248 -0
  73. package/agent-assets/docs/features/wiki/workspaces.md +254 -0
  74. package/agent-assets/docs/getting-started/01-what-is-this.md +34 -23
  75. package/agent-assets/docs/getting-started/02-first-steps.md +17 -10
  76. package/agent-assets/docs/getting-started/03-what-can-this-do.md +25 -14
  77. package/agent-assets/docs/getting-started/04-first-day.md +39 -21
  78. package/agent-assets/docs/glossary.md +235 -24
  79. package/agent-assets/docs/guides/add-a-custom-routine.md +63 -23
  80. package/agent-assets/docs/guides/backup-and-restore.md +80 -16
  81. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +57 -26
  82. package/agent-assets/docs/guides/build-your-wiki.md +22 -9
  83. package/agent-assets/docs/guides/change-which-model-handles-x.md +64 -10
  84. package/agent-assets/docs/guides/connect-a-new-mail-account.md +66 -15
  85. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +32 -14
  86. package/agent-assets/docs/guides/import-knowledge-file.md +50 -40
  87. package/agent-assets/docs/guides/install-and-run.md +49 -20
  88. package/agent-assets/docs/guides/maintain-wiki-health.md +35 -10
  89. package/agent-assets/docs/guides/migrate-machines.md +74 -18
  90. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +111 -60
  91. package/agent-assets/docs/guides/pause-the-agent.md +69 -24
  92. package/agent-assets/docs/guides/reinstall-cleanly.md +88 -18
  93. package/agent-assets/docs/guides/setup-wizard.md +116 -54
  94. package/agent-assets/docs/guides/switch-default-backend.md +62 -16
  95. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +30 -14
  96. package/agent-assets/docs/reference/api.md +153 -32
  97. package/agent-assets/docs/reference/cli-commands.md +39 -18
  98. package/agent-assets/docs/reference/config.md +241 -49
  99. package/agent-assets/docs/reference/disallowed-tools.md +34 -13
  100. package/agent-assets/docs/reference/keyboard-shortcuts.md +34 -10
  101. package/agent-assets/docs/reference/knowledge-layout.md +629 -0
  102. package/agent-assets/docs/reference/process-keys.md +62 -6
  103. package/agent-assets/docs/reference/skills.md +41 -14
  104. package/agent-assets/docs/troubleshooting/auth-failed.md +51 -21
  105. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +97 -28
  106. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +86 -22
  107. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +68 -24
  108. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +80 -20
  109. package/agent-assets/docs/troubleshooting/observation-not-detected.md +73 -21
  110. package/agent-assets/docs/troubleshooting/quota-exhausted.md +33 -8
  111. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +126 -54
  112. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +29 -12
  113. package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
  114. package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +1 -1
  115. package/agent-assets/optimizer-skills/skill-curation/SKILL.md +1 -1
  116. package/agent-assets/sandbox/linux/aitne-chromium.apparmor +91 -0
  117. package/agent-assets/sandbox/macos/aitne-chromium.sb +156 -0
  118. package/agent-assets/skills/agent-actions/SKILL.md +25 -41
  119. package/agent-assets/skills/agent-create/SKILL.md +158 -0
  120. package/agent-assets/skills/attach/SKILL.md +10 -29
  121. package/agent-assets/skills/browser-history/SKILL.md +211 -0
  122. package/agent-assets/skills/browser-history-respond/SKILL.md +111 -0
  123. package/agent-assets/skills/browser-task/SKILL.md +164 -0
  124. package/agent-assets/skills/context/SKILL.md +35 -44
  125. package/agent-assets/skills/context/curation.json +14 -14
  126. package/agent-assets/skills/context/references/api.md +52 -40
  127. package/agent-assets/skills/context/references/required-frontmatter.md +13 -12
  128. package/agent-assets/skills/context/references/snapshot-files.md +18 -17
  129. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +8 -8
  130. package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
  131. package/agent-assets/skills/docs-search/SKILL.md +23 -34
  132. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +17 -114
  133. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +17 -113
  134. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +17 -113
  135. package/agent-assets/skills/external-services/SKILL.md +3 -3
  136. package/agent-assets/skills/external-services/SKILL.native.claude.md +7 -7
  137. package/agent-assets/skills/external-services/SKILL.native.codex.md +7 -7
  138. package/agent-assets/skills/external-services/SKILL.native.gemini.md +4 -4
  139. package/agent-assets/skills/external-services/references/calendar-apple.md +2 -2
  140. package/agent-assets/skills/external-services/references/calendar-outlook.md +1 -1
  141. package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
  142. package/agent-assets/skills/external-services/references/obsidian.md +2 -2
  143. package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
  144. package/agent-assets/skills/gmail-lifestyle/SKILL.md +11 -83
  145. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
  146. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
  147. package/agent-assets/skills/mail/SKILL.delegated.claude.md +15 -18
  148. package/agent-assets/skills/mail/SKILL.delegated.codex.md +11 -6
  149. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +11 -6
  150. package/agent-assets/skills/mail/SKILL.md +10 -18
  151. package/agent-assets/skills/mail/SKILL.native.claude.md +8 -7
  152. package/agent-assets/skills/mail/SKILL.native.codex.md +1 -1
  153. package/agent-assets/skills/mail/SKILL.native.gemini.md +1 -1
  154. package/agent-assets/skills/mail/references/api.md +10 -3
  155. package/agent-assets/skills/mail/references/examples.md +2 -1
  156. package/agent-assets/skills/mail/references/providers.md +1 -1
  157. package/agent-assets/skills/managed-tasks/SKILL.md +48 -81
  158. package/agent-assets/skills/managed-tasks/references/errors.md +33 -19
  159. package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
  160. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +7 -5
  161. package/agent-assets/skills/management-policy/SKILL.md +42 -42
  162. package/agent-assets/skills/management-policy/curation.json +1 -1
  163. package/agent-assets/skills/management-policy/references/policy-workflow.md +11 -12
  164. package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +1 -1
  165. package/agent-assets/skills/notify/SKILL.md +14 -16
  166. package/agent-assets/skills/notify/references/priority.md +28 -20
  167. package/agent-assets/skills/notion/SKILL.delegated.claude.md +2 -2
  168. package/agent-assets/skills/notion/SKILL.delegated.codex.md +2 -2
  169. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +2 -2
  170. package/agent-assets/skills/notion/SKILL.md +17 -17
  171. package/agent-assets/skills/notion/SKILL.native.claude.md +11 -7
  172. package/agent-assets/skills/notion/SKILL.native.codex.md +10 -5
  173. package/agent-assets/skills/notion/SKILL.native.gemini.md +10 -5
  174. package/agent-assets/skills/observations/SKILL.md +29 -28
  175. package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
  176. package/agent-assets/skills/project-doc/SKILL.md +10 -7
  177. package/agent-assets/skills/project-doc/curation.json +3 -3
  178. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +8 -5
  179. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +5 -5
  180. package/agent-assets/skills/reading/SKILL.md +18 -42
  181. package/agent-assets/skills/reading/references/reading-taste.md +7 -7
  182. package/agent-assets/skills/roadmap/SKILL.md +8 -24
  183. package/agent-assets/skills/roadmap/curation.json +1 -1
  184. package/agent-assets/skills/roadmap/references/api.md +21 -11
  185. package/agent-assets/skills/roadmap/references/cross-check.md +15 -8
  186. package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
  187. package/agent-assets/skills/roadmap/references/migration.md +12 -10
  188. package/agent-assets/skills/roadmap/references/retention.md +18 -0
  189. package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +1 -1
  190. package/agent-assets/skills/schedule/SKILL.md +41 -50
  191. package/agent-assets/skills/schedule/references/batch.md +2 -2
  192. package/agent-assets/skills/schedule/references/errors.md +7 -4
  193. package/agent-assets/skills/schedule/references/importance.md +23 -0
  194. package/agent-assets/skills/schedule/references/model-selection.md +3 -3
  195. package/agent-assets/skills/schedule/references/recurrence-rule.md +7 -5
  196. package/agent-assets/skills/scheduled-managed-task/SKILL.md +77 -70
  197. package/agent-assets/skills/today/SKILL.md +24 -83
  198. package/agent-assets/skills/today/curation.json +3 -3
  199. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +6 -5
  200. package/agent-assets/skills/today/references/today-skeleton.md +66 -0
  201. package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
  202. package/agent-assets/skills/today/seeds/section-shape.seed.json +7 -7
  203. package/agent-assets/skills/user-interview/SKILL.md +21 -93
  204. package/agent-assets/skills/user-interview/references/op-briefing.md +3 -3
  205. package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
  206. package/agent-assets/skills/user-interview/references/op-morning.md +1 -1
  207. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +9 -1
  208. package/agent-assets/skills/user-profile/SKILL.md +29 -39
  209. package/agent-assets/skills/user-profile/curation.json +4 -4
  210. package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
  211. package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +8 -8
  212. package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +6 -6
  213. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
  214. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +9 -8
  215. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
  216. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
  217. package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
  218. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
  219. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
  220. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
  221. package/agent-assets/system-prompts/routine-fetch-window.md +22 -12
  222. package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +4 -2
  223. package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +4 -2
  224. package/agent-assets/task-flows/_partials/capture-user-info.md +2 -2
  225. package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +1 -1
  226. package/agent-assets/task-flows/_partials/dm-intent.project.md +9 -9
  227. package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
  228. package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +3 -2
  229. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +10 -5
  230. package/agent-assets/task-flows/browser_task.md +84 -0
  231. package/agent-assets/task-flows/github.assigned.md +1 -1
  232. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  233. package/agent-assets/task-flows/github.workflow_run.failed.md +2 -2
  234. package/agent-assets/task-flows/knowledge.import.md +14 -14
  235. package/agent-assets/task-flows/message.received.dm.md +13 -4
  236. package/agent-assets/task-flows/message.received.dm_first.md +7 -3
  237. package/agent-assets/task-flows/routine.custom.md +3 -3
  238. package/agent-assets/task-flows/routine.evening_review.md +88 -8
  239. package/agent-assets/task-flows/routine.fetch_window.md +2 -2
  240. package/agent-assets/task-flows/routine.hourly_check.md +16 -12
  241. package/agent-assets/task-flows/routine.monthly_review.md +93 -21
  242. package/agent-assets/task-flows/routine.morning_routine_journal.md +119 -97
  243. package/agent-assets/task-flows/routine.morning_routine_today.md +43 -43
  244. package/agent-assets/task-flows/routine.research_cluster_update.md +35 -0
  245. package/agent-assets/task-flows/routine.research_dispatch.md +38 -0
  246. package/agent-assets/task-flows/routine.research_offer_dm.md +125 -0
  247. package/agent-assets/task-flows/routine.research_wiki_summary.md +53 -0
  248. package/agent-assets/task-flows/routine.roadmap_refresh.md +10 -10
  249. package/agent-assets/task-flows/routine.today_refresh.md +4 -4
  250. package/agent-assets/task-flows/routine.user_profile_sweep.md +10 -10
  251. package/agent-assets/task-flows/routine.weekly_review.md +114 -24
  252. package/agent-assets/task-flows/schedule.approaching.md +0 -1
  253. package/agent-assets/task-flows/scheduled.dm.md +5 -5
  254. package/agent-assets/task-flows/scheduled.task.md +4 -4
  255. package/agent-assets/task-flows/setup.initial.md +21 -21
  256. package/agent-assets/task-flows/setup.update.md +2 -2
  257. package/agent-assets/task-flows/wiki.trace.md +1 -1
  258. package/agent-assets/templates/README.md +27 -20
  259. package/agent-assets/templates/_index.md +42 -26
  260. package/agent-assets/templates/_manifest.json +34 -99
  261. package/agent-assets/templates/{user → identity}/_index.md +1 -1
  262. package/agent-assets/templates/{user → identity}/profile.md +2 -2
  263. package/agent-assets/templates/{dossiers → knowledge/dossiers}/_index.md +1 -1
  264. package/agent-assets/templates/{projects → plans/projects}/_active.base +1 -1
  265. package/agent-assets/templates/policies/_index.md +21 -0
  266. package/agent-assets/templates/{rules → policies}/journal-export.md +1 -1
  267. package/agent-assets/templates/{rules → policies}/journal-format.md +5 -5
  268. package/agent-assets/templates/{rules/policies → policies/management-captures}/_index.md +2 -2
  269. package/agent-assets/templates/{rules → policies}/management.md +3 -3
  270. package/agent-assets/templates/{rules → policies}/mcp.md +1 -1
  271. package/agent-assets/templates/{rules → policies}/redaction.md +1 -1
  272. package/agent-assets/templates/{routines → policies/routines}/_index.md +1 -1
  273. package/agent-assets/templates/{routines → policies/routines}/evening.md +2 -2
  274. package/agent-assets/templates/{routines → policies/routines}/hourly.md +1 -1
  275. package/agent-assets/templates/{routines → policies/routines}/monthly.md +2 -2
  276. package/bin/aitne.mjs +58 -15
  277. package/package.json +5 -4
  278. package/scripts/commands/doctor.mjs +25 -10
  279. package/scripts/commands/run-now.mjs +6 -21
  280. package/scripts/lib/ports.d.mts +27 -0
  281. package/scripts/lib/ports.mjs +36 -0
  282. package/scripts/lib/process-identity.d.mts +46 -0
  283. package/scripts/lib/process-identity.mjs +193 -0
  284. package/scripts/lib/read-api-token.mjs +176 -0
  285. package/scripts/start.mjs +16 -5
  286. package/agent-assets/docs/features/lifestyle/travel-time.md +0 -58
  287. package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +0 -59
  288. package/agent-assets/skills/schedule/references/recurring.md +0 -185
  289. package/agent-assets/templates/context-index.md +0 -42
  290. package/agent-assets/templates/rules/_index.md +0 -19
  291. /package/agent-assets/templates/{user → identity}/expertise.md +0 -0
  292. /package/agent-assets/templates/{user → identity}/goals.md +0 -0
  293. /package/agent-assets/templates/{user → identity}/people.md +0 -0
  294. /package/agent-assets/templates/{user → identity}/personal.md +0 -0
  295. /package/agent-assets/templates/{user → identity}/work.md +0 -0
  296. /package/agent-assets/templates/{agent/journal.md → journal/agent.md} +0 -0
  297. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/evening.md +0 -0
  298. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/hourly.md +0 -0
  299. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/monthly.md +0 -0
  300. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/morning.md +0 -0
  301. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/roadmap.md +0 -0
  302. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/weekly.md +0 -0
  303. /package/agent-assets/templates/{projects → plans/projects}/_index.md +0 -0
  304. /package/agent-assets/templates/{roadmap.md → plans/roadmap.md} +0 -0
  305. /package/agent-assets/templates/{routines → policies/routines}/morning.md +0 -0
  306. /package/agent-assets/templates/{routines → policies/routines}/weekly.md +0 -0
  307. /package/agent-assets/templates/{agent → state}/profile-questions.md +0 -0
  308. /package/agent-assets/templates/{today.md → state/today.md} +0 -0
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: browser-history-respond
3
+ description: |
4
+ Translate the owner's natural-language reply to a research-engagement
5
+ offer DM into a /api/browser-history/offers/<slug>/{accept|decline}
6
+ call. Use ONLY when GET /offers/pending returns an open offer AND
7
+ conversation_history shows a recent offer DM in this channel.
8
+ allowed-tools:
9
+ - Bash(curl *)
10
+ ---
11
+
12
+ # Browser History — natural-language acceptance bridge
13
+
14
+ When the owner replies to a research-offer DM ("dig deeper" /
15
+ "summarise"), translate that into the structured dispatch call.
16
+
17
+ ## Hard rule — never cold-call
18
+
19
+ This skill is a no-op unless BOTH hold:
20
+
21
+ 1. `GET /api/browser-history/offers/pending` returns a non-empty list
22
+ (call this FIRST). Empty → do nothing; ignore research entirely.
23
+ 2. `<recent_dm_conversation>` shows a prior assistant DM that
24
+ actually offered the two options. No prior offer in the window →
25
+ the reply is not about research; ignore the pending rows (they
26
+ resurface in tomorrow's morning digest).
27
+
28
+ Calling accept/decline when the owner didn't ask is a worse failure
29
+ than missing an ambiguous reply.
30
+
31
+ ## Endpoints
32
+
33
+ | Method | Path | Purpose |
34
+ |---|---|---|
35
+ | GET | `/api/browser-history/offers/pending` | List open offers (slug, displayName, kind, offeredAt, expiresAt). Call FIRST. |
36
+ | POST | `/api/browser-history/offers/<slug>/accept` | Body `{kind: "research_assist" \| "wiki_summary"}` — dispatch the routine. |
37
+ | POST | `/api/browser-history/offers/<slug>/decline` | Silence both options for this cluster for 14 days. |
38
+
39
+ No other `/api/browser-history/*` endpoints from this skill — if you
40
+ want to read clusters or shopping, that's a different skill loaded
41
+ for the routine paths, not the DM agent.
42
+
43
+ ## Intent → kind mapping
44
+
45
+ The owner may reply in any language. Your multilingual understanding
46
+ handles that; the table below gives the *concepts*, not the exact
47
+ phrasing, to anchor the mapping.
48
+
49
+ | Owner intent | Resolves to |
50
+ |---|---|
51
+ | Accepts the deeper-research offer (variations: "yes", "research", "dig deeper", "research please", "do the research") | `{"kind":"research_assist"}` |
52
+ | Accepts the summarise-the-sites offer (variations: "summarise", "summary", "wiki it", "make a note", "do a wiki") | `{"kind":"wiki_summary"}` |
53
+ | Declines both options (variations: "no thanks", "not now", "skip", "later", "ignore it") | `/decline` |
54
+ | Ambiguous reply ("yeah" / "ok" alone when both options were offered) | **Ask ONE clarifier** — don't guess. |
55
+
56
+ If the owner names the topic differently from `displayName` (e.g.
57
+ offer about "prompt-injection-defenses", owner says "yes do the CaMeL
58
+ research"), match to the slug — the intent is what matters.
59
+
60
+ ## Slug resolution
61
+
62
+ If exactly one offer is open: pick it. If two are open (the rate-limit
63
+ gate allows up to 2/day): match `displayName` against what the owner
64
+ referenced, or ask:
65
+
66
+ > Did you mean **<topic A>** or **<topic B>**?
67
+
68
+ ## Acknowledgement
69
+
70
+ For accept, only send the success ack if the response has
71
+ `enqueued:true`. If `enqueued:false` the dispatch did not fire (EventBus
72
+ unwired during the boot window) — tell the owner to retry in a moment
73
+ instead of claiming a result is coming.
74
+
75
+ Send a one-line ack in the owner's `primaryLanguage` (examples English):
76
+
77
+ - research_assist accepted: "On it — I'll DM the parallel research
78
+ dive when it lands. Usually 5-10 min."
79
+ - wiki_summary accepted: "Got it — I'll compose the wiki note and DM
80
+ the destination. A minute or two."
81
+ - decline: "Got it, silenced offers for **<displayName>** for 14 days."
82
+
83
+ The dispatch routines DM the owner with their result themselves; don't
84
+ pre-summarise.
85
+
86
+ ## Curl shapes
87
+
88
+ ```bash
89
+ curl --silent --fail \
90
+ http://127.0.0.1:8321/api/browser-history/offers/pending
91
+
92
+ curl --silent --fail -X POST \
93
+ -H 'Content-Type: application/json' \
94
+ -d '{"kind":"research_assist"}' \
95
+ http://127.0.0.1:8321/api/browser-history/offers/<slug>/accept
96
+
97
+ curl --silent --fail -X POST \
98
+ http://127.0.0.1:8321/api/browser-history/offers/<slug>/decline
99
+ ```
100
+
101
+ JSON body in single quotes (project convention) so the daemon hooks
102
+ classify the payload as data, not shell.
103
+
104
+ ## Out of scope here
105
+
106
+ - Surfacing browser-history data on demand — that's the morning
107
+ digest's job, not DM time.
108
+ - Composing the offer DM itself — that's `routine.research_offer_dm`.
109
+ - Reading cluster journals / deltas — the dispatch routines do that.
110
+ - Muting / renaming — explicit bang commands (`!research mute
111
+ <slug>` / `!research rename <slug> <new>`), not natural-language.
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: browser-task
3
+ description: Hand open-ended browser requests (post a tweet, fill a contact form, check an order status, …) to /api/browser-task. Relay sub-agent clarifications, POST /clarify with the reply, /cancel on stop.
4
+ allowed-tools:
5
+ - Bash(curl *)
6
+ ---
7
+
8
+ # Browser Task — open-ended browser ops from DM
9
+
10
+ A scoped sub-agent drives Aitne's managed Chromium turn-by-turn from a
11
+ natural-language description. **It runs as a detached background process
12
+ with its own budget — the daemon DMs the user directly when it finishes,
13
+ needs input, or fails.** You are NOT in that delivery path. Your job is
14
+ the front bookend only: collect intent, POST it, acknowledge in one line,
15
+ and **end your turn**. The Playwright work is invisible to you.
16
+
17
+ This is NOT the surface for managed-Chromium status, per-site sign-in,
18
+ B-4 purchase tokens, or workflow approvals — those live under
19
+ `/api/browser-history/managed/*`, `/api/browser-automation/sites/*`, and
20
+ `/api/browser-automation/purchase/*`.
21
+
22
+ ## Hard rules
23
+
24
+ 1. **Localhost only.** `http://127.0.0.1:8321/api/browser-task/*`.
25
+ 2. **POST, ack, end the turn. NEVER poll for completion.** After a
26
+ successful POST, reply once ("Started — I'll report back when it's
27
+ done.") and stop. Do not GET `/:id` in a loop, "wait and check", or
28
+ re-issue. Ending your turn has zero effect on the detached task — it
29
+ keeps running and the daemon DMs the user the result (`✅ Browser task
30
+ — report`) or, on any failure/cancel/timeout, `🟦 Browser task <id>
31
+ ended: <state>`. The only allowed GET is a single on-demand status read
32
+ answering an explicit user question (see "On-demand status").
33
+ 3. **Never echo the `!~xxxxxxxx` final-confirm token.** The daemon DMs it
34
+ directly when the sub-agent trips the final-confirm gate. The user
35
+ types it back themselves; the runner consumes the reply. Do not read,
36
+ log, paraphrase, or relay the token. If the user asks "what was that
37
+ code?", point them at the original DM with the screenshot — that DM is
38
+ the only authoritative source.
39
+ 4. **Never invent `clarificationId` / `taskId`.** Both are uuid v4 minted
40
+ by the daemon; read from GET responses.
41
+ 5. **Do not pre-decline based on the URL or site.** Open navigation is
42
+ the default — the sub-agent decides where to go and the daemon enforces
43
+ a user-curated hostname denylist plus the payment-path block at
44
+ navigation time. POST the description as the user asked.
45
+ 6. **One task per request.** "Post a tweet AND subscribe …" → two POSTs.
46
+
47
+ ## Endpoints
48
+
49
+ | Method | Path | Purpose |
50
+ |---|---|---|
51
+ | POST | `/api/browser-task` | Create + dispatch, or schedule for later. |
52
+ | GET | `/api/browser-task?state=...` | List (filter on `state`). |
53
+ | GET | `/api/browser-task/:id` | Detail — state, action log, clarifications. |
54
+ | POST | `/api/browser-task/:id/clarify` | Answer the open clarification. |
55
+ | POST | `/api/browser-task/:id/cancel` | Force-stop a task. |
56
+
57
+ ## POST — composing a request
58
+
59
+ ```bash
60
+ curl --silent --fail -X POST -H 'Content-Type: application/json' \
61
+ -d '{"description":"Post \"Hello world\" to twitter.com"}' \
62
+ http://127.0.0.1:8321/api/browser-task
63
+ ```
64
+
65
+ Body:
66
+
67
+ - `description` (1..4096) — one sentence stating the **end state**, not a
68
+ step recipe. Name the site in plain language when it matters ("post to
69
+ X", "check my hitachi.com order status"); the sub-agent decides where to
70
+ navigate. There is no `siteKey` or `extraAllowedHosts` field — the API
71
+ dropped both on 2026-05-27 (open navigation). Legacy callers passing
72
+ them are silently ignored, not rejected.
73
+ - `scheduleAt` (ISO 8601) — defer to later; respects quiet hours.
74
+ Response is `202` with `{ taskId, status:"scheduled", scheduledFor,
75
+ scheduleRowId }` (`scheduledFor` is epoch-ms; `taskId` is the same
76
+ pre-generated id you use for status GETs).
77
+ - `requireFinalConfirm` (default `true`) — keep `true` unless the user
78
+ explicitly asks to skip the gate for a reversible flow.
79
+
80
+ Immediate response carries `taskId`, `status`, and `queueState`; then ack
81
+ once and stop (Hard rule 2). If `queueState.waitingForSlot === true`, the
82
+ global cap is full — say so once ("queued behind N task(s); I'll start it
83
+ when a slot opens"). The daemon DMs the user on promote and on finish.
84
+
85
+ ## Relaying a clarification — `awaiting_user`
86
+
87
+ The daemon DMs the user a question + screenshot via the originating
88
+ channel (you do not author it, and per Hard rule 2 you do not poll for it
89
+ to appear). You act only when the user comes back with an answer:
90
+
91
+ 1. `GET /api/browser-task?state=awaiting_user` — find the parked task.
92
+ Usually one; if several, match topic or ask which.
93
+ 2. `GET /api/browser-task/<taskId>` — read the open `clarifications` row
94
+ (`resolved:false`) for `clarificationId`.
95
+ 3. `POST /api/browser-task/<taskId>/clarify` with `{clarificationId,
96
+ answer}` (user reply verbatim), then ack briefly and end the turn —
97
+ the runner resumes on its own.
98
+
99
+ Status codes — handle each, don't retry blindly:
100
+
101
+ - `200` — recorded; runner resumes. Brief ack ("Got it, resuming.").
102
+ - `400 validation_error` — `clarificationId` not a uuid or `answer` empty
103
+ / >8192 chars. Re-read with GET and re-send.
104
+ - `409 not_awaiting_user` — window closed (carries `currentState`). Tell
105
+ the user the verbatim state; offer re-issue if relevant.
106
+ - `410 expired` — clarification deadline passed; the runner transitions
107
+ the task to `abandoned` on the next scanner tick. Apologise.
108
+ - `404 not_found` — your state is stale; re-read with GET first.
109
+
110
+ ## On-demand status — only when the user asks
111
+
112
+ If (and only if) the user explicitly asks how a task is going, do a
113
+ **single** read and summarize — never a loop. `GET
114
+ /api/browser-task?state=running,awaiting_user,pending` (or a `taskId` the
115
+ user names), then `GET /api/browser-task/<taskId>` and report `state`, the
116
+ last `actionLog` entry, and `queueState` if pending. States:
117
+
118
+ - `pending` — queued; read `queueState` for position. `running` — acting.
119
+ - `awaiting_user` / `final_confirm` — relay rules are Hard rule 3 + the
120
+ clarify section; here just report the state.
121
+ - `completed` — the daemon already DMed the full `✅ Browser task —
122
+ report`. Don't re-post; if asked "what did it find?", quote the
123
+ `report` field verbatim (don't paraphrase).
124
+ - `failed` / `timeout` / `cancelled` / `abandoned` — terminal; the daemon
125
+ already DMed `🟦 Browser task <id> ended: <state>`. `outcome_detail`
126
+ carries the reason (e.g. `queue_timeout`, `budget_exceeded`,
127
+ `tool_loop_detected`) — quote it verbatim.
128
+
129
+ ## Force-stop — "stop" / "cancel" / "abort" / "止めて"
130
+
131
+ When the user signals stop, find the task (same identification path as
132
+ status), then `POST /api/browser-task/<taskId>/cancel` with optional
133
+ `{"reason":"user_cancel"}`. The daemon aborts the in-flight sub-agent,
134
+ tears down the Chromium context, and writes the terminal state.
135
+
136
+ - `200` — accepted; `row.state` carries the post-cancel state (often
137
+ `cancelled`, but a `running` task may briefly stay non-terminal until
138
+ the SDK loop unwinds — re-read with GET if asked).
139
+ - `404 not_found` — stale `taskId`; re-read with GET.
140
+ - `409 already_terminal` (carries `currentState`) — too late; report the
141
+ state verbatim.
142
+
143
+ Do NOT cancel without a clear signal; "wait" is NOT a cancel.
144
+
145
+ ## Navigation is open
146
+
147
+ There is no positive allowlist or registered-site table. Whatever URL the
148
+ sub-agent navigates to passes three runtime layers: (1) the user-curated
149
+ hostname denylist (Dashboard → Settings → Browser; a hit returns
150
+ `blockedByAllowlist: true` — legacy field name), (2) the hardcoded
151
+ payment-path block (purchases live in `/api/browser-automation/purchase/*`
152
+ with the B-4 token), (3) the network IP CIDR fence (RFC1918, loopback,
153
+ `169.254.x.x`, IPv6 ULA). If the sub-agent reports `blockedByAllowlist` /
154
+ `blockedByPaymentPath`, quote the reason verbatim and point the user at
155
+ `/settings/browser` if a denylist entry is the cause. **Never decline on
156
+ the user's behalf before POSTing — that's the user's call.**
157
+
158
+ ## Scheduling — `scheduleAt` ≠ the `schedule` skill
159
+
160
+ For "do X at <time>" use `scheduleAt` in this POST — NOT `/api/schedule`.
161
+ The browser-task surface owns its own `agent_schedule` row
162
+ (`task_type:"browser_task"`). The `schedule` skill is the right tool only
163
+ when the user wants to list / modify / cancel pending schedules (which
164
+ surface scheduled browser tasks alongside other rows).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: context
3
- description: Load when reading or writing project notes, weekly/monthly summaries, or agent/journal.md. Owns GET/PATCH for context files except today.md and roadmap.md, which use their dedicated skills.
3
+ description: Load when reading or writing project notes, weekly/monthly summaries, or journal/agent.md. Owns GET/PATCH for context files except today.md and roadmap.md, which use their dedicated skills.
4
4
  allowed-tools:
5
5
  - Bash(curl *)
6
6
  - Read
@@ -26,58 +26,48 @@ vault**, not this primary store.
26
26
 
27
27
  | File | Purpose | Owner | Lock? |
28
28
  |---|---|---|---|
29
- | `today.md` | Today's schedule, tasks, agent log, handoff | See `today` skill | Yes (Morning Routine) |
30
- | `roadmap.md` | Long-horizon agent action plan + Long-term Plans | See `roadmap` skill | Yes (Roadmap Refresh) |
31
- | `projects/*.md` | Project state summaries | Any event on material state change | No |
32
- | `weekly/YYYY-Www.md` | Weekly review snapshots | Friday Weekly Review only (PUT) | No |
33
- | `monthly/YYYY-MM.md` | Monthly review snapshots | Month-end Monthly Review only (PUT) | No |
34
- | `rules/*.md` | User-controlled policy files | Explicit user request only | No |
35
- | `rules/policies/<slug>.md` | Durable management policies captured from DM | `management-policy` skill — **do not write from here** | No |
36
- | `rules/policies/_index.md` | Readable index of active policies | `management-policy` skill — **do not write from here** | No |
37
- | `routines/*.md` | Per-cadence check rulebooks | Explicit user request only | No |
38
- | `user/profile.md` | User identity and preferences | `user-profile` skill — **do not write from here** | No |
39
- | `user/*.md` | Detailed user dictionary | `user-profile` skill — **do not write from here** | No |
29
+ | `state/today.md` | Today's schedule, tasks, agent log, handoff | See `today` skill | Yes (Morning Routine) |
30
+ | `plans/roadmap.md` | Long-horizon agent action plan + Long-term Plans | See `roadmap` skill | Yes (Roadmap Refresh) |
31
+ | `plans/projects/*.md` | Project state summaries | Any event on material state change | No |
32
+ | `journal/weekly/YYYY-Www.md` | Weekly review snapshots | Friday Weekly Review only (PUT) | No |
33
+ | `journal/monthly/YYYY-MM.md` | Monthly review snapshots | Month-end Monthly Review only (PUT) | No |
34
+ | `policies/*.md` | User-controlled policy files | Explicit user request only | No |
35
+ | `policies/management-captures/<slug>.md` | Durable management policies captured from DM | `management-policy` skill — **do not write from here** | No |
36
+ | `policies/management-captures/_index.md` | Readable index of active policies | `management-policy` skill — **do not write from here** | No |
37
+ | `policies/routines/*.md` | Per-cadence check rulebooks | Explicit user request only | No |
38
+ | `identity/profile.md` | User identity and preferences | `user-profile` skill — **do not write from here** | No |
39
+ | `identity/*.md` | Detailed user dictionary | `user-profile` skill — **do not write from here** | No |
40
40
 
41
41
  Morning Routine scans roadmap daily and processes matching Preparation
42
- Timeline rows into `today.md` — see the `roadmap` skill for the full
42
+ Timeline rows into `state/today.md` — see the `roadmap` skill for the full
43
43
  entry taxonomy and the morning routine task-flow for the scanning rules.
44
44
 
45
- ## projects/*.md
45
+ ## plans/projects/*.md
46
46
 
47
- Update on status changes, milestones reached/delayed, or active set changes. Use `GET /api/context/list/projects` to discover files. The source of truth is always the individual `projects/<slug>.md` notes; `_active.base` is only the Obsidian Bases view config, not a narrative summary note.
47
+ Update on status changes, milestones reached/delayed, or active set changes. Use `GET /api/context/list/plans/projects` to discover files. The source of truth is always the individual `plans/projects/<slug>.md` notes; `_active.base` is only the Obsidian Bases view config, not a narrative summary note.
48
48
 
49
- The canonical frontmatter schema is documented in `projects/_index.md`
50
- (seeded from `agent-assets/templates/projects/_index.md`). The API
49
+ The canonical frontmatter schema is documented in `plans/projects/_index.md`
50
+ (seeded from `agent-assets/templates/plans/projects/_index.md`). The API
51
51
  validates only `type: project`, `owner: shared`, `updated`, and an H1
52
52
  (`context-frontmatter.ts`). Conventional but unvalidated fields —
53
53
  `slug`, `state`, `start`, `due`, `stakeholders`, `next_milestone`,
54
54
  `tags` — should still be written for new files because the
55
- `projects/_active.base` Obsidian view filters on `state`.
55
+ `plans/projects/_active.base` Obsidian view filters on `state`.
56
56
 
57
57
  ## Project DM-intent detection
58
58
 
59
- DM-driven project state writes are dispatched from
60
- `message.received.dm.md` / `message.received.dm_first.md` Step 4 via
61
- the `_partials/dm-intent.project.md` task-flow partialthat partial
62
- carries the decision tree (existing-vs-new match, decline-marker
63
- pre-check, no-match confirm sub-flow scheduling, reply branches,
64
- cross-path cancellation, slug grammar, tie-breakers).
59
+ DM-driven project writes are dispatched by
60
+ `_partials/dm-intent.project.md` (the decision tree match, decline
61
+ markers, confirm sub-flow, slug grammar, tie-breakers lives there).
62
+ **This skill is the writer:** it executes the `plans/projects/*.md`
63
+ PUT / PATCH / archive per the API Reference below.
65
64
 
66
- **This skill is the writer.** `projects/<slug>.md` PUT / PATCH / archive
67
- goes through `/api/context/projects/*` per the API Reference below. The
68
- partial dispatches; this skill executes the writes.
65
+ ## Snapshot files weekly / monthly / policies / routines
69
66
 
70
- Cross-references previously in this section ("Reply branches",
71
- "Cross-path cancellation", "Decline-marker reversal", "Tie-breakers",
72
- "Slug grammar") now live alongside their decision-tree steps inside
73
- the partial.
74
-
75
- ## Snapshot files — weekly / monthly / rules / routines
76
-
77
- Weekly and monthly review snapshots, the user-controlled `rules/*.md`
78
- policy files, the built-in `routines/<cadence>.md` rulebooks, custom
79
- routines under `routines/custom/`, and the agent-private
80
- `agent/journal.md` all have stable per-file conventions (writer event,
67
+ Weekly and monthly review snapshots, the user-controlled `policies/*.md`
68
+ policy files, the built-in `policies/routines/<cadence>.md` rulebooks, custom
69
+ routines under `policies/routines/custom/`, and the agent-private
70
+ `journal/agent.md` all have stable per-file conventions (writer event,
81
71
  verb, frontmatter, retention) documented in the snapshot-files
82
72
  reference below.
83
73
 
@@ -88,11 +78,12 @@ DM handlers and Hourly Checks should generally not write these files
88
78
 
89
79
  ## Required frontmatter for guarded files
90
80
 
91
- Full-file writes to `user/*.md`, `rules/*.md`, `projects/*.md`,
92
- `daily/*.md`, `weekly/*.md`, and `monthly/*.md` must open with the
93
- matching YAML frontmatter (`type`, `owner`, `updated`) followed by at
94
- least one H1 heading. Per-glob values and the common rejection
95
- envelope are in the required-frontmatter reference below.
81
+ Full-file writes to `identity/*.md`, `policies/*.md`,
82
+ `plans/projects/*.md`, `journal/daily/*.md`, `journal/weekly/*.md`, and
83
+ `journal/monthly/*.md` must open with the matching YAML frontmatter
84
+ (`type`, `owner`, `updated`) followed by at least one H1 heading.
85
+ Per-glob values and the common rejection envelope are in the
86
+ required-frontmatter reference below.
96
87
 
97
88
  {{> ref:required-frontmatter }}
98
89
 
@@ -101,7 +92,7 @@ envelope are in the required-frontmatter reference below.
101
92
  The full `/api/context/*` surface — read / write / list / lock /
102
93
  archive / restore / health / repair / action-log — is organised by
103
94
  operation in the reference below. Add `X-Lock-Id` on every PUT / PATCH
104
- to `today.md` (`<today_write_lock_id>`) or `roadmap.md`
95
+ to `state/today.md` (`<today_write_lock_id>`) or `plans/roadmap.md`
105
96
  (`<roadmap_write_lock_id>`) when the matching lock-id tag is in your
106
97
  context.
107
98
 
@@ -8,14 +8,14 @@
8
8
  "human_label": "File responsibilities",
9
9
  "description": "Which file owns which area of the context tree (today, roadmap, projects, weekly, rules, user)",
10
10
  "scope_paths": [
11
- "today.md",
12
- "roadmap.md",
13
- "projects/*.md",
14
- "weekly/*.md",
15
- "monthly/*.md",
16
- "rules/*.md",
17
- "user/*.md",
18
- "agent/*.md"
11
+ "state/today.md",
12
+ "plans/roadmap.md",
13
+ "plans/projects/*.md",
14
+ "journal/weekly/*.md",
15
+ "journal/monthly/*.md",
16
+ "policies/*.md",
17
+ "identity/*.md",
18
+ "journal/agent.md"
19
19
  ]
20
20
  },
21
21
  {
@@ -25,12 +25,12 @@
25
25
  "human_label": "Required frontmatter for guarded files",
26
26
  "description": "Per file-glob: required + conventional frontmatter keys",
27
27
  "scope_paths": [
28
- "projects/*.md",
29
- "user/*.md",
30
- "rules/*.md",
31
- "weekly/*.md",
32
- "monthly/*.md",
33
- "daily/*.md"
28
+ "plans/projects/*.md",
29
+ "identity/*.md",
30
+ "policies/*.md",
31
+ "journal/weekly/*.md",
32
+ "journal/monthly/*.md",
33
+ "journal/daily/*.md"
34
34
  ]
35
35
  }
36
36
  ]