@aitne-sh/aitne 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +464 -0
- package/agent-assets/agent-profiles/_safety.md +26 -0
- package/agent-assets/agent-profiles/conversational.md +33 -0
- package/agent-assets/agent-profiles/docs-qa.md +24 -0
- package/agent-assets/agent-profiles/observer.md +28 -0
- package/agent-assets/agent-profiles/profile-importer.md +63 -0
- package/agent-assets/agent-profiles/proxy.md +28 -0
- package/agent-assets/agent-profiles/routine.md +16 -0
- package/agent-assets/agent-profiles/task.md +18 -0
- package/agent-assets/docs/concepts/agent-day.md +88 -0
- package/agent-assets/docs/concepts/auth-health.md +75 -0
- package/agent-assets/docs/concepts/backends-and-tiers.md +126 -0
- package/agent-assets/docs/concepts/costs-and-quotas.md +103 -0
- package/agent-assets/docs/concepts/delegated-mode.md +223 -0
- package/agent-assets/docs/concepts/memory-model.md +118 -0
- package/agent-assets/docs/concepts/observations.md +80 -0
- package/agent-assets/docs/concepts/process-keys.md +89 -0
- package/agent-assets/docs/concepts/routines.md +108 -0
- package/agent-assets/docs/concepts/safety-and-execution.md +109 -0
- package/agent-assets/docs/concepts/safety-model.md +279 -0
- package/agent-assets/docs/concepts/skills.md +100 -0
- package/agent-assets/docs/features/integrations/calendar.md +92 -0
- package/agent-assets/docs/features/integrations/git.md +95 -0
- package/agent-assets/docs/features/integrations/github.md +170 -0
- package/agent-assets/docs/features/integrations/mail.md +106 -0
- package/agent-assets/docs/features/integrations/notion.md +69 -0
- package/agent-assets/docs/features/integrations/obsidian.md +71 -0
- package/agent-assets/docs/features/lifestyle/git.md +178 -0
- package/agent-assets/docs/features/lifestyle/reading.md +93 -0
- package/agent-assets/docs/features/lifestyle/receipts.md +71 -0
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +44 -0
- package/agent-assets/docs/features/lifestyle/travel-time.md +52 -0
- package/agent-assets/docs/features/memory-files/agent-journal.md +105 -0
- package/agent-assets/docs/features/memory-files/projects.md +56 -0
- package/agent-assets/docs/features/memory-files/roadmap.md +61 -0
- package/agent-assets/docs/features/memory-files/schedule.md +112 -0
- package/agent-assets/docs/features/memory-files/today.md +73 -0
- package/agent-assets/docs/features/memory-files/user-profile.md +81 -0
- package/agent-assets/docs/features/messaging/dashboard-chat.md +93 -0
- package/agent-assets/docs/features/messaging/discord.md +50 -0
- package/agent-assets/docs/features/messaging/overview.md +111 -0
- package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +69 -0
- package/agent-assets/docs/features/messaging/slack.md +51 -0
- package/agent-assets/docs/features/messaging/telegram.md +63 -0
- package/agent-assets/docs/features/messaging/whatsapp.md +48 -0
- package/agent-assets/docs/features/operations/activity-and-conversations.md +105 -0
- package/agent-assets/docs/features/operations/approvals.md +58 -0
- package/agent-assets/docs/features/operations/backend-routing.md +62 -0
- package/agent-assets/docs/features/operations/cost-tracking.md +59 -0
- package/agent-assets/docs/features/operations/notifications.md +69 -0
- package/agent-assets/docs/features/operations/quiet-hours.md +106 -0
- package/agent-assets/docs/features/operations/schedule-approaching.md +60 -0
- package/agent-assets/docs/features/routines/custom-routines.md +101 -0
- package/agent-assets/docs/features/routines/evening-review.md +81 -0
- package/agent-assets/docs/features/routines/hourly-check.md +85 -0
- package/agent-assets/docs/features/routines/monthly-review.md +65 -0
- package/agent-assets/docs/features/routines/morning-routine.md +123 -0
- package/agent-assets/docs/features/routines/weekly-review.md +70 -0
- package/agent-assets/docs/getting-started/01-what-is-this.md +192 -0
- package/agent-assets/docs/getting-started/02-first-steps.md +80 -0
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +110 -0
- package/agent-assets/docs/getting-started/04-first-day.md +287 -0
- package/agent-assets/docs/glossary.md +116 -0
- package/agent-assets/docs/guides/add-a-custom-routine.md +71 -0
- package/agent-assets/docs/guides/backup-and-restore.md +54 -0
- package/agent-assets/docs/guides/change-which-model-handles-x.md +47 -0
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +59 -0
- package/agent-assets/docs/guides/import-knowledge-file.md +275 -0
- package/agent-assets/docs/guides/install-and-run.md +72 -0
- package/agent-assets/docs/guides/migrate-machines.md +52 -0
- package/agent-assets/docs/guides/pause-the-agent.md +65 -0
- package/agent-assets/docs/guides/reinstall-cleanly.md +52 -0
- package/agent-assets/docs/guides/setup-wizard.md +107 -0
- package/agent-assets/docs/guides/switch-default-backend.md +60 -0
- package/agent-assets/docs/reference/api.md +51 -0
- package/agent-assets/docs/reference/cli-commands.md +121 -0
- package/agent-assets/docs/reference/config.md +74 -0
- package/agent-assets/docs/reference/disallowed-tools.md +76 -0
- package/agent-assets/docs/reference/keyboard-shortcuts.md +39 -0
- package/agent-assets/docs/reference/process-keys.md +59 -0
- package/agent-assets/docs/reference/skills.md +50 -0
- package/agent-assets/docs/troubleshooting/auth-failed.md +57 -0
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +55 -0
- package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +54 -0
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +53 -0
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +75 -0
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +57 -0
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +57 -0
- package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +75 -0
- package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +71 -0
- package/agent-assets/optimizer-skills/skill-curation/SKILL.md +108 -0
- package/agent-assets/project-doc-templates/git-repo.md +21 -0
- package/agent-assets/project-doc-templates/project.md +38 -0
- package/agent-assets/skills/attach/SKILL.md +104 -0
- package/agent-assets/skills/context/SKILL.md +257 -0
- package/agent-assets/skills/context/curation.json +37 -0
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +13 -0
- package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +40 -0
- package/agent-assets/skills/docs-search/SKILL.md +176 -0
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +369 -0
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +349 -0
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +347 -0
- package/agent-assets/skills/external-services/SKILL.md +371 -0
- package/agent-assets/skills/mail/SKILL.delegated.claude.md +284 -0
- package/agent-assets/skills/mail/SKILL.delegated.codex.md +261 -0
- package/agent-assets/skills/mail/SKILL.delegated.gemini.md +255 -0
- package/agent-assets/skills/mail/SKILL.md +313 -0
- package/agent-assets/skills/mail/references/errors.md +17 -0
- package/agent-assets/skills/mail/references/providers.md +40 -0
- package/agent-assets/skills/mail/references/query-grammar.md +24 -0
- package/agent-assets/skills/management-policy/SKILL.md +307 -0
- package/agent-assets/skills/management-policy/curation.json +13 -0
- package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +16 -0
- package/agent-assets/skills/management-task-modify/SKILL.md +202 -0
- package/agent-assets/skills/management-task-register/SKILL.md +330 -0
- package/agent-assets/skills/management-task-stop/SKILL.md +166 -0
- package/agent-assets/skills/notify/SKILL.md +196 -0
- package/agent-assets/skills/notion/SKILL.delegated.claude.md +254 -0
- package/agent-assets/skills/notion/SKILL.delegated.codex.md +195 -0
- package/agent-assets/skills/notion/SKILL.delegated.gemini.md +194 -0
- package/agent-assets/skills/notion/SKILL.md +86 -0
- package/agent-assets/skills/observations/SKILL.md +234 -0
- package/agent-assets/skills/observations/curation.json +13 -0
- package/agent-assets/skills/observations/seeds/source-namespacing.seed.json +20 -0
- package/agent-assets/skills/project-doc/SKILL.md +86 -0
- package/agent-assets/skills/project-doc/curation.json +21 -0
- package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +25 -0
- package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +20 -0
- package/agent-assets/skills/reading/SKILL.md +198 -0
- package/agent-assets/skills/reading/references/reading-taste.md +197 -0
- package/agent-assets/skills/receipts/SKILL.md +134 -0
- package/agent-assets/skills/roadmap/SKILL.md +276 -0
- package/agent-assets/skills/roadmap/curation.json +13 -0
- package/agent-assets/skills/roadmap/references/horizon-tags.md +40 -0
- package/agent-assets/skills/roadmap/references/preparation-timeline.md +47 -0
- package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +16 -0
- package/agent-assets/skills/schedule/SKILL.md +228 -0
- package/agent-assets/skills/scheduled-managed-task/SKILL.md +392 -0
- package/agent-assets/skills/today/SKILL.md +198 -0
- package/agent-assets/skills/today/curation.json +21 -0
- package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +17 -0
- package/agent-assets/skills/today/seeds/section-shape.seed.json +17 -0
- package/agent-assets/skills/travel/SKILL.md +132 -0
- package/agent-assets/skills/travel-time/SKILL.md +149 -0
- package/agent-assets/skills/user-interview/SKILL.md +323 -0
- package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +94 -0
- package/agent-assets/skills/user-profile/SKILL.md +210 -0
- package/agent-assets/skills/user-profile/curation.json +29 -0
- package/agent-assets/skills/user-profile/seeds/learned-context-format.seed.json +14 -0
- package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +53 -0
- package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +27 -0
- package/agent-assets/task-flows/dashboard.docs_qa.md +43 -0
- package/agent-assets/task-flows/default.md +11 -0
- package/agent-assets/task-flows/git.branch.created.md +25 -0
- package/agent-assets/task-flows/git.lifecycle.poll.md +52 -0
- package/agent-assets/task-flows/git.local_ahead.stale.md +34 -0
- package/agent-assets/task-flows/git.merge_to_default.md +30 -0
- package/agent-assets/task-flows/git.project.refresh_architecture.md +100 -0
- package/agent-assets/task-flows/git.project.retemplate.md +73 -0
- package/agent-assets/task-flows/git.push.detected.md +32 -0
- package/agent-assets/task-flows/git.push.force_pushed.md +36 -0
- package/agent-assets/task-flows/git.tag.created.md +24 -0
- package/agent-assets/task-flows/github.assigned.md +43 -0
- package/agent-assets/task-flows/github.pull_request.review_requested.md +57 -0
- package/agent-assets/task-flows/github.security_alert.md +45 -0
- package/agent-assets/task-flows/github.workflow_run.failed.md +57 -0
- package/agent-assets/task-flows/knowledge.import.md +161 -0
- package/agent-assets/task-flows/message.received.dm.md +142 -0
- package/agent-assets/task-flows/message.received.dm_first.md +117 -0
- package/agent-assets/task-flows/message.received.md +14 -0
- package/agent-assets/task-flows/routine.custom.md +38 -0
- package/agent-assets/task-flows/routine.evening_review.md +323 -0
- package/agent-assets/task-flows/routine.hourly_check.delegated.claude.md +405 -0
- package/agent-assets/task-flows/routine.hourly_check.delegated.codex.md +400 -0
- package/agent-assets/task-flows/routine.hourly_check.delegated.gemini.md +404 -0
- package/agent-assets/task-flows/routine.hourly_check.md +184 -0
- package/agent-assets/task-flows/routine.hourly_check.triage.md +93 -0
- package/agent-assets/task-flows/routine.monthly_review.md +250 -0
- package/agent-assets/task-flows/routine.morning_routine.md +300 -0
- package/agent-assets/task-flows/routine.morning_routine_initial.md +184 -0
- package/agent-assets/task-flows/routine.roadmap_refresh.md +275 -0
- package/agent-assets/task-flows/routine.today_refresh.md +172 -0
- package/agent-assets/task-flows/routine.user_profile_sweep.md +242 -0
- package/agent-assets/task-flows/routine.weekly_review.md +247 -0
- package/agent-assets/task-flows/schedule.approaching.md +124 -0
- package/agent-assets/task-flows/scheduled.dm.md +391 -0
- package/agent-assets/task-flows/scheduled.task.md +141 -0
- package/agent-assets/task-flows/setup.initial.md +277 -0
- package/agent-assets/task-flows/setup.update.md +53 -0
- package/agent-assets/templates/README.md +85 -0
- package/agent-assets/templates/_index.md +39 -0
- package/agent-assets/templates/_manifest.json +103 -0
- package/agent-assets/templates/agent/journal.md +10 -0
- package/agent-assets/templates/agent/profile-questions.md +74 -0
- package/agent-assets/templates/context-index.md +42 -0
- package/agent-assets/templates/dossiers/_index.md +22 -0
- package/agent-assets/templates/dossiers/evening.md +23 -0
- package/agent-assets/templates/dossiers/hourly.md +23 -0
- package/agent-assets/templates/dossiers/monthly.md +23 -0
- package/agent-assets/templates/dossiers/morning.md +23 -0
- package/agent-assets/templates/dossiers/roadmap.md +23 -0
- package/agent-assets/templates/dossiers/weekly.md +23 -0
- package/agent-assets/templates/projects/_active.base +14 -0
- package/agent-assets/templates/projects/_index.md +29 -0
- package/agent-assets/templates/roadmap.md +15 -0
- package/agent-assets/templates/routines/_index.md +20 -0
- package/agent-assets/templates/routines/evening.md +22 -0
- package/agent-assets/templates/routines/hourly.md +30 -0
- package/agent-assets/templates/routines/monthly.md +25 -0
- package/agent-assets/templates/routines/morning.md +26 -0
- package/agent-assets/templates/routines/weekly.md +23 -0
- package/agent-assets/templates/rules/_index.md +19 -0
- package/agent-assets/templates/rules/journal-export.md +41 -0
- package/agent-assets/templates/rules/journal-format.md +61 -0
- package/agent-assets/templates/rules/management.md +48 -0
- package/agent-assets/templates/rules/mcp.md +40 -0
- package/agent-assets/templates/rules/policies/_index.md +22 -0
- package/agent-assets/templates/rules/redaction.md +30 -0
- package/agent-assets/templates/today.md +13 -0
- package/agent-assets/templates/user/_index.md +16 -0
- package/agent-assets/templates/user/expertise.md +7 -0
- package/agent-assets/templates/user/goals.md +7 -0
- package/agent-assets/templates/user/people.md +7 -0
- package/agent-assets/templates/user/personal.md +7 -0
- package/agent-assets/templates/user/profile.md +28 -0
- package/agent-assets/templates/user/work.md +7 -0
- package/bin/aitne.mjs +1096 -0
- package/package.json +78 -0
- package/personal-agent.mjs +39 -0
- package/scripts/browser.mjs +99 -0
- package/scripts/check-redaction-coverage.mjs +109 -0
- package/scripts/commands/audit.mjs +309 -0
- package/scripts/commands/doctor.mjs +437 -0
- package/scripts/commands/open.mjs +40 -0
- package/scripts/commands/setup.mjs +21 -0
- package/scripts/commands/uninstall.mjs +114 -0
- package/scripts/commands/update.mjs +96 -0
- package/scripts/commands/version.mjs +62 -0
- package/scripts/commands.md +0 -0
- package/scripts/lib/sqlite-loader.mjs +49 -0
- package/scripts/message-discipline-digest.mjs +535 -0
- package/scripts/poc/google-connector-inheritance/REPORT.md +197 -0
- package/scripts/poc/google-connector-inheritance/claude-sdk-probe.mjs +79 -0
- package/scripts/remint-roadmap-ids.mjs +257 -0
- package/scripts/rm-paths.mjs +22 -0
- package/scripts/run-node.mjs +223 -0
- package/scripts/smoke-obsidian-api.mjs +166 -0
- package/scripts/start.mjs +160 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: external-services
|
|
3
|
+
description: Load when the task involves Google Calendar, the user's external Obsidian vault, GitHub, or Skills management AND Google Calendar is in cross-backend delegated mode (DM session on Codex CLI, Calendar delegated to a different backend's connector). Calendar calls flow through `POST /api/integrations/google_calendar/exec`; the rest of the surface (Obsidian, GitHub, recurring schedules, one-shot scheduling, skills CRUD) is unchanged from the direct-mode body.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(curl *)
|
|
6
|
+
- Bash(jq *)
|
|
7
|
+
- Read
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# External Services API Reference — Cross-Backend Delegated (Codex DM)
|
|
11
|
+
|
|
12
|
+
Base URL: `http://localhost:8321`. All calls via `curl -s` with
|
|
13
|
+
`Content-Type: application/json` on POST/PATCH/PUT.
|
|
14
|
+
|
|
15
|
+
Your DM session runs on Codex CLI. **Google Calendar** access has been
|
|
16
|
+
delegated to a different backend whose Calendar connector is signed
|
|
17
|
+
in. You describe Calendar intent in natural language; the daemon
|
|
18
|
+
spawns the delegated backend, lets it pick the right MCP tool, and
|
|
19
|
+
returns a schema-validated JSON result. The
|
|
20
|
+
`mcp__codex_apps__google_calendar._*` tools are not on the inventory
|
|
21
|
+
for these calls (Calendar is not delegated to Codex here).
|
|
22
|
+
|
|
23
|
+
The rest of this skill — Obsidian, GitHub, recurring schedules, one-shot
|
|
24
|
+
scheduling, skills CRUD — works identically to the direct-mode body.
|
|
25
|
+
Refer to that body for those services; **only the Calendar section
|
|
26
|
+
below changes** under cross-backend delegation.
|
|
27
|
+
|
|
28
|
+
To check which backend currently owns the Calendar connector, read
|
|
29
|
+
`~/.personal-agent/integrations.md`. The `/exec` body below is
|
|
30
|
+
backend-agnostic — Claude, Gemini, and any custom MCP server the user
|
|
31
|
+
installs are all addressed the same way.
|
|
32
|
+
|
|
33
|
+
## Shell rules (read before writing curl pipelines)
|
|
34
|
+
|
|
35
|
+
- **JSON post-processing: use `jq`, never `python3`.** `python3` is not
|
|
36
|
+
in the daemon's allowlist, so `curl ... | python3 -c ...` is denied
|
|
37
|
+
under `permissionMode: "dontAsk"` and the call silently fails. Use
|
|
38
|
+
`jq` for all field extraction, filtering, and pretty-printing.
|
|
39
|
+
- **`jq` is restricted**: `--slurpfile`, `--rawfile`, `-L`, and the
|
|
40
|
+
`env` filter are blocked by the security hook. Use only the filter
|
|
41
|
+
language itself.
|
|
42
|
+
- **`curl` is restricted to `http://localhost:8321`**: connection-
|
|
43
|
+
override flags and non-localhost hosts are blocked.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
<!-- service:calendar -->
|
|
48
|
+
## Calendar (delegated, cross-backend)
|
|
49
|
+
|
|
50
|
+
Every Calendar operation is one POST to the daemon's task-mode endpoint:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
curl -sS -X POST http://localhost:8321/api/integrations/google_calendar/exec \
|
|
54
|
+
-H 'Content-Type: application/json' \
|
|
55
|
+
-d '{"task": "<natural-language intent>", "outputSchema": { ... }, "cacheable": true}'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The daemon:
|
|
59
|
+
|
|
60
|
+
1. Verifies Calendar is in `mode="delegated"`. If not, you get
|
|
61
|
+
`409 mode_mismatch` — re-read `integrations.md` and stop.
|
|
62
|
+
2. Verifies your DM backend isn't the same as `delegatedBackend`. If it
|
|
63
|
+
is, you get `409 mode_mismatch` and should switch to native MCP.
|
|
64
|
+
3. Spawns the delegatedBackend, lets it pick the right tool against the
|
|
65
|
+
per-task allowed-tools envelope, validates the final JSON against
|
|
66
|
+
your `outputSchema`, returns it.
|
|
67
|
+
|
|
68
|
+
You **describe Calendar intent in natural language**. Tool name
|
|
69
|
+
divergence between Claude (`list_events`, `create_event`), Gemini
|
|
70
|
+
(`listEvents`, `createEvent`) and any custom MCP server the user
|
|
71
|
+
installs is invisible to you.
|
|
72
|
+
|
|
73
|
+
### Worked examples
|
|
74
|
+
|
|
75
|
+
#### List events in a window (read)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
curl -sS -X POST http://localhost:8321/api/integrations/google_calendar/exec \
|
|
79
|
+
-H 'Content-Type: application/json' \
|
|
80
|
+
-d '{
|
|
81
|
+
"task": "List every confirmed event on my primary calendar from today through 2026-05-30. Sort ascending by start.",
|
|
82
|
+
"outputSchema": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"required": ["events"],
|
|
85
|
+
"properties": {
|
|
86
|
+
"events": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"items": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"required": ["id", "title", "start", "end"],
|
|
91
|
+
"properties": {
|
|
92
|
+
"id": {"type": "string"},
|
|
93
|
+
"title": {"type": "string"},
|
|
94
|
+
"start": {"type": "string", "format": "date-time"},
|
|
95
|
+
"end": {"type": "string", "format": "date-time"},
|
|
96
|
+
"attendees": {"type": "array", "items": {"type": "string"}}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"cacheable": true
|
|
103
|
+
}'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### Find free time + create an event (multi-step)
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
curl -sS -X POST http://localhost:8321/api/integrations/google_calendar/exec \
|
|
110
|
+
-H 'Content-Type: application/json' \
|
|
111
|
+
-d '{
|
|
112
|
+
"task": "Find a 30-minute free slot on my primary calendar tomorrow afternoon (13:00-17:00 local). Create a Calendar event titled \"Focus block\" in that slot.",
|
|
113
|
+
"outputSchema": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"required": ["eventId", "start", "end"],
|
|
116
|
+
"properties": {
|
|
117
|
+
"eventId": {"type": "string"},
|
|
118
|
+
"start": {"type": "string", "format": "date-time"},
|
|
119
|
+
"end": {"type": "string", "format": "date-time"}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"maxToolCalls": 5,
|
|
123
|
+
"allowDestructive": true
|
|
124
|
+
}'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
`outputSchema` is **required** (4 KB cap). Defaults: `maxToolCalls=7`,
|
|
128
|
+
`maxBudgetUsd=0.05`, `timeoutMs=60000`. Bump up to 15 / 0.50 / 300000
|
|
129
|
+
for genuinely larger intents.
|
|
130
|
+
|
|
131
|
+
### Destructive-confirm two-step (`allowDestructive`)
|
|
132
|
+
|
|
133
|
+
Default is `false`. Subprocess refuses create / update / delete /
|
|
134
|
+
respond and returns `{needsConfirmation, confirmationPlan}`. Surface
|
|
135
|
+
the plan, get explicit user OK, re-issue the **same `task` verbatim**
|
|
136
|
+
with `allowDestructive: true`. Never set `cacheable: true` on the
|
|
137
|
+
second call.
|
|
138
|
+
|
|
139
|
+
### `cacheable: true` for read-only Calendar lookups
|
|
140
|
+
|
|
141
|
+
60s TTL — well-suited to week-/month-scale lookups. Skip for
|
|
142
|
+
"today's events" when minute-level freshness matters; never set on the
|
|
143
|
+
destructive-confirm second call.
|
|
144
|
+
|
|
145
|
+
### Decision rules
|
|
146
|
+
|
|
147
|
+
- **Update / delete + send invite are destructive.** The
|
|
148
|
+
`needsConfirmation` envelope is the standard interaction; surface
|
|
149
|
+
the plan and ask before pressing OK.
|
|
150
|
+
- **All-day vs timed**: timed events need ISO 8601 timestamps with TZ
|
|
151
|
+
offset. All-day events use `YYYY-MM-DD` with no offset. Be explicit
|
|
152
|
+
in the `task` body which shape you intend.
|
|
153
|
+
- **Attendees on update**: describe the full final list in your `task`,
|
|
154
|
+
not a delta — the connector's PATCH semantics differ.
|
|
155
|
+
- **Free/busy** under cross-backend: phrase the intent as "find a free
|
|
156
|
+
slot…" — the subprocess picks the right primitive whichever
|
|
157
|
+
connector is active.
|
|
158
|
+
- When you do mutate the calendar in a way the user would want to
|
|
159
|
+
know about, call `POST /api/notify` with a one-line summary. The
|
|
160
|
+
daemon does NOT auto-notify — it's an explicit choice.
|
|
161
|
+
|
|
162
|
+
### Error envelope
|
|
163
|
+
|
|
164
|
+
`/exec` extends the direct-mode envelope with delegated-mode fields.
|
|
165
|
+
Discriminator: `body.mode === "delegated"`.
|
|
166
|
+
|
|
167
|
+
| HTTP | `error` | retry? | What to do |
|
|
168
|
+
|---|---|---|---|
|
|
169
|
+
| 400 | `validation_error` / `schema_too_large` | no | Fix the request body. |
|
|
170
|
+
| 409 | `mode_mismatch` | no | Calendar isn't delegated, OR your DM backend matches `delegatedBackend`. Re-read `integrations.md`. |
|
|
171
|
+
| 409 | `precondition` | no | Mode/backend flipped during queue wait. Re-check state. |
|
|
172
|
+
| 429 | `task_quota_exhausted` | no | Daily cap reached. Wait or surface. |
|
|
173
|
+
| 502 | `parse_error` / `schema_violation` | no (daemon already retried once) | Simplify schema. |
|
|
174
|
+
| 502 | `tool_unavailable` | no | No connector tool fits. Surface the gap. |
|
|
175
|
+
| 502 | `tool_failed` | maybe | Connector tool returned an error. Surface verbatim. |
|
|
176
|
+
| 502 | `auth_error` | no | Connector signed out. Re-authenticate. |
|
|
177
|
+
| 502 | `policy_violation` | no | Subprocess attempted an out-of-allowlist tool (anti-injection). |
|
|
178
|
+
| 502 | `loop_aborted` | no | `maxToolCalls` exceeded. Bump or simplify. |
|
|
179
|
+
| 502 | `budget_exhausted` | no | `maxBudgetUsd` exceeded. Caller can raise the cap. |
|
|
180
|
+
| 502 | `post_write_format_failure` | no | Write succeeded; formatting failed. Surface with partial trace. |
|
|
181
|
+
| 503 | `delegated_proxy_busy` | yes | Queue saturated. Backoff and retry once. |
|
|
182
|
+
| 503 | `task_mode_disabled` | no | Operator killed it. Stop. |
|
|
183
|
+
| 504 | `timeout` | yes (1×) | Wall-clock fired. Retry once. |
|
|
184
|
+
| 500 | `subprocess_crashed` | no | Daemon-side defect. Surface and stop. |
|
|
185
|
+
|
|
186
|
+
Always preserve `body.message` verbatim when reporting to the user.
|
|
187
|
+
<!-- /service:calendar -->
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
<!-- service:obsidian -->
|
|
192
|
+
## Obsidian (external vault)
|
|
193
|
+
|
|
194
|
+
**Scope**: this skill targets a **separate** Obsidian vault the user
|
|
195
|
+
maintains alongside this app — e.g. a personal knowledge base. It is
|
|
196
|
+
**not** the agent's own primary management store. The agent's primary
|
|
197
|
+
files (`today.md`, `roadmap.md`, `projects/`, `rules/`, `routines/`,
|
|
198
|
+
`user/`, `agent/`, …) live in the primary vault and are reached via
|
|
199
|
+
`/api/context/*` (see the `context` skill). **Never** use this skill to
|
|
200
|
+
read or write the primary vault.
|
|
201
|
+
|
|
202
|
+
Use this skill when the user asks the agent to look up, append to, or
|
|
203
|
+
create notes inside their external knowledge vault — never for the
|
|
204
|
+
agent's own working state.
|
|
205
|
+
|
|
206
|
+
Full CRUD over the external vault. Requires the Obsidian app running
|
|
207
|
+
(the CLI proxies through it). Omit `.md` extension from paths. All
|
|
208
|
+
writes are Autonomous; the daemon does not DM the owner before/after
|
|
209
|
+
the call. Call `POST /api/notify` yourself when the user would want to
|
|
210
|
+
know.
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
curl -s http://localhost:8321/api/obsidian/status # external vault availability
|
|
214
|
+
curl -s "http://localhost:8321/api/obsidian/search?q=meeting+notes&limit=10" # search external vault
|
|
215
|
+
curl -s http://localhost:8321/api/obsidian/notes/Daily%20Notes/2026-04-06 # read external note
|
|
216
|
+
curl -s -X POST http://localhost:8321/api/obsidian/notes \
|
|
217
|
+
-H 'Content-Type: application/json' \
|
|
218
|
+
-d '{"name": "Meeting Notes 2026-04-02", "content": "# Meeting\n..."}' # create external note (fails if exists)
|
|
219
|
+
curl -s -X PUT http://localhost:8321/api/obsidian/notes/Projects/ProjectA \
|
|
220
|
+
-H 'Content-Type: application/json' -d '{"content": "# Full body"}' # create-or-overwrite external note
|
|
221
|
+
curl -s -X PATCH http://localhost:8321/api/obsidian/notes \
|
|
222
|
+
-H 'Content-Type: application/json' \
|
|
223
|
+
-d '{"file": "Meeting Notes 2026-04-02", "content": "\n- Action item"}' # append to external note
|
|
224
|
+
curl -s -X PATCH http://localhost:8321/api/obsidian/daily \
|
|
225
|
+
-H 'Content-Type: application/json' -d '{"content": "- [ ] Follow up"}' # append to external daily note
|
|
226
|
+
curl -s -X DELETE http://localhost:8321/api/obsidian/notes/Projects/Old # delete from external vault (moves to trash)
|
|
227
|
+
```
|
|
228
|
+
**Endpoint choice**: Read → GET, Create-only → POST, Edit → PUT, Append → PATCH.
|
|
229
|
+
|
|
230
|
+
If the user's request is really about the agent's own state (today, roadmap,
|
|
231
|
+
projects, journal, rules, routines, user profile), switch to the `context`
|
|
232
|
+
skill and the `/api/context/*` endpoints instead.
|
|
233
|
+
<!-- /service:obsidian -->
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
<!-- service:github -->
|
|
238
|
+
## GitHub
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
curl -s http://localhost:8321/api/github/repos # list watched repos
|
|
242
|
+
curl -s "http://localhost:8321/api/github/pulls?state=open" # list PRs
|
|
243
|
+
curl -s -X POST http://localhost:8321/api/github/pulls/comment \
|
|
244
|
+
-H 'Content-Type: application/json' \
|
|
245
|
+
-d '{"owner": "user", "repo": "repo", "pullNumber": 42, "body": "LGTM"}' # comment — Autonomous
|
|
246
|
+
```
|
|
247
|
+
<!-- /service:github -->
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
<!-- service:notion -->
|
|
252
|
+
## Notion
|
|
253
|
+
|
|
254
|
+
Notion operations live in the dedicated `notion` skill — load that when
|
|
255
|
+
the user asks anything Notion-shaped (search, query, read, create,
|
|
256
|
+
update, archive).
|
|
257
|
+
<!-- /service:notion -->
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Recurring Schedules
|
|
262
|
+
|
|
263
|
+
CRUD for repeating agent tasks. Timezone auto-filled from daemon config.
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
curl -s -X POST http://localhost:8321/api/recurring-schedules \
|
|
267
|
+
-H 'Content-Type: application/json' \
|
|
268
|
+
-d '{"taskType": "wake", "description": "Morning inbox triage.", "recurrenceRule": {"frequency": "daily", "time": "09:00"}}'
|
|
269
|
+
curl -s "http://localhost:8321/api/recurring-schedules?enabled=true" # list
|
|
270
|
+
curl -s -X PATCH http://localhost:8321/api/recurring-schedules/1 \
|
|
271
|
+
-H 'Content-Type: application/json' \
|
|
272
|
+
-d '{"recurrenceRule": {"frequency": "weekly", "time": "10:00", "daysOfWeek": [1,3,5]}}'
|
|
273
|
+
curl -s -X PATCH http://localhost:8321/api/recurring-schedules/1 \
|
|
274
|
+
-H 'Content-Type: application/json' -d '{"enabled": false}' # disable
|
|
275
|
+
curl -s -X DELETE http://localhost:8321/api/recurring-schedules/1 # delete
|
|
276
|
+
```
|
|
277
|
+
`recurrenceRule`: `frequency` (daily/weekly/monthly), `time` (HH:MM), `daysOfWeek` (0=Sun..6=Sat, weekly), `daysOfMonth` (1-31, monthly). → Full guide: load `schedule` skill.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## One-Shot Scheduling
|
|
282
|
+
|
|
283
|
+
Schedule a future DM or agent task. Use `<current_time>` to resolve relative times into absolute ISO 8601 with offset.
|
|
284
|
+
|
|
285
|
+
### DM vs Agent Task
|
|
286
|
+
|
|
287
|
+
| Criterion | `/api/schedule/dm` (free) | `/api/schedule` (~$0.03) |
|
|
288
|
+
|---|---|---|
|
|
289
|
+
| Message text knowable now? | Yes | No — needs lookup/decision at execution |
|
|
290
|
+
| Needs API data at execution? | No | Yes |
|
|
291
|
+
| Multi-step action? | No | Yes |
|
|
292
|
+
| Conditional on state that may change? | No | Yes |
|
|
293
|
+
|
|
294
|
+
**Default to DM** — every agent wake-up costs money and context.
|
|
295
|
+
|
|
296
|
+
### Context-loss warning
|
|
297
|
+
|
|
298
|
+
> The wake-up agent has NO memory of why it was scheduled — the `description` field is its only context.
|
|
299
|
+
|
|
300
|
+
Include: **What** (verb + object), **Why** (trigger/reason), **Who/What** (names, IDs, URLs), **Expected output** (what success looks like).
|
|
301
|
+
|
|
302
|
+
Bad: `"Meeting prep"` — which meeting? when? what to prepare? The wake-up agent will skip ambiguous descriptions.
|
|
303
|
+
|
|
304
|
+
### POST /api/schedule/dm — Pre-composed DM
|
|
305
|
+
```bash
|
|
306
|
+
curl -s -X POST http://localhost:8321/api/schedule/dm \
|
|
307
|
+
-H 'Content-Type: application/json' \
|
|
308
|
+
-d '{"time": "2026-04-06T16:00:00-04:00", "message": "Reminder: Design review in 30 min.", "platform": "slack"}'
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### POST /api/schedule — Agent task
|
|
312
|
+
```bash
|
|
313
|
+
curl -s -X POST http://localhost:8321/api/schedule \
|
|
314
|
+
-H 'Content-Type: application/json' \
|
|
315
|
+
-d '{"time": "2026-04-06T16:00:00-04:00", "taskType": "wake", "description": "Check PR #42 status and notify user.", "model": "sonnet", "taskContext": {"scheduledBy": "dm_conversation"}}'
|
|
316
|
+
```
|
|
317
|
+
Fields: `time` (required), `taskType` (`wake`), `description` (required, min 20 chars), `model` (optional), `taskContext` (optional metadata).
|
|
318
|
+
|
|
319
|
+
### Manage pending items
|
|
320
|
+
```bash
|
|
321
|
+
curl -s "http://localhost:8321/api/schedule?status=pending" # list
|
|
322
|
+
curl -s -X PATCH http://localhost:8321/api/schedule/42 \
|
|
323
|
+
-H 'Content-Type: application/json' -d '{"time": "2026-04-06T17:00:00-04:00"}' # edit
|
|
324
|
+
curl -s -X DELETE http://localhost:8321/api/schedule/42 # cancel
|
|
325
|
+
```
|
|
326
|
+
Editable: `time`, `description`, `message` (dm only), `model`, `taskContext`. Only `pending` items.
|
|
327
|
+
|
|
328
|
+
### Time discipline
|
|
329
|
+
- Absolute ISO 8601 with offset required — no relative times.
|
|
330
|
+
- Do not schedule during quiet hours (default 22:00–08:00, configurable) unless critical.
|
|
331
|
+
- Maximum 5 wake-ups per execution.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Skills Management
|
|
336
|
+
|
|
337
|
+
User-authored skills: `~/.personal-agent/skills/{slug}/SKILL.md`. Built-in skills are read-only (403). Slug: lowercase kebab-case `[a-z0-9][a-z0-9-]*`, 1–64 chars.
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
curl -s http://localhost:8321/api/skills # list all
|
|
341
|
+
curl -s http://localhost:8321/api/skills/todo-digest # read one
|
|
342
|
+
curl -s -X POST http://localhost:8321/api/skills \
|
|
343
|
+
-H 'Content-Type: application/json' \
|
|
344
|
+
-d '{"name": "todo-digest", "description": "Summarize today.md", "content": "# TODO Digest\n...", "allowedTools": ["Bash(curl *)", "Read"]}'
|
|
345
|
+
curl -s -X PUT http://localhost:8321/api/skills/todo-digest \
|
|
346
|
+
-H 'Content-Type: application/json' -d '{"description": "New description"}' # update
|
|
347
|
+
curl -s -X DELETE http://localhost:8321/api/skills/todo-digest # delete
|
|
348
|
+
```
|
|
349
|
+
Always `GET /api/skills` before creating (check name collisions). **Omit frontmatter** from `content` — the API injects it.
|