@aitne-sh/aitne 0.1.6 → 0.1.8
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 +195 -1029
- package/agent-assets/agent-profiles/_safety.md +49 -17
- package/agent-assets/agent-profiles/profile-importer.md +1 -1
- package/agent-assets/agent-profiles/routine.md +4 -3
- package/agent-assets/docs/concepts/agent-day.md +6 -1
- package/agent-assets/docs/concepts/auth-health.md +10 -1
- package/agent-assets/docs/concepts/backends-and-tiers.md +74 -40
- package/agent-assets/docs/concepts/costs-and-quotas.md +25 -5
- package/agent-assets/docs/concepts/delegated-mode.md +147 -68
- package/agent-assets/docs/concepts/memory-model.md +9 -4
- package/agent-assets/docs/concepts/observations.md +13 -1
- package/agent-assets/docs/concepts/process-keys.md +20 -5
- package/agent-assets/docs/concepts/routines.md +38 -20
- package/agent-assets/docs/concepts/safety-model.md +30 -13
- package/agent-assets/docs/concepts/skills.md +12 -7
- package/agent-assets/docs/features/integrations/calendar.md +1 -1
- package/agent-assets/docs/features/integrations/git.md +2 -2
- package/agent-assets/docs/features/integrations/github.md +9 -2
- package/agent-assets/docs/features/integrations/mail.md +1 -1
- package/agent-assets/docs/features/integrations/notion.md +34 -6
- package/agent-assets/docs/features/integrations/obsidian.md +7 -2
- package/agent-assets/docs/features/lifestyle/git.md +4 -7
- package/agent-assets/docs/features/lifestyle/receipts.md +17 -2
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +15 -0
- package/agent-assets/docs/features/lifestyle/travel-time.md +7 -1
- package/agent-assets/docs/features/memory-files/agent-journal.md +2 -2
- package/agent-assets/docs/features/memory-files/projects.md +6 -0
- package/agent-assets/docs/features/memory-files/roadmap.md +5 -0
- package/agent-assets/docs/features/memory-files/today.md +1 -0
- package/agent-assets/docs/features/memory-files/user-profile.md +6 -0
- package/agent-assets/docs/features/messaging/bang-commands.md +20 -10
- package/agent-assets/docs/features/messaging/discord.md +12 -1
- package/agent-assets/docs/features/messaging/overview.md +10 -7
- package/agent-assets/docs/features/messaging/slack.md +13 -1
- package/agent-assets/docs/features/messaging/telegram.md +7 -1
- package/agent-assets/docs/features/messaging/whatsapp.md +12 -1
- package/agent-assets/docs/features/operations/activity-and-conversations.md +2 -2
- package/agent-assets/docs/features/operations/approvals.md +6 -0
- package/agent-assets/docs/features/operations/backend-routing.md +7 -0
- package/agent-assets/docs/features/operations/cost-tracking.md +6 -0
- package/agent-assets/docs/features/operations/notifications.md +6 -0
- package/agent-assets/docs/features/operations/schedule-approaching.md +22 -9
- package/agent-assets/docs/features/routines/custom-routines.md +10 -4
- package/agent-assets/docs/features/routines/evening-review.md +1 -1
- package/agent-assets/docs/features/routines/hourly-check.md +1 -1
- package/agent-assets/docs/features/routines/morning-routine.md +24 -15
- package/agent-assets/docs/features/routines/weekly-review.md +38 -12
- package/agent-assets/docs/features/wiki/commands.md +11 -0
- package/agent-assets/docs/features/wiki/overview.md +13 -3
- package/agent-assets/docs/getting-started/01-what-is-this.md +32 -11
- package/agent-assets/docs/getting-started/02-first-steps.md +17 -4
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +21 -11
- package/agent-assets/docs/getting-started/04-first-day.md +14 -0
- package/agent-assets/docs/glossary.md +65 -12
- package/agent-assets/docs/guides/add-a-custom-routine.md +12 -0
- package/agent-assets/docs/guides/backup-and-restore.md +16 -2
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +6 -0
- package/agent-assets/docs/guides/build-your-wiki.md +14 -0
- package/agent-assets/docs/guides/change-which-model-handles-x.md +7 -0
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +16 -0
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +6 -0
- package/agent-assets/docs/guides/import-knowledge-file.md +11 -0
- package/agent-assets/docs/guides/install-and-run.md +20 -4
- package/agent-assets/docs/guides/maintain-wiki-health.md +6 -0
- package/agent-assets/docs/guides/migrate-machines.md +13 -1
- package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +9 -0
- package/agent-assets/docs/guides/pause-the-agent.md +12 -4
- package/agent-assets/docs/guides/reinstall-cleanly.md +19 -4
- package/agent-assets/docs/guides/setup-wizard.md +20 -9
- package/agent-assets/docs/guides/switch-default-backend.md +10 -1
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +5 -0
- package/agent-assets/docs/reference/api.md +29 -1
- package/agent-assets/docs/reference/cli-commands.md +22 -3
- package/agent-assets/docs/reference/config.md +37 -5
- package/agent-assets/docs/reference/disallowed-tools.md +13 -0
- package/agent-assets/docs/reference/keyboard-shortcuts.md +13 -0
- package/agent-assets/docs/reference/process-keys.md +70 -20
- package/agent-assets/docs/reference/skills.md +27 -9
- package/agent-assets/docs/troubleshooting/auth-failed.md +7 -2
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +13 -1
- package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +10 -0
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +11 -0
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +9 -4
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +12 -0
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -1
- package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +5 -0
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +5 -0
- package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
- package/agent-assets/optimizer-skills/skill-curation/SKILL.md +2 -2
- package/agent-assets/skills/agent-actions/SKILL.md +122 -0
- package/agent-assets/skills/attach/SKILL.md +1 -2
- package/agent-assets/skills/context/SKILL.md +36 -454
- package/agent-assets/skills/context/references/api.md +220 -0
- package/agent-assets/skills/context/references/required-frontmatter.md +73 -0
- package/agent-assets/skills/context/references/snapshot-files.md +103 -0
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +1 -1
- package/agent-assets/skills/docs-search/SKILL.md +13 -13
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +5 -7
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +5 -7
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +5 -7
- package/agent-assets/skills/external-services/SKILL.md +6 -259
- package/agent-assets/skills/external-services/SKILL.native.claude.md +1 -2
- package/agent-assets/skills/external-services/SKILL.native.codex.md +1 -2
- package/agent-assets/skills/external-services/SKILL.native.gemini.md +1 -2
- package/agent-assets/skills/external-services/references/calendar-apple.md +97 -0
- package/agent-assets/skills/external-services/references/calendar-google.md +72 -0
- package/agent-assets/skills/external-services/references/calendar-outlook.md +36 -0
- package/agent-assets/skills/external-services/references/github.md +17 -0
- package/agent-assets/skills/external-services/references/obsidian.md +49 -0
- package/agent-assets/skills/external-services/references/skills-crud.md +27 -0
- package/agent-assets/skills/gmail-lifestyle/SKILL.md +224 -0
- package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +93 -0
- package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +75 -0
- package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +59 -0
- package/agent-assets/skills/mail/SKILL.delegated.claude.md +1 -1
- package/agent-assets/skills/mail/SKILL.delegated.codex.md +1 -1
- package/agent-assets/skills/mail/SKILL.delegated.gemini.md +1 -1
- package/agent-assets/skills/mail/SKILL.md +9 -114
- package/agent-assets/skills/mail/SKILL.native.claude.md +1 -1
- package/agent-assets/skills/mail/SKILL.native.codex.md +1 -1
- package/agent-assets/skills/mail/SKILL.native.gemini.md +1 -1
- package/agent-assets/skills/mail/references/api.md +108 -0
- package/agent-assets/skills/mail/references/examples.md +70 -0
- package/agent-assets/skills/mail/references/providers.md +8 -8
- package/agent-assets/skills/managed-tasks/SKILL.md +472 -0
- package/agent-assets/skills/managed-tasks/references/errors.md +70 -0
- package/agent-assets/skills/managed-tasks/references/output-path.md +75 -0
- package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +86 -0
- package/agent-assets/skills/management-policy/SKILL.md +33 -105
- package/agent-assets/skills/management-policy/references/policy-workflow.md +101 -0
- package/agent-assets/skills/notify/SKILL.md +6 -78
- package/agent-assets/skills/notify/references/priority.md +60 -0
- package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
- package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
- package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
- package/agent-assets/skills/notion/SKILL.md +6 -10
- package/agent-assets/skills/notion/SKILL.native.claude.md +1 -2
- package/agent-assets/skills/notion/SKILL.native.codex.md +1 -2
- package/agent-assets/skills/notion/SKILL.native.gemini.md +1 -2
- package/agent-assets/skills/observations/SKILL.md +1 -6
- package/agent-assets/skills/project-doc/SKILL.md +1 -5
- package/agent-assets/skills/reading/SKILL.md +2 -2
- package/agent-assets/skills/roadmap/SKILL.md +37 -135
- package/agent-assets/skills/roadmap/references/api.md +100 -0
- package/agent-assets/skills/roadmap/references/cross-check.md +73 -0
- package/agent-assets/skills/roadmap/references/migration.md +56 -0
- package/agent-assets/skills/roadmap/references/preparation-timeline.md +2 -2
- package/agent-assets/skills/schedule/SKILL.md +52 -88
- package/agent-assets/skills/schedule/references/batch.md +93 -0
- package/agent-assets/skills/schedule/references/errors.md +214 -0
- package/agent-assets/skills/schedule/references/model-selection.md +96 -0
- package/agent-assets/skills/schedule/references/recurrence-rule.md +86 -0
- package/agent-assets/skills/schedule/references/recurring.md +185 -0
- package/agent-assets/skills/scheduled-managed-task/SKILL.md +13 -15
- package/agent-assets/skills/today/SKILL.md +27 -57
- package/agent-assets/skills/today/references/agent-plan-lifecycle.md +113 -0
- package/agent-assets/skills/user-interview/SKILL.md +12 -59
- package/agent-assets/skills/user-interview/references/op-briefing.md +51 -0
- package/agent-assets/skills/user-interview/references/op-morning.md +59 -0
- package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
- package/agent-assets/skills/user-profile/SKILL.md +43 -63
- package/agent-assets/skills/user-profile/references/character-preferences.md +83 -0
- package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +28 -0
- package/agent-assets/skills/wiki/wiki-ask/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-compile/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-connect/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-graduate/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-lint/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-trace/SKILL.md +0 -1
- package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +0 -1
- package/agent-assets/system-prompts/routine-fetch-window.md +68 -0
- package/agent-assets/system-prompts/skill-index-instruction.md +26 -0
- package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +18 -11
- package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +16 -9
- package/agent-assets/task-flows/_partials/capture-user-info.md +24 -0
- package/agent-assets/task-flows/_partials/confirm-subflow.md +68 -0
- package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +35 -0
- package/agent-assets/task-flows/_partials/dm-intent.project.md +391 -0
- package/agent-assets/task-flows/_partials/mail-acquire.gmail.md +20 -11
- package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +17 -9
- package/agent-assets/task-flows/_partials/notion-acquire.notion.md +18 -12
- package/agent-assets/task-flows/knowledge.import.md +1 -1
- package/agent-assets/task-flows/message.received.dm.md +13 -15
- package/agent-assets/task-flows/message.received.dm_first.md +10 -14
- package/agent-assets/task-flows/routine.custom.md +3 -1
- package/agent-assets/task-flows/routine.evening_review.md +39 -163
- package/agent-assets/task-flows/routine.fetch_window.md +17 -12
- package/agent-assets/task-flows/routine.hourly_check.md +16 -8
- package/agent-assets/task-flows/routine.hourly_check.triage.md +1 -1
- package/agent-assets/task-flows/routine.monthly_review.md +46 -4
- package/agent-assets/task-flows/routine.morning_routine_journal.md +113 -0
- package/agent-assets/task-flows/routine.morning_routine_today.md +673 -0
- package/agent-assets/task-flows/routine.roadmap_refresh.md +60 -15
- package/agent-assets/task-flows/routine.user_profile_sweep.md +9 -10
- package/agent-assets/task-flows/routine.weekly_review.md +285 -70
- package/agent-assets/task-flows/scheduled.dm.md +8 -8
- package/agent-assets/task-flows/scheduled.task.md +5 -5
- package/agent-assets/task-flows/setup.initial.md +165 -245
- package/agent-assets/task-flows/wiki.ingest_url.md +1 -1
- package/agent-assets/templates/_manifest.json +7 -7
- package/agent-assets/templates/dossiers/_index.md +1 -1
- package/agent-assets/templates/rules/journal-format.md +145 -38
- package/agent-assets/templates/user/expertise.md +4 -2
- package/agent-assets/templates/user/goals.md +4 -2
- package/agent-assets/templates/user/people.md +8 -2
- package/agent-assets/templates/user/personal.md +4 -2
- package/agent-assets/templates/user/work.md +4 -2
- package/bin/aitne.mjs +8 -1
- package/package.json +4 -4
- package/scripts/commands/doctor.mjs +52 -0
- package/scripts/commands/run-now.mjs +202 -0
- package/scripts/commands/verify.mjs +264 -0
- package/agent-assets/docs/features/routines/monthly-review.md +0 -65
- package/agent-assets/skills/management-task-modify/SKILL.md +0 -203
- package/agent-assets/skills/management-task-register/SKILL.md +0 -330
- package/agent-assets/skills/management-task-stop/SKILL.md +0 -166
- package/agent-assets/skills/receipts/SKILL.md +0 -134
- package/agent-assets/skills/travel/SKILL.md +0 -132
- package/agent-assets/skills/travel-time/SKILL.md +0 -158
- package/agent-assets/task-flows/routine.morning_routine.md +0 -322
- package/agent-assets/task-flows/routine.morning_routine_initial.md +0 -204
package/README.md
CHANGED
|
@@ -2,1216 +2,382 @@
|
|
|
2
2
|
|
|
3
3
|
# Aitne
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
**A local-first, proactive personal AI agent that runs continuously on your own machine — and gets smarter about *you* every day.**
|
|
5
|
+
**A local-first, proactive personal AI agent.**
|
|
6
|
+
A long-running TypeScript daemon watches your calendar, mail, repos, and notes — and acts on its own. Your AI of choice (Claude / Codex / Gemini; OpenCode coming soon) is the brain; Aitne is the nervous system.
|
|
8
7
|
|
|
9
8
|
[](https://www.npmjs.com/package/@aitne-sh/aitne)
|
|
10
9
|
[](./LICENSE)
|
|
11
10
|
[](https://nodejs.org)
|
|
11
|
+
[](#status)
|
|
12
12
|
[](#platform-support)
|
|
13
|
-
[](#multi-backend)
|
|
14
13
|
|
|
15
14
|
```bash
|
|
16
15
|
npm install -g @aitne-sh/aitne@latest
|
|
17
16
|
aitne start
|
|
18
17
|
```
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## The concept
|
|
25
|
-
|
|
26
|
-
ChatGPT and Claude are *reactive* — they wait for you to type. **Aitne is proactive.** It's a tiny daemon that lives on your laptop, watches your calendar, mail, repos and notes, and acts on its own — drafting your morning plan at 04:00, surfacing the email you forgot, nudging you about the PR your teammate is waiting on, and weaving everything into a Markdown journal you actually own.
|
|
27
|
-
|
|
28
|
-
```mermaid
|
|
29
|
-
flowchart LR
|
|
30
|
-
subgraph WORLD["Your digital life"]
|
|
31
|
-
direction TB
|
|
32
|
-
W1["💬 Messages"]
|
|
33
|
-
W2["📅 Calendar"]
|
|
34
|
-
W3["📧 Mail"]
|
|
35
|
-
W4["📦 Git"]
|
|
36
|
-
W5["📓 Notes"]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
subgraph LOCAL["💻 Your laptop — Aitne"]
|
|
40
|
-
direction TB
|
|
41
|
-
DAEMON["⚙️ Daemon<br/>(always-on)"]
|
|
42
|
-
BRAIN["🧠 Your AI<br/>(Claude · Codex · Gemini)"]
|
|
43
|
-
MEMORY["📝 Markdown memory<br/>(plain files you own)"]
|
|
44
|
-
DAEMON <--> BRAIN
|
|
45
|
-
BRAIN <--> MEMORY
|
|
46
|
-
DAEMON <--> MEMORY
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
YOU["📱 You<br/>Slack · Telegram · Discord<br/>WhatsApp · Web chat"]
|
|
50
|
-
|
|
51
|
-
WORLD <--> DAEMON
|
|
52
|
-
DAEMON <--> YOU
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Three things make Aitne different:
|
|
19
|
+

|
|
56
20
|
|
|
57
|
-
|
|
58
|
-
|---|---|
|
|
59
|
-
| 🌱 **It compounds.** | Every day, every DM, every reaction emoji shapes the agent's understanding of *you*. After a month it sounds like you. After a year it knows what you forgot last quarter. |
|
|
60
|
-
| 🗣️ **You manage it in plain language.** | "Don't ping me before 9am." "Remember my partner's birthday." "Stop running hourly checks on weekends." Aitne maps your words to settings, schedules, and profile updates — automatically. |
|
|
61
|
-
| 🔌 **It rides on what you already have.** | Your Claude Code skills, your Codex config, your Gemini settings, your custom MCP servers — Aitne loads them into every session. No re-configuring. No re-buying. |
|
|
21
|
+
</div>
|
|
62
22
|
|
|
63
23
|
---
|
|
64
24
|
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
> A real walkthrough of one user's Tuesday.
|
|
68
|
-
|
|
69
|
-
**04:00 — While you sleep.** Aitne reads yesterday's handoff, your calendar for today, the last 24 hours of mail across your accounts, new commits in your repos, and the pending observations from Notion. It generates `today.md` and queues a Morning Briefing DM for after quiet hours end.
|
|
70
|
-
|
|
71
|
-
**07:30 — Slack DM lands as you grab coffee:**
|
|
72
|
-
> Good morning. 3 things to flag:
|
|
73
|
-
> • **Sarah's PR (#487)** needs your review — she's been blocked since Friday
|
|
74
|
-
> • **Sales call with Acme @ 14:00** — leaving home by 13:25 (12-min commute)
|
|
75
|
-
> • **IRS reminder from Friday** — deadline is *tomorrow*
|
|
76
|
-
>
|
|
77
|
-
> Today: 2 meetings, 4 tasks. Light day. Reply `end` to close, or just talk to me.
|
|
78
|
-
|
|
79
|
-
**09:15 — You DM Aitne:** *"Tell Sarah I'll review by 11. And book lunch with Mark on Thursday — somewhere near his office."*
|
|
80
|
-
Aitne drafts the Slack reply to Sarah, finds 3 lunch slots Thursday, checks Mark's last 5 lunch venues from your `people.md`, suggests Tartine. You confirm. Done.
|
|
81
|
-
|
|
82
|
-
**11:30 — Hourly check fires.** A new commit in your repo modified the API contract you're about to ship. Aitne adds a note to `Agent Notes` on `today.md` and DMs once: *"⚠️ Heads up — `auth.ts:84` was just changed by @Yuki. Want me to summarize the diff?"*
|
|
83
|
-
|
|
84
|
-
**13:45 — Calendar approach.** *"Sales call in 15 min. Acme is the warm lead from last Tuesday — they mentioned wanting webhook integration. Brief is in `projects/acme.md`."*
|
|
85
|
-
|
|
86
|
-
**15:45 — You forward a hotel confirmation email to Aitne.** It extracts dates, address, confirmation number into `travel_bookings`, saves the PDF to `~/.personal-agent/context/receipts/2026/05/`, and adds the trip to next week's morning briefing.
|
|
87
|
-
|
|
88
|
-
**18:00 — Evening review.** Aitne notices you didn't reply to two emails from this morning. They get carried to tomorrow's `today.md`. It also sees you wrote *"shorter please"* twice today, classifies that as a tone-class signal, and silently shortens its replies going forward.
|
|
89
|
-
|
|
90
|
-
**Friday 18:30 — Weekly review.**
|
|
91
|
-
> Week of 2026-05-04: shipped 3 PRs, 2 deferred. Open loops: hotel cancellation, Acme follow-up. Focus next week: launch prep. Heads up: you've worked past 22:00 every day this week — should I clear Friday afternoon?
|
|
25
|
+
## Why Aitne
|
|
92
26
|
|
|
93
|
-
|
|
27
|
+
- **Proactive, not reactive.** Drafts your morning plan at 04:00. Surfaces the email you forgot. Nudges you about the PR your teammate is waiting on. You don't have to open an app.
|
|
28
|
+
- **Local-first.** Daemon binds to `127.0.0.1` only. Secrets in the OS keychain. Memory in plain Markdown under `~/.personal-agent/`. No telemetry, no cloud state.
|
|
29
|
+
- **Multi-backend.** Bring Claude Code, Codex CLI, or Gemini CLI — or all three. Per-task tier routing decides which one runs for each kind of work. (OpenCode is wired internally and ships as preview-only in this release.)
|
|
30
|
+
- **Compounds.** Every DM, every correction shapes how Aitne thinks about you. The model doesn't change — the context does.
|
|
94
31
|
|
|
95
32
|
---
|
|
96
33
|
|
|
97
|
-
##
|
|
98
|
-
|
|
99
|
-
A non-exhaustive list. Click any group to expand.
|
|
34
|
+
## Highlights
|
|
100
35
|
|
|
101
36
|
<details>
|
|
102
|
-
<summary><b
|
|
37
|
+
<summary><b>Time, calendar, travel</b></summary>
|
|
103
38
|
|
|
104
39
|
- Auto-generate `today.md` every morning with your real schedule
|
|
105
|
-
- 15-min approach reminders for every
|
|
106
|
-
-
|
|
107
|
-
- Auto-extract flight, hotel,
|
|
108
|
-
- Surface tomorrow's itinerary in the morning briefing
|
|
109
|
-
- "What time should I leave for my next meeting?" — answers with live traffic
|
|
40
|
+
- 15-min approach reminders for every event, with travel time pre-computed via Google Maps
|
|
41
|
+
- Find a 30-min slot across multiple calendars — Aitne checks freebusy and replies with options
|
|
42
|
+
- Auto-extract flight, hotel, train confirmations from email into a structured travel timeline
|
|
110
43
|
</details>
|
|
111
44
|
|
|
112
45
|
<details>
|
|
113
|
-
<summary><b
|
|
46
|
+
<summary><b>Mail across every account</b></summary>
|
|
114
47
|
|
|
115
48
|
- Unified inbox across Gmail, Outlook, Yahoo, and iCloud (OAuth or app-password / IMAP)
|
|
116
|
-
- Local FTS5 full-text search across
|
|
117
|
-
- Auto-classify, label,
|
|
118
|
-
-
|
|
119
|
-
- Forwarded receipts → auto-extracted to a structured `receipts` table tagged with category, vendor, amount
|
|
120
|
-
- Daily digest of unread mail in the morning briefing
|
|
49
|
+
- Local FTS5 full-text search across every account
|
|
50
|
+
- Auto-classify, label, archive, and draft replies in your style
|
|
51
|
+
- Forwarded receipts auto-extract into a structured receipts table
|
|
121
52
|
- IMAP IDLE for near-real-time delivery; PDF/image attachments are extracted and indexed
|
|
122
53
|
</details>
|
|
123
54
|
|
|
124
55
|
<details>
|
|
125
|
-
<summary><b
|
|
56
|
+
<summary><b>Knowledge: Obsidian, Notion, your own wiki</b></summary>
|
|
126
57
|
|
|
127
58
|
- Use your existing Obsidian vault as Aitne's primary memory store — wiki-links keep working
|
|
128
|
-
- Append to your daily note via the official Obsidian CLI
|
|
129
|
-
- Full Notion page
|
|
130
|
-
-
|
|
131
|
-
- Auto-link new notes to existing concepts ("this is related to your `agent-architecture.md` from March")
|
|
132
|
-
</details>
|
|
133
|
-
|
|
134
|
-
<details>
|
|
135
|
-
<summary><b>🧠 Build a personal wiki from anything you DM</b></summary>
|
|
136
|
-
|
|
137
|
-
- Send a URL with `!ingest https://...` — the agent fetches, summarises, and saves a raw note in `10_raw/`
|
|
138
|
-
- Run `!compile` to synthesise raw notes into linked wiki articles in `20_wiki/` with an auto-maintained `_index.md`
|
|
139
|
-
- `!compile --preview` shows added / modified / unchanged pages plus cost and ETA *before* you spend tokens
|
|
140
|
-
- `!compile full` rebuilds everything — cost-gated, with a dashboard approval queue and an optional git pre-compile snapshot for external vaults
|
|
59
|
+
- Append to your daily note via the official Obsidian CLI
|
|
60
|
+
- Full Notion page and database CRUD
|
|
61
|
+
- DM `!ingest <url>` to capture a source, `!compile` to synthesize raw notes into linked wiki articles
|
|
141
62
|
- `!ask <question>` answers from your own wiki and writes the cited reply to `30_outputs/`
|
|
142
|
-
- `!lint`
|
|
143
|
-
-
|
|
144
|
-
- Run multiple workspaces (`!ingest @research ...`, `!compile @ops full`) — the default workspace falls through when the `@` token is omitted
|
|
145
|
-
- Workspaces can be internal (`~/.personal-agent/wiki/`) or an external Obsidian vault you already keep
|
|
63
|
+
- `!lint`, `!trace`, `!connect` for vault health, idea evolution, cross-domain bridges
|
|
64
|
+
- Multiple workspaces (`!ingest @research ...`) — internal or any number of external Obsidian vaults
|
|
146
65
|
</details>
|
|
147
66
|
|
|
148
67
|
<details>
|
|
149
|
-
<summary><b
|
|
68
|
+
<summary><b>Code, Git, GitHub</b></summary>
|
|
150
69
|
|
|
151
70
|
- Local Git: `git log`, `git diff`, `git show` exposed via daemon proxy
|
|
152
|
-
- GitHub: PR lists, comments, issues, webhook receivers (HMAC-verified)
|
|
71
|
+
- GitHub: PR lists, comments, issues, webhook receivers (HMAC-SHA256 verified)
|
|
153
72
|
- Per-repo cron triggers — "every Monday at 09:00, summarize merged PRs into `projects/<repo>.md`"
|
|
154
|
-
- "Why did this build break?" — agent reads CI status + diff + traces
|
|
155
73
|
- Auto-detect when a coworker modified a file you're about to ship
|
|
156
74
|
- Unified Repositories: one row pairs a local clone with a GitHub remote; the doctor flags drift
|
|
157
75
|
</details>
|
|
158
76
|
|
|
159
77
|
<details>
|
|
160
|
-
<summary><b
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
- "
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
<details>
|
|
170
|
-
<summary><b>📚 Reading, lifestyle, voice</b></summary>
|
|
171
|
-
|
|
172
|
-
- Import Kindle highlights, build a reading-taste profile
|
|
173
|
-
- Friday book recommendation DM based on your taste
|
|
174
|
-
- Receipts auto-organized by month into your vault
|
|
175
|
-
- Travel itinerary roll-up surfaced before each trip
|
|
176
|
-
- **Voice attachments** — send a voice memo, get a Whisper-transcribed message (opt-in, runs locally)
|
|
177
|
-
</details>
|
|
178
|
-
|
|
179
|
-
<details>
|
|
180
|
-
<summary><b>🤖 Self-management & automation</b></summary>
|
|
181
|
-
|
|
182
|
-
- Tell it to remember things in plain language ("I'm allergic to nuts")
|
|
183
|
-
- Tell it to forget things ("delete that note about my old job")
|
|
184
|
-
- Tell it to change schedules ("don't run hourly checks on weekends")
|
|
185
|
-
- Tell it to change tone ("be more concise, no preamble")
|
|
186
|
-
- Custom routines on any cron schedule with free-form prompts
|
|
187
|
-
- Self-scheduled wakeups — agent decides when to check on something
|
|
78
|
+
<summary><b>Self-management via natural language</b></summary>
|
|
79
|
+
|
|
80
|
+
- "Don't run hourly checks on weekends" — patches the cron window
|
|
81
|
+
- "Remember my partner's birthday is March 14" — appends to `user/profile.md`
|
|
82
|
+
- "I prefer concise replies — no preamble" — updates the agent's `character` field
|
|
83
|
+
- "Email me a summary every Friday at 5pm" — creates a recurring schedule
|
|
84
|
+
- "Switch to Codex for code reviews" — flips the per-process backend mapping
|
|
85
|
+
- Every change is journaled to `agent_actions` — audit anything via `aitne audit`
|
|
188
86
|
</details>
|
|
189
87
|
|
|
190
88
|
<details>
|
|
191
|
-
<summary><b
|
|
89
|
+
<summary><b>Bring your own toolkit</b></summary>
|
|
192
90
|
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
91
|
+
- Your `~/.claude/skills`, `~/.codex/config.toml`, and `~/.gemini/` settings are loaded on session init (`~/.opencode/` is recognised but its executor is coming soon)
|
|
92
|
+
- Custom MCP servers materialize into every per-session workdir
|
|
93
|
+
- Aitne layers its persona on top of your existing config — nothing gets overwritten
|
|
94
|
+
- Voice attachments — opt-in local Whisper transcription via `ffmpeg-static` + `@huggingface/transformers`
|
|
197
95
|
</details>
|
|
198
96
|
|
|
199
97
|
---
|
|
200
98
|
|
|
201
|
-
##
|
|
202
|
-
|
|
203
|
-
Every signal Aitne sees flows through the same pipeline: capture → short-term → long-term → injected back into every future conversation.
|
|
204
|
-
|
|
205
|
-
```mermaid
|
|
206
|
-
flowchart TB
|
|
207
|
-
subgraph SOURCES["📥 Sources"]
|
|
208
|
-
direction LR
|
|
209
|
-
S1["💬 messages"]
|
|
210
|
-
S2["📅 calendar"]
|
|
211
|
-
S3["📧 mail"]
|
|
212
|
-
S4["📦 git/github"]
|
|
213
|
-
S5["📓 obsidian/notion"]
|
|
214
|
-
S6["✋ you editing<br/>files by hand"]
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
OB["⚙️ Observers & adapters<br/>(WebSocket · IDLE · polling)"]
|
|
218
|
-
|
|
219
|
-
subgraph SHORT["🟡 Short-term memory"]
|
|
220
|
-
direction LR
|
|
221
|
-
ST1[("SQLite<br/>observations<br/>messages<br/>actions")]
|
|
222
|
-
ST2["today.md<br/>(working view,<br/>always injected)"]
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
subgraph LONG["🟢 Long-term memory (Markdown)"]
|
|
226
|
-
direction TB
|
|
227
|
-
LT1["user/profile.md<br/>work · expertise<br/>people · goals"]
|
|
228
|
-
LT2["projects/*.md<br/>roadmap.md"]
|
|
229
|
-
LT3["daily/YYYY-MM-DD.md<br/>↓<br/>weekly/YYYY-Www.md<br/>↓<br/>monthly/YYYY-MM.md"]
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
AI(("🧠 Next session<br/>(any backend,<br/>any platform)"))
|
|
233
|
-
|
|
234
|
-
SOURCES --> OB
|
|
235
|
-
OB --> ST1
|
|
236
|
-
ST1 -- "hourly check<br/>aggregates" --> ST2
|
|
237
|
-
ST2 -- "evening review<br/>condenses" --> LT3
|
|
238
|
-
ST2 -- "patterns identified" --> LT1
|
|
239
|
-
ST2 -- "project-tagged<br/>updates" --> LT2
|
|
240
|
-
LT3 -- "Friday roll-up" --> LT3
|
|
241
|
-
LT3 -- "month-end roll-up" --> LT3
|
|
242
|
-
|
|
243
|
-
LT1 -. "always injected" .-> AI
|
|
244
|
-
ST2 -. "always injected" .-> AI
|
|
245
|
-
LT2 -. "morning + evening" .-> AI
|
|
246
|
-
LT3 -. "recalled when relevant" .-> AI
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
**Key properties:**
|
|
250
|
-
|
|
251
|
-
- **Plain Markdown.** You can `cat`, `vim`, `obsidian`, or `cp` any of these files. There is no proprietary format. Uninstall and the memory is still yours.
|
|
252
|
-
- **Layered retention.** `today.md` rotates to `yesterday.md` once per agent-day. `daily/` files are persistent by design (synthesized journal). `weekly/` is pruned after 1 year. `agent/journal.md` keeps the most recent ~12 weekly + 24 monthly sections. SQLite-backed history (messages, agent_actions) is pruned after 90 days.
|
|
253
|
-
- **Always-injected context.** Every session starts with `user/profile.md` + `rules/management.md` + `today.md` already loaded — the agent never has to "search for context."
|
|
254
|
-
- **You can always intervene.** Edit any file by hand. The agent picks up your changes on the next routine.
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Compounding intelligence
|
|
259
|
-
|
|
260
|
-
The longer you use it, the better it gets. Not because the model improves — because *the context does*.
|
|
261
|
-
|
|
262
|
-
```mermaid
|
|
263
|
-
graph LR
|
|
264
|
-
D1["📆 <b>Day 1</b><br/>Empty profile<br/>Generic answers<br/>Asks who's Sarah"]
|
|
265
|
-
W1["📅 <b>Week 1</b><br/>Calendar synced<br/>People dictionary<br/>Mail patterns ID'd"]
|
|
266
|
-
M1["🌙 <b>Month 1</b><br/>Profile auto-filled<br/>Tone matches you<br/>Recurring tasks tracked"]
|
|
267
|
-
M3["📈 <b>Month 3</b><br/>Full project map<br/>Knows your peers<br/>Proactive nudges"]
|
|
268
|
-
Y1["🎯 <b>Year 1</b><br/>Anticipates needs<br/>Recalls Q1 context<br/>You can't go back"]
|
|
269
|
-
|
|
270
|
-
D1 -->|implicit feedback| W1
|
|
271
|
-
W1 -->|evening review| M1
|
|
272
|
-
M1 -->|project tracking| M3
|
|
273
|
-
M3 -->|long-term memory| Y1
|
|
274
|
-
|
|
275
|
-
style D1 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
|
|
276
|
-
style W1 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
|
|
277
|
-
style M1 fill:#dbeafe,stroke:#3b82f6,stroke-width:2px
|
|
278
|
-
style M3 fill:#dcfce7,stroke:#22c55e,stroke-width:2px
|
|
279
|
-
style Y1 fill:#dcfce7,stroke:#22c55e,stroke-width:3px
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
### The implicit feedback loop
|
|
283
|
-
|
|
284
|
-
Every interaction shapes Aitne's understanding of you, *implicitly*. No buttons. No surveys. Just talk to it.
|
|
285
|
-
|
|
286
|
-
The Signal Detector tags each turn for **tone-class signals** (corrections like "be shorter", "no preamble") and **attribute-class signals** (durable facts like "I'm allergic to nuts"). The Evening Review interprets the raw signals on the next pass:
|
|
287
|
-
|
|
288
|
-
- **Tone** → updates the `character` runtime-config field, applied to every backend's system prompt.
|
|
289
|
-
- **Attribute** → updates `user/profile.md` Learned Context.
|
|
290
|
-
|
|
291
|
-
The line between the two is enforced server-side: a signal like "I prefer concise replies" is *tone* (goes to character). A signal like "my flight is on Friday" is *attribute* (goes to profile).
|
|
292
|
-
|
|
293
|
-
---
|
|
294
|
-
|
|
295
|
-
## Talk to it like a person
|
|
296
|
-
|
|
297
|
-
Aitne has a dedicated set of management skills — `management-task-register`, `management-task-modify`, `management-task-stop`, `management-policy`, `user-profile`, `user-interview`. **You don't poke through 80 settings panels — you tell it.**
|
|
298
|
-
|
|
299
|
-
| You say (in any language) | Aitne does |
|
|
300
|
-
|---|---|
|
|
301
|
-
| *"Don't run the hourly check on weekends"* | Patches `hourlyCheckActiveStartHour/EndHour` per weekday |
|
|
302
|
-
| *"Stop pinging me about Slack after 9pm"* | Updates `quietHoursStart/End` and per-platform notify policy |
|
|
303
|
-
| *"Always check Sarah's calendar before scheduling with her"* | Adds a rule to `rules/management.md` |
|
|
304
|
-
| *"Remember my partner's birthday is March 14"* | Appends to `user/profile.md` Learned Context |
|
|
305
|
-
| *"I prefer concise replies — no preamble"* | Updates `character` field |
|
|
306
|
-
| *"Move all my React work into one project file"* | Refactors `projects/*.md` and re-indexes |
|
|
307
|
-
| *"Cancel tomorrow's morning briefing"* | Removes the agent_schedule row |
|
|
308
|
-
| *"Forget what I said about my old job"* | Surgically edits `user/work.md` |
|
|
309
|
-
| *"Email me a summary every Friday at 5pm"* | Creates a recurring schedule with a free-form prompt |
|
|
310
|
-
| *"Switch to Codex for code reviews from now on"* | Updates `process_backend_config` mapping |
|
|
311
|
-
|
|
312
|
-
Behind the scenes, the agent maps natural language to one of:
|
|
313
|
-
|
|
314
|
-
- `PATCH /api/config` — runtime config (~100 keys)
|
|
315
|
-
- `PUT /api/context/*` — Markdown memory (locked, validated, snapshotted)
|
|
316
|
-
- `DELETE /api/schedule/:id` / `POST /api/recurring-schedules` — scheduling
|
|
317
|
-
- `PATCH /api/config/character` — tone
|
|
318
|
-
- `POST /api/triggers` — cron-driven custom routines
|
|
319
|
-
|
|
320
|
-
Every change is journaled to `agent_actions` with `source_kind=user_directive`. Audit anything you don't recognize via `aitne audit`.
|
|
321
|
-
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
## Bring your own harness (BYOH)
|
|
325
|
-
|
|
326
|
-
Already invested in Claude Code skills? Custom MCP servers? A polished `~/.codex/config.toml`? **Aitne loads them all.** No re-configuring. No re-buying. No vendor lock.
|
|
327
|
-
|
|
328
|
-
```mermaid
|
|
329
|
-
flowchart LR
|
|
330
|
-
subgraph YOUR["🔵 Your existing setup"]
|
|
331
|
-
direction TB
|
|
332
|
-
Y1["~/.claude/<br/>· skills<br/>· slash commands<br/>· MCP servers"]
|
|
333
|
-
Y2["~/.codex/<br/>· config<br/>· plugins"]
|
|
334
|
-
Y3["~/.gemini/<br/>· config<br/>· tools"]
|
|
335
|
-
Y4["Custom MCP servers<br/>(your data sources,<br/>internal tools)"]
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
subgraph AITNE_SKILLS["🟡 Aitne's built-ins"]
|
|
339
|
-
direction TB
|
|
340
|
-
A1["23 skills<br/>(Calendar, Mail, Notion,<br/>Roadmap, Schedule, ...)"]
|
|
341
|
-
A2["Per-event task flows<br/>(morning, hourly,<br/>DM, mention, ...)"]
|
|
342
|
-
A3["Persona MD<br/>(per-backend)"]
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
SESS["📦 Per-session workdir<br/>~/.personal-agent/agent-sessions/<id>/<br/>CLAUDE.md · AGENTS.md · GEMINI.md<br/>+ .claude/skills/ · .codex/skills/<br/>+ MCP config materialized"]
|
|
346
|
-
|
|
347
|
-
RUN["🚀 Backend runs with<br/><b>your full toolkit + Aitne's</b>"]
|
|
348
|
-
|
|
349
|
-
YOUR --> SESS
|
|
350
|
-
AITNE_SKILLS --> SESS
|
|
351
|
-
SESS --> RUN
|
|
352
|
-
|
|
353
|
-
style YOUR fill:#dbeafe,stroke:#3b82f6
|
|
354
|
-
style AITNE_SKILLS fill:#fef3c7,stroke:#f59e0b
|
|
355
|
-
style SESS fill:#dcfce7,stroke:#22c55e
|
|
356
|
-
style RUN fill:#fae8ff,stroke:#a855f7
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
| You already have… | In Aitne it just works |
|
|
360
|
-
|---|---|
|
|
361
|
-
| A Claude Code MCP server connected to your company's internal API | Every Aitne session can use it. No code changes. |
|
|
362
|
-
| Custom slash commands you built for `/review` or `/test` | They're available in every Aitne-spawned Claude Code session. |
|
|
363
|
-
| A polished `AGENTS.md` for your Codex setup | Aitne layers its persona on top, keeping your config intact. |
|
|
364
|
-
| Your Gemini auth + project preferences | Inherited automatically. |
|
|
365
|
-
| Skills you wrote for `~/.claude/skills/` | Imported on demand. |
|
|
366
|
-
|
|
367
|
-
**The growth flywheel:** Claude Code / Codex / Gemini ship a new connector → Aitne picks it up on next session → you get it for free.
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
## Multi-platform, multi-app
|
|
372
|
-
|
|
373
|
-
One agent, every surface.
|
|
374
|
-
|
|
375
|
-
```mermaid
|
|
376
|
-
flowchart TB
|
|
377
|
-
subgraph IN["📥 Input surfaces"]
|
|
378
|
-
direction LR
|
|
379
|
-
I1["💬 Slack DM/mention"]
|
|
380
|
-
I2["📲 Telegram"]
|
|
381
|
-
I3["🎮 Discord"]
|
|
382
|
-
I4["💚 WhatsApp"]
|
|
383
|
-
I5["🌐 Web dashboard chat"]
|
|
384
|
-
I6["✋ Manual file edits"]
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
subgraph SVC["🔌 Connected apps"]
|
|
388
|
-
direction TB
|
|
389
|
-
SV1["📅 Google Calendar · Outlook Calendar"]
|
|
390
|
-
SV2["📧 Gmail · Outlook · Yahoo · iCloud"]
|
|
391
|
-
SV3["📓 Notion · Obsidian"]
|
|
392
|
-
SV4["📦 GitHub · local Git"]
|
|
393
|
-
SV5["🗺️ Google Maps"]
|
|
394
|
-
SV6["🔧 Custom MCP servers"]
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
AITNE(("🧠 Aitne"))
|
|
398
|
-
|
|
399
|
-
IN --> AITNE
|
|
400
|
-
AITNE <--> SVC
|
|
401
|
-
|
|
402
|
-
subgraph OUT["📤 Output surfaces"]
|
|
403
|
-
direction LR
|
|
404
|
-
O1["💬 Same DM channel"]
|
|
405
|
-
O2["📋 today.md<br/>updates"]
|
|
406
|
-
O3["📅 Calendar<br/>actions"]
|
|
407
|
-
O4["📧 Drafted emails"]
|
|
408
|
-
O5["🔔 Proactive<br/>notifications"]
|
|
409
|
-
end
|
|
410
|
-
|
|
411
|
-
AITNE --> OUT
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
**One conversation, every channel.** A morning brief delivered to Slack, a follow-up via WhatsApp, an email draft from the dashboard — Aitne carries the same context across all of them.
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
## Highlights
|
|
419
|
-
|
|
420
|
-
| | |
|
|
421
|
-
|---|---|
|
|
422
|
-
| 🌅 **Proactive routines** | Morning · evening · weekly · monthly · hourly observation sweep |
|
|
423
|
-
| 💬 **Reactive on every chat platform** | Slack · Telegram · Discord · WhatsApp · Web dashboard |
|
|
424
|
-
| 🧠 **Multi-backend brain** | Claude (Opus 4.7 / Sonnet 4.6 / Haiku 4.5) · Codex CLI · Gemini CLI |
|
|
425
|
-
| 📝 **MD-centric memory** | Plain Markdown you own — `today.md` · `roadmap.md` · `projects/*` · `daily/` · `weekly/` · `monthly/` |
|
|
426
|
-
| 🔌 **23 built-in skills** | Calendar, mail, Notion, Obsidian, schedule, roadmap, receipts, travel, reading, voice, … |
|
|
427
|
-
| 🧠 **Personal wiki builder** | DM `!ingest <url>` to capture, `!compile` to synthesise, `!ask` / `!lint` / `!trace` / `!connect` to operate — across one or many workspaces |
|
|
428
|
-
| 🔁 **4-mode integration framework** | `direct` (daemon polls) · `delegated` (backend's connector) · `native` (main backend MCP on demand) · `disabled` |
|
|
429
|
-
| 🛡️ **Four-layer safety** | SDK allowlist · PreToolUse hooks · daemon API risk tiers · absolute-block layer that holds even in Allow mode |
|
|
430
|
-
| 🪪 **Local-first & private** | Binds to `127.0.0.1`. No telemetry. Secrets in OS Keychain. Zero cloud state. |
|
|
431
|
-
| 🧰 **Production tooling** | Background daemon · `aitne doctor` · cost analytics · auth health monitor with auto-recovery |
|
|
432
|
-
| 🌍 **Speak any language** | The LLM handles it — talk to Aitne in Japanese, English, German, anything. `primaryLanguage` config nudges its outputs too. |
|
|
99
|
+
## Status
|
|
433
100
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
## Table of contents
|
|
437
|
-
|
|
438
|
-
1. [Quick start](#quick-start)
|
|
439
|
-
2. [Setup guide](#setup-guide)
|
|
440
|
-
3. [CLI reference](#cli-reference)
|
|
441
|
-
4. [Architecture](#architecture)
|
|
442
|
-
5. [Memory layout](#memory-layout)
|
|
443
|
-
6. [Multi-backend](#multi-backend)
|
|
444
|
-
7. [Integrations](#integrations)
|
|
445
|
-
8. [Safety model](#safety-model)
|
|
446
|
-
9. [Cost & quotas](#cost--quotas)
|
|
447
|
-
10. [Configuration](#configuration)
|
|
448
|
-
11. [Platform support](#platform-support)
|
|
449
|
-
12. [Troubleshooting](#troubleshooting)
|
|
450
|
-
13. [Development](#development)
|
|
451
|
-
14. [FAQ](#faq)
|
|
452
|
-
15. [License](#license)
|
|
101
|
+
Pre-1.0. APIs, schema, and dashboard surfaces may still change. SQLite migrations are deliberately destructive ("clean reinstall, no data migration"); Markdown memory in `context/` is forward-compatible and safe to keep across upgrades.
|
|
453
102
|
|
|
454
103
|
---
|
|
455
104
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
### 1. Install
|
|
105
|
+
## Install
|
|
459
106
|
|
|
460
107
|
```bash
|
|
461
108
|
npm install -g @aitne-sh/aitne@latest
|
|
109
|
+
aitne start
|
|
462
110
|
```
|
|
463
111
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
### 2. Bring at least one AI backend
|
|
467
|
-
|
|
468
|
-
Aitne is the nervous system; you bring the brain. Install **at least one** of:
|
|
469
|
-
|
|
470
|
-
```bash
|
|
471
|
-
# Claude Code (recommended — full features, server-side advisor support)
|
|
472
|
-
npm install -g @anthropic-ai/claude-code
|
|
473
|
-
|
|
474
|
-
# OpenAI Codex CLI
|
|
475
|
-
npm install -g @openai/codex
|
|
112
|
+
Then bring at least one AI backend. The documented operating mode is **provider API keys** — paste them into the setup wizard (they land in the OS keychain, never `.env`):
|
|
476
113
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
114
|
+
| Backend | Install | Auth |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| **Claude Code** | `npm install -g @anthropic-ai/claude-code` | `ANTHROPIC_API_KEY` in the wizard (Anthropic's headless-agent policy disallows Pro/Max subscriptions for SDK-driven sessions) |
|
|
117
|
+
| **OpenAI Codex CLI** | `npm install -g @openai/codex` | `OPENAI_API_KEY` in the wizard, or `codex login --device-auth` as fallback |
|
|
118
|
+
| **Google Gemini CLI** | `npm install -g @google/gemini-cli` | `GEMINI_API_KEY` / `GOOGLE_API_KEY`, or OAuth on first use |
|
|
119
|
+
| **OpenCode** (sst/opencode) | _coming soon_ — registered for preview; setup will open when the runtime executor lands | _coming soon_ |
|
|
480
120
|
|
|
481
|
-
|
|
121
|
+
The daemon listens on `:8321`, the dashboard on `:3000`. After `aitne start`, the browser opens to a 9-step setup wizard.
|
|
482
122
|
|
|
483
|
-
###
|
|
123
|
+
### Verify the install
|
|
484
124
|
|
|
485
125
|
```bash
|
|
486
|
-
aitne
|
|
126
|
+
aitne status # PIDs, uptime, connected platforms, today's spend
|
|
127
|
+
aitne doctor # 10-check install diagnostic
|
|
128
|
+
aitne logs -f # tail the daemon log
|
|
487
129
|
```
|
|
488
130
|
|
|
489
|
-
|
|
131
|
+
### From source
|
|
490
132
|
|
|
491
|
-
|
|
133
|
+
For contributors, or to hack on the daemon directly. Requires Node ≥ 22 and pnpm 10.x.
|
|
492
134
|
|
|
493
135
|
```bash
|
|
494
|
-
aitne
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
Daemon: running (PID 12345)
|
|
501
|
-
Uptime: 1m 23s
|
|
502
|
-
API: http://127.0.0.1:8321
|
|
503
|
-
Platforms: slack, dashboard
|
|
504
|
-
Backends: claude
|
|
505
|
-
Dashboard: running (PID 12346)
|
|
506
|
-
URL: http://localhost:3000
|
|
507
|
-
|
|
508
|
-
Last action: 2026-05-11T07:30:14Z (routine.morning_routine)
|
|
509
|
-
Today: 6 action(s) · $0.043 spent
|
|
510
|
-
Next: 2026-05-11T18:00:00Z routine.evening_review
|
|
136
|
+
git clone https://github.com/Aitne-sh/Aitne.git aitne
|
|
137
|
+
cd aitne
|
|
138
|
+
corepack enable
|
|
139
|
+
pnpm install
|
|
140
|
+
pnpm dev # foreground mode with full stdio
|
|
511
141
|
```
|
|
512
142
|
|
|
513
|
-
|
|
143
|
+
See [docs/setup-guide.md](docs/setup-guide.md) for the full installation walkthrough.
|
|
514
144
|
|
|
515
145
|
---
|
|
516
146
|
|
|
517
|
-
##
|
|
518
|
-
|
|
519
|
-
### Prerequisites
|
|
520
|
-
|
|
521
|
-
| Requirement | Version | Why |
|
|
522
|
-
|---|---|---|
|
|
523
|
-
| **Node.js** | ≥ 22.0.0 | Daemon runtime (LTS) |
|
|
524
|
-
| **At least one AI backend** | — | Claude Code, Codex CLI, or Gemini CLI |
|
|
525
|
-
| **OS Keychain** | macOS / libsecret on Linux / DPAPI on Windows | Secret storage (file-based fallback available) |
|
|
526
|
-
|
|
527
|
-
### Step 1 — Install Aitne
|
|
528
|
-
|
|
529
|
-
```bash
|
|
530
|
-
npm install -g @aitne-sh/aitne@latest
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
> Want to hack on the source? See [Development](#development).
|
|
534
|
-
|
|
535
|
-
### Step 2 — Install at least one backend CLI
|
|
536
|
-
|
|
537
|
-
#### Claude Code (recommended)
|
|
538
|
-
|
|
539
|
-
```bash
|
|
540
|
-
npm install -g @anthropic-ai/claude-code
|
|
541
|
-
claude --version
|
|
542
|
-
claude auth login # uses your Claude subscription
|
|
543
|
-
```
|
|
544
|
-
|
|
545
|
-
#### OpenAI Codex CLI
|
|
546
|
-
|
|
547
|
-
```bash
|
|
548
|
-
npm install -g @openai/codex
|
|
549
|
-
codex --version
|
|
550
|
-
codex login --device-auth # device-flow OAuth
|
|
551
|
-
```
|
|
147
|
+
## How it works
|
|
552
148
|
|
|
553
|
-
|
|
149
|
+
A long-running daemon receives signals from every channel you've connected, parks short-term state in SQLite, and spawns an AI session whenever it needs to think. The session reads your Markdown memory, calls a curated set of skills, and writes results back through the daemon API.
|
|
554
150
|
|
|
555
|
-
```
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
151
|
+
```mermaid
|
|
152
|
+
flowchart LR
|
|
153
|
+
subgraph WORLD["Your digital life"]
|
|
154
|
+
direction TB
|
|
155
|
+
W1["Messages"]
|
|
156
|
+
W2["Calendar"]
|
|
157
|
+
W3["Mail"]
|
|
158
|
+
W4["Git / GitHub"]
|
|
159
|
+
W5["Notes"]
|
|
160
|
+
end
|
|
560
161
|
|
|
561
|
-
|
|
162
|
+
subgraph LOCAL["Your laptop"]
|
|
163
|
+
direction TB
|
|
164
|
+
DAEMON["Aitne daemon<br/>(always on, 127.0.0.1)"]
|
|
165
|
+
BRAIN["AI session<br/>Claude / Codex / Gemini<br/>(OpenCode coming soon)"]
|
|
166
|
+
MEMORY["Markdown memory<br/>plain files you own"]
|
|
167
|
+
DAEMON --- BRAIN
|
|
168
|
+
BRAIN --- MEMORY
|
|
169
|
+
DAEMON --- MEMORY
|
|
170
|
+
end
|
|
562
171
|
|
|
563
|
-
|
|
172
|
+
YOU["You<br/>Slack · Telegram · Discord<br/>WhatsApp · Web dashboard"]
|
|
564
173
|
|
|
565
|
-
|
|
566
|
-
|
|
174
|
+
WORLD --- DAEMON
|
|
175
|
+
DAEMON --- YOU
|
|
567
176
|
```
|
|
568
177
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
| # | Step | What it asks |
|
|
572
|
-
|---|---|---|
|
|
573
|
-
| 1 | **Basics** | Agent display name + primary language |
|
|
574
|
-
| 2 | **Vault** | Plain (`~/.personal-agent/context/`) or your existing Obsidian vault path |
|
|
575
|
-
| 3 | **AI Backend** | Pick the main backend (Claude / Codex / Gemini), authenticate (API key or CLI login), choose execution mode (Safe vs. Allow) |
|
|
576
|
-
| 4 | **Mail** | Gmail (OAuth) · Outlook (OAuth) · Yahoo / iCloud (IMAP + app password) — each card sets `direct` / `delegated` / `native` mode where supported |
|
|
577
|
-
| 5 | **Calendar** | Google Calendar (OAuth) · Outlook Calendar (OAuth or user-managed MCP) — same mode picker per card |
|
|
578
|
-
| 6 | **Note** | Notion (OAuth) and an optional secondary Obsidian vault path to watch |
|
|
579
|
-
| 7 | **Messaging** | Slack · Telegram · Discord · WhatsApp pairing |
|
|
580
|
-
| 8 | **Rules** | A short conversation with the agent — it interviews you and stages a `character` block + a `management-rules` block, which you confirm before saving |
|
|
581
|
-
| 9 | **Done** | Summary; agent runs its first `setup` session |
|
|
178
|
+
Two execution paths run in parallel:
|
|
582
179
|
|
|
583
|
-
|
|
180
|
+
- **Reactive path** — owner DMs/mentions, cron routines (morning / evening / weekly), calendar approach events. Event → priority heap → dispatcher → backend session.
|
|
181
|
+
- **Polling path** — observers for Git, GitHub, Obsidian, Notion, Calendar, Mail write to an `observations` table without spawning sessions. An hourly cron triages those observations through a lite-tier session, then escalates to a full Sonnet-class session only if something worth surfacing was found.
|
|
584
182
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
```bash
|
|
588
|
-
aitne status # PIDs, uptime, connected platforms, backends, today's spend
|
|
589
|
-
aitne doctor # install diagnostic
|
|
590
|
-
aitne logs -f # tail the daemon log
|
|
591
|
-
```
|
|
183
|
+
A pre-pass `routine.fetch_window` session runs before each routine, fanning out per-account fetches (mail, calendar, Notion) into the `observations` table so the main session reads from a single source.
|
|
592
184
|
|
|
593
185
|
---
|
|
594
186
|
|
|
595
|
-
## CLI
|
|
187
|
+
## CLI
|
|
596
188
|
|
|
597
189
|
### Lifecycle
|
|
598
190
|
|
|
599
191
|
| Command | What it does |
|
|
600
192
|
|---|---|
|
|
601
|
-
| `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background
|
|
602
|
-
| `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s)
|
|
603
|
-
| `aitne restart [--
|
|
604
|
-
| `aitne status` | PIDs, uptime,
|
|
605
|
-
| `aitne logs [-f] [-n N] [-d]` | Tail
|
|
606
|
-
| `aitne dev` | Foreground mode (full stdio
|
|
607
|
-
| `aitne build` | Force a build (skip the mtime gate). |
|
|
193
|
+
| `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background |
|
|
194
|
+
| `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s) |
|
|
195
|
+
| `aitne restart [--clean-context]` | Stop then start. `--clean-context` wipes `context/` after a tarball backup |
|
|
196
|
+
| `aitne status` | PIDs, uptime, platforms, backends, today's spend |
|
|
197
|
+
| `aitne logs [-f] [-n N] [-d]` | Tail daemon log (`-d` = dashboard log, `-f` = follow) |
|
|
198
|
+
| `aitne dev` | Foreground mode (full stdio) |
|
|
608
199
|
|
|
609
200
|
### Operations
|
|
610
201
|
|
|
611
202
|
| Command | What it does |
|
|
612
203
|
|---|---|
|
|
613
|
-
| `aitne
|
|
614
|
-
| `aitne
|
|
615
|
-
| `aitne
|
|
616
|
-
| `aitne
|
|
617
|
-
| `aitne
|
|
618
|
-
| `aitne
|
|
619
|
-
| `aitne
|
|
620
|
-
| `aitne help [cmd]` | Help (or per-command help). |
|
|
621
|
-
|
|
622
|
-
### `aitne audit` flags
|
|
623
|
-
|
|
624
|
-
| Flag | Default | Description |
|
|
625
|
-
|---|---|---|
|
|
626
|
-
| `--since <duration>` | `24h` | Time window (e.g. `1h`, `7d`, `2026-04-20`). |
|
|
627
|
-
| `--type <pattern>` | — | `action_type` filter (`%` for LIKE matching). |
|
|
628
|
-
| `--result <value>` | — | `success` / `failed` / `partial` / `skipped`. |
|
|
629
|
-
| `--backend <name>` | — | `claude` / `codex` / `gemini`. |
|
|
630
|
-
| `--limit <N>` | 50 | Row cap. |
|
|
631
|
-
| `--detail` | off | Expand the `detail` JSON column under each row. |
|
|
632
|
-
| `--json` | off | Machine-readable JSON output. |
|
|
633
|
-
|
|
634
|
-
### `aitne doctor` checks
|
|
635
|
-
|
|
636
|
-
1. Node version ≥ 22.0.0
|
|
637
|
-
2. Daemon port (`PA_API_PORT`, default 8321) is bindable
|
|
638
|
-
3. Dashboard port (`PA_DASHBOARD_PORT`, default 3000) is bindable
|
|
639
|
-
4. OS secret store usable (`security` / `secret-tool` / `PA_MASTER_PASSWORD`)
|
|
640
|
-
5. At least one backend CLI (`claude`, `codex`, or `gemini`) responds
|
|
641
|
-
6. `~/.personal-agent` exists and is writable
|
|
642
|
-
7. `better-sqlite3` native binding loads
|
|
643
|
-
8. `agent-assets/skills/` is reachable
|
|
644
|
-
9. Repository drift — one row per paired-local + GitHub repo whose `origin` no longer matches the registered `<owner>/<repo>`
|
|
645
|
-
|
|
646
|
-
---
|
|
647
|
-
|
|
648
|
-
## Architecture
|
|
649
|
-
|
|
650
|
-
```mermaid
|
|
651
|
-
flowchart TB
|
|
652
|
-
subgraph PLAT["📱 Input platforms"]
|
|
653
|
-
direction LR
|
|
654
|
-
P1[Slack]
|
|
655
|
-
P2[Telegram]
|
|
656
|
-
P3[Discord]
|
|
657
|
-
P4[WhatsApp]
|
|
658
|
-
P5[Dashboard]
|
|
659
|
-
end
|
|
660
|
-
|
|
661
|
-
subgraph DAEMON["⚙️ Aitne daemon (Hono :8321)"]
|
|
662
|
-
direction TB
|
|
663
|
-
EB[EventBus<br/>priority heap]
|
|
664
|
-
DI[Dispatcher<br/>semaphores: 2 reactive +<br/>3 autonomous]
|
|
665
|
-
BR[BackendRouter<br/>ProcessKey → tier → backend<br/>+ fallback]
|
|
666
|
-
AC[Agent Core<br/>IAgentCore interface]
|
|
667
|
-
OB[Observers<br/>Git · GitHub · Obsidian ·<br/>Notion · Calendar · Mail]
|
|
668
|
-
SC[Scheduler<br/>node-cron + agent_schedule]
|
|
669
|
-
end
|
|
670
|
-
|
|
671
|
-
subgraph BACKENDS["🧠 AI runtimes"]
|
|
672
|
-
direction LR
|
|
673
|
-
BC[Claude Code SDK]
|
|
674
|
-
BX[Codex CLI subprocess]
|
|
675
|
-
BG[Gemini CLI subprocess]
|
|
676
|
-
end
|
|
677
|
-
|
|
678
|
-
subgraph DATA["💾 Local data"]
|
|
679
|
-
direction LR
|
|
680
|
-
SQL[(SQLite<br/>WAL + FTS5)]
|
|
681
|
-
MD["📝 Markdown memory<br/>~/.personal-agent/context/"]
|
|
682
|
-
KC[OS Keychain]
|
|
683
|
-
end
|
|
684
|
-
|
|
685
|
-
PLAT --> EB
|
|
686
|
-
SC --> EB
|
|
687
|
-
OB --> SQL
|
|
688
|
-
SQL -- "hourly check pulls" --> EB
|
|
689
|
-
EB --> DI
|
|
690
|
-
DI --> BR
|
|
691
|
-
BR --> AC
|
|
692
|
-
AC --> BC
|
|
693
|
-
AC --> BX
|
|
694
|
-
AC --> BG
|
|
695
|
-
AC <-->|curl localhost API| DAEMON
|
|
696
|
-
DAEMON <--> SQL
|
|
697
|
-
DAEMON <--> MD
|
|
698
|
-
DAEMON <--> KC
|
|
699
|
-
```
|
|
700
|
-
|
|
701
|
-
### Two execution paths
|
|
702
|
-
|
|
703
|
-
**Reactive path** — owner DMs/mentions, cron routines, calendar approach events, scheduled tasks
|
|
704
|
-
→ Event source → EventBus → Dispatcher → BackendRouter → Agent → output to user.
|
|
705
|
-
|
|
706
|
-
**Polling path** — Obsidian, Git, GitHub, Notion, Calendar, Mail change detection
|
|
707
|
-
→ Observer → `observations` table (UPSERT, with `actor='user'|'agent'`)
|
|
708
|
-
… time passes …
|
|
709
|
-
→ Hourly cron → Stage 2 lite-tier triage → Stage 3 full `routine.hourly_check` (if escalated) → agent reads pending → updates `today.md` / `roadmap.md` → notifies if needed.
|
|
710
|
-
|
|
711
|
-
`AgentWriteTracker` prevents agent → observer → agent loops by tagging the agent's own writes so the hourly check filters them out. A pre-pass `routine.fetch_window` session fans out per-account fetches into the `observations` table before each routine runs.
|
|
712
|
-
|
|
713
|
-
### Repo layout
|
|
714
|
-
|
|
715
|
-
```
|
|
716
|
-
packages/
|
|
717
|
-
├── daemon/ # Hono server, EventBus, Dispatcher, BackendRouter, observers, SQLite layer, integration SDK wrappers
|
|
718
|
-
├── dashboard/ # Next.js 16 + React 19 + Tailwind 4 + shadcn/ui
|
|
719
|
-
└── shared/ # Types, Zod schemas, ProcessKey enum, branding constants
|
|
720
|
-
|
|
721
|
-
agent-assets/ # Read by the daemon at session-init time
|
|
722
|
-
├── agent-profiles/ # Persona MD per backend (CLAUDE.md / AGENTS.md / GEMINI.md)
|
|
723
|
-
├── skills/ # 23 built-in skills (context, calendar, mail, notion, …)
|
|
724
|
-
├── task-flows/ # Per-event prompt templates (one per event type)
|
|
725
|
-
└── templates/ # Scaffold MD copied to context/ on first run
|
|
726
|
-
|
|
727
|
-
bin/aitne.mjs # CLI entry — lifecycle + ops
|
|
728
|
-
scripts/ # Build/run helpers and per-command modules
|
|
729
|
-
docs/design/ # Architecture & design docs (v4.16) — source of truth
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
---
|
|
733
|
-
|
|
734
|
-
## Memory layout
|
|
735
|
-
|
|
736
|
-
Everything the agent writes lives under `PA_DATA_DIR` (default `~/.personal-agent`):
|
|
204
|
+
| `aitne doctor [--json]` | 10 install-health checks + repo-drift expansion |
|
|
205
|
+
| `aitne audit [flags]` | Read the agent action log from SQLite — `--since`, `--type`, `--result`, `--backend`, `--detail`, `--json` |
|
|
206
|
+
| `aitne setup` | Re-open the dashboard `/setup` wizard |
|
|
207
|
+
| `aitne open` | Open the dashboard in your browser |
|
|
208
|
+
| `aitne run-now <job>` | Fire a maintenance job on demand (currently `roadmap_maintenance`) |
|
|
209
|
+
| `aitne verify <target>` | Read-only post-launch verification of a shipped design surface |
|
|
210
|
+
| `aitne version` / `update` / `uninstall` | Self-explanatory |
|
|
737
211
|
|
|
738
|
-
|
|
739
|
-
~/.personal-agent/
|
|
740
|
-
├── context/ # Markdown memory — edit any file by hand at any time
|
|
741
|
-
│ ├── _index.md # Navigation hub
|
|
742
|
-
│ ├── today.md # Today's working view (always injected)
|
|
743
|
-
│ ├── yesterday.md # Daemon-rotated archive
|
|
744
|
-
│ ├── roadmap.md # Long-term goals (Morning + Evening injection)
|
|
745
|
-
│ ├── context-index.md # Auto-maintained index
|
|
746
|
-
│ ├── user/
|
|
747
|
-
│ │ ├── profile.md # ~600 tokens, always injected
|
|
748
|
-
│ │ ├── people.md # Relationship dictionary
|
|
749
|
-
│ │ ├── work.md, expertise.md, personal.md, goals.md
|
|
750
|
-
│ ├── rules/ # Policy files (management, redaction, journal)
|
|
751
|
-
│ ├── routines/ # Per-cadence checklist rulebooks
|
|
752
|
-
│ ├── dossiers/ # Carry-forward state per routine
|
|
753
|
-
│ ├── projects/ # One file per active project + Obsidian Bases view
|
|
754
|
-
│ ├── daily/<YYYY-MM-DD>.md # Synthesized daily journal (persistent by design)
|
|
755
|
-
│ ├── weekly/<YYYY-Www>.md # Weekly review (1 yr file retention)
|
|
756
|
-
│ ├── monthly/<YYYY-MM>.md # Monthly review (persistent by design)
|
|
757
|
-
│ ├── inbox/ # Optional paste bucket
|
|
758
|
-
│ └── agent/
|
|
759
|
-
│ ├── journal.md # Private agent self-reflection
|
|
760
|
-
│ └── scratch/ # 48-h TTL temp files
|
|
761
|
-
├── data/personal_agent.db # SQLite (WAL + FTS5)
|
|
762
|
-
├── logs/{daemon,dashboard}.log
|
|
763
|
-
├── prompts/ # Editable prompt templates
|
|
764
|
-
├── attachments/ # Chat attachments
|
|
765
|
-
├── agent-sessions/<id>/ # Per-session backend workdir
|
|
766
|
-
├── secrets/ # File-fallback secret store (`<name>.enc`); empty when OS keychain is used
|
|
767
|
-
└── run/ # PID files for daemon + dashboard
|
|
768
|
-
```
|
|
769
|
-
|
|
770
|
-
### Write chokepoint
|
|
771
|
-
|
|
772
|
-
Context-MD writes go through `curl http://localhost:8321/api/context/<path>` rather than the SDK's `Edit`/`Write` tools on those paths. This is enforced by **skill instructions** (the bundled skills only ever invoke the daemon API) plus the **absolute-block path globs** that hard-deny SDK writes to secret paths (`.env`, `~/.ssh`, `~/.aws`, `~/.gnupg`, `~/.personal-agent/secrets/**`, …). Routing context writes through the daemon API gives one chokepoint for locks (`today.md` write lock), frontmatter validation, and snapshots (30-day `md_file_snapshots` retention).
|
|
212
|
+
`aitne help [cmd]` for per-command details.
|
|
773
213
|
|
|
774
214
|
---
|
|
775
215
|
|
|
776
|
-
##
|
|
216
|
+
## Backends
|
|
777
217
|
|
|
778
|
-
Aitne abstracts
|
|
218
|
+
Aitne abstracts four AI runtimes behind a single `IAgentCore` interface. Every kind of work has a `ProcessKey` mapped to a tier (`lite` / `medium` / `high`) and a backend; for Claude those tiers map to **Haiku 4.5 / Sonnet 4.6 / Opus 4.7**.
|
|
779
219
|
|
|
780
|
-
| Backend | Implementation |
|
|
220
|
+
| Backend | Implementation | Resume | Strengths |
|
|
781
221
|
|---|---|---|---|
|
|
782
|
-
| **Claude Code** | `@anthropic-ai/claude-agent-sdk` |
|
|
783
|
-
| **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream |
|
|
784
|
-
| **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream |
|
|
785
|
-
|
|
786
|
-
### Per-process tier routing
|
|
222
|
+
| **Claude Code** | `@anthropic-ai/claude-agent-sdk` | ✓ | Best for routines, deep context, server-side advisor |
|
|
223
|
+
| **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream | ✓ | Code-heavy tasks, fast iteration |
|
|
224
|
+
| **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream | ✓ | Free-tier headroom, large-context summarization |
|
|
225
|
+
| **OpenCode** _(coming soon)_ | `opencode-ai` HTTP server + SDK client | ✓ | Multi-provider — routes to any `opencode auth login` provider. Preview-only in this release; the dashboard selectors are disabled until the runtime executor ships. |
|
|
787
226
|
|
|
788
|
-
|
|
227
|
+
The router fails over to a configured fallback backend automatically on `BackendQuotaError` or decisive failure, re-materializing the fallback's instruction file and skill directories into the session workdir.
|
|
789
228
|
|
|
790
|
-
|
|
791
|
-
|---|---|---|
|
|
792
|
-
| `routine.morning_routine_initial` | **high** | First-day plan generation (one-shot, sets up profile) |
|
|
793
|
-
| `routine.morning_routine` | medium | Daily plan generation — the highest-value recurring process |
|
|
794
|
-
| `routine.evening_review` | medium | Today wrap-up |
|
|
795
|
-
| `routine.weekly_review`, `routine.monthly_review` | medium | Cadence summaries |
|
|
796
|
-
| `routine.hourly_check` | medium | Stage 3 observation aggregation |
|
|
797
|
-
| `routine.hourly_check.triage` | lite | Stage 2 escalate-vs-log-only gate |
|
|
798
|
-
| `routine.fetch_window` | lite | Pre-pass fan-out fetcher for routines |
|
|
799
|
-
| `message.dm`, `message.mention` | medium | DM and channel response |
|
|
800
|
-
| `dashboard.chat` | medium | Web chat |
|
|
801
|
-
| `dashboard.docs_qa` | medium (tier-locked) | Docs panel — never burns Opus quota |
|
|
802
|
-
| `agent.task`, `agent.dm_task` | medium | Scheduled wakeups |
|
|
803
|
-
| `knowledge.import` | high | One-shot knowledge ingestion |
|
|
804
|
-
| `calendar.change`, `gmail_classify` | lite | Polling-derived events |
|
|
805
|
-
| `git.*`, `github.*` (event triage) | lite | Git/GitHub event triage |
|
|
806
|
-
| `delegated_task` | lite | Delegated subprocess task mode |
|
|
807
|
-
| `delegated_task_heavy` | high | Opt-in destructive-write task mode |
|
|
808
|
-
| `observation.summarize` | lite | Per-observation classification |
|
|
809
|
-
|
|
810
|
-
Configure each ProcessKey's backend & tier from the dashboard `/settings/models` page. The router fails over to a fallback backend automatically on `BackendQuotaError` or `BackendDecisiveFailure`, re-materializing the fallback's instruction file + skill directories into the session workdir.
|
|
229
|
+
Per-process tier defaults and the routing table are editable from the dashboard at `:3000/settings/models`.
|
|
811
230
|
|
|
812
231
|
---
|
|
813
232
|
|
|
814
233
|
## Integrations
|
|
815
234
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
|
819
|
-
|
|
820
|
-
|
|
|
821
|
-
|
|
|
822
|
-
|
|
|
823
|
-
|
|
|
824
|
-
| Web Dashboard | Hono SSE | Always on | None |
|
|
825
|
-
|
|
826
|
-
### Mail (multi-provider, unified API)
|
|
827
|
-
|
|
828
|
-
| Provider | Auth | Features |
|
|
829
|
-
|---|---|---|
|
|
830
|
-
| **Gmail** | `googleapis` OAuth2 | Read · send · drafts · labels · IMAP IDLE · classifier · attachment extraction |
|
|
831
|
-
| **Outlook** | `@azure/msal-node` Graph API | Read · send · drafts · folders |
|
|
832
|
-
| **Yahoo** | IMAP + app password | Read · send · IMAP IDLE |
|
|
833
|
-
| **iCloud** | IMAP + app password | Read · send · IMAP IDLE |
|
|
834
|
-
|
|
835
|
-
Local FTS5 full-text search runs across **every** account via `GET /api/mail/search?q=...`. The classifier (`mail-classifier`) tags messages across all providers; the Gmail-specific classifier auto-applies labels.
|
|
836
|
-
|
|
837
|
-
### Knowledge & docs
|
|
838
|
-
|
|
839
|
-
- **Obsidian** — read directly via `Read`; write via the official Obsidian CLI (`obsidian create`, `obsidian append`, `obsidian daily:append`, …); `chokidar` watches the vault for user edits
|
|
840
|
-
- **Notion** — `@notionhq/client` REST API; full page + database CRUD
|
|
841
|
-
- **Wiki builder** — per-workspace ingest / compile / ask / lint / trace / connect surface backed by `packages/daemon/src/core/wiki/` (cost-gated full rebuilds, approval queue, compile preview, optional git pre-compile snapshot, dispatch-mode fan-out). One internal workspace or any number of external Obsidian vaults; addressed with `@<workspace>` on every bang command. See `agent-assets/docs/features/wiki/overview.md`.
|
|
842
|
-
- **Custom MCP servers** — register via `/api/mcp/servers`; materialized into the per-session workdir so backends use them transparently
|
|
843
|
-
|
|
844
|
-
### Code
|
|
845
|
-
|
|
846
|
-
- **Git** (local) — daemon proxies `git log`, `git diff`, `git show`; cron-driven repository observer; `automation_triggers` table fires LLM prompts on `cron.daily` / `cron.weekly`
|
|
847
|
-
- **GitHub** — `@octokit/rest` + webhooks; PR list & comment, issue ops, HMAC-SHA256 signature verification at `POST /webhook/github`
|
|
848
|
-
|
|
849
|
-
### Calendar & travel
|
|
850
|
-
|
|
851
|
-
- **Google Calendar** — `googleapis` OAuth2; full event CRUD, freebusy, calendar list, 15-min approaching reminders
|
|
852
|
-
- **Outlook Calendar** — Microsoft Graph via `@azure/msal-node` in direct mode, or user-managed MCP in delegated / native modes
|
|
853
|
-
- **iCloud Calendar** — CalDAV via `tsdav` (Apple Calendar service; reachable from any platform)
|
|
854
|
-
- **Google Maps** — Directions API for travel-time estimation tied to calendar events
|
|
855
|
-
|
|
856
|
-
### Lifestyle
|
|
857
|
-
|
|
858
|
-
- **Receipts** — auto-extracts PDF/image attachments from mail with category detection
|
|
859
|
-
- **Travel bookings** — auto-extracts flight, hotel, restaurant, train confirmations
|
|
860
|
-
- **Reading** — Kindle My Clippings importer; reading-taste profile; weekly book recommendations
|
|
861
|
-
- **Voice** — opt-in Whisper transcription (`ffmpeg-static` + `@huggingface/transformers`) runs locally on voice attachments. Install via `POST /api/voice/install`.
|
|
862
|
-
|
|
863
|
-
### Integration delegation modes
|
|
235
|
+
| Category | Providers |
|
|
236
|
+
|---|---|
|
|
237
|
+
| **Messaging** | Slack (Socket Mode), Telegram, Discord, WhatsApp (Baileys), Web dashboard |
|
|
238
|
+
| **Mail** | Gmail, Outlook, Yahoo, iCloud — unified API, classifier, local FTS5 search, IMAP IDLE |
|
|
239
|
+
| **Calendar** | Google Calendar, Outlook Calendar, iCloud (CalDAV), Google Maps for travel time |
|
|
240
|
+
| **Knowledge** | Obsidian (CLI + vault watch), Notion (REST), custom MCP servers |
|
|
241
|
+
| **Code** | Local Git, GitHub (Octokit + webhooks) |
|
|
242
|
+
| **Lifestyle** | Auto-extracted receipts · travel bookings · Kindle highlights · voice transcription (Whisper, opt-in) |
|
|
864
243
|
|
|
865
|
-
|
|
244
|
+
### Integration modes
|
|
866
245
|
|
|
867
|
-
|
|
868
|
-
|---|---|---|---|---|
|
|
869
|
-
| **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | 5–6 vendor-console steps | Full feature set |
|
|
870
|
-
| **`delegated`** | Main backend's connector | Cron `delegated-sync-worker` (per-cadence opt-in) | None — backend already authed | Reduced (whatever the connector exposes) |
|
|
871
|
-
| **`native`** | Main backend's connector | No daemon polling — agent reaches the integration in-turn via MCP | None | On-demand only; observations posted via `/api/observations` |
|
|
872
|
-
| **`disabled`** | — | No | — | Off |
|
|
246
|
+
Each integration runs in one of four modes:
|
|
873
247
|
|
|
874
|
-
|
|
248
|
+
| Mode | Auth held by | Polling? | Capabilities |
|
|
249
|
+
|---|---|---|---|
|
|
250
|
+
| **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | Full feature set |
|
|
251
|
+
| **`delegated`** | Main backend's connector | Cron worker (per-cadence opt-in) | Whatever the connector exposes |
|
|
252
|
+
| **`native`** | Main backend's connector | None — reached in-turn via MCP | On-demand only |
|
|
253
|
+
| **`disabled`** | — | — | Off |
|
|
875
254
|
|
|
876
|
-
Every mode change goes through
|
|
255
|
+
Every mode change goes through a live capability probe and a per-key flip lock.
|
|
877
256
|
|
|
878
257
|
---
|
|
879
258
|
|
|
880
|
-
##
|
|
259
|
+
## Memory
|
|
881
260
|
|
|
882
|
-
Aitne
|
|
261
|
+
Everything Aitne writes lives in `~/.personal-agent/context/*.md` — plain Markdown you can `cat`, `vim`, `obsidian`, or `cp`:
|
|
883
262
|
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
263
|
+
```
|
|
264
|
+
context/
|
|
265
|
+
├── today.md # Working view, always injected
|
|
266
|
+
├── yesterday.md # Daemon-rotated archive
|
|
267
|
+
├── roadmap.md # Long-term goals
|
|
268
|
+
├── user/ # profile.md, people.md, work.md, …
|
|
269
|
+
├── rules/ # Policy files (management, redaction)
|
|
270
|
+
├── projects/ # One file per active project
|
|
271
|
+
├── daily/YYYY-MM-DD.md # Synthesized daily journal
|
|
272
|
+
├── weekly/ # Weekly retrospectives
|
|
273
|
+
└── agent/journal.md # Private agent self-reflection
|
|
892
274
|
```
|
|
893
275
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
### Layer 2 — PreToolUse hooks (Claude, Safe mode)
|
|
897
|
-
|
|
898
|
-
In Safe mode, every `Bash(curl ...)` invocation is parsed: the hostname must be `localhost` or `127.0.0.1` and the port must match the daemon's `apiPort`. Connection-override flags (`--connect-to`, `--resolve`, `--proxy`, `-x`, `--socks`, `-K`) are also rejected. A parallel `jq` hook blocks `--rawfile` / env-leak filters. In Allow mode the curl/jq pair is skipped, but the absolute-block hook (below) and the context-write attribution hook still run. Vault writes are attributed to the agent via `AgentWriteTracker` so they don't loop back as observations.
|
|
899
|
-
|
|
900
|
-
### Layer 3 — Daemon API risk tiers
|
|
901
|
-
|
|
902
|
-
| Tier | Examples | Auth required |
|
|
903
|
-
|---|---|---|
|
|
904
|
-
| **Autonomous** | `GET /api/context/*`, `POST /api/notify`, `POST /api/schedule`, `POST /api/observations` | None (localhost only) |
|
|
905
|
-
| **ReadSensitive** | `GET /api/observations`, `GET /api/calendar/events`, `GET /api/mail/search` | `X-Read-Token` or Bearer |
|
|
906
|
-
| **Approve** | `PATCH /api/config`, `POST /api/setup/*`, `POST /api/system/factory-reset`, `POST /api/triggers`, `/api/repositories`, `/api/mcp/servers`, `/api/integrations` | Bearer |
|
|
907
|
-
|
|
908
|
-
### Layer 4 — Absolute-block layer (`ALWAYS_DISALLOWED_TOOLS`)
|
|
276
|
+
Context writes flow through `curl http://localhost:8321/api/context/<path>`, not the SDK's `Edit`/`Write` tools — this gives the daemon a single chokepoint for write locks, frontmatter validation, and 30-day snapshots. SQLite (`better-sqlite3` with FTS5) backs sessions, observations, agent actions, and history.
|
|
909
277
|
|
|
910
|
-
|
|
278
|
+
---
|
|
911
279
|
|
|
912
|
-
|
|
913
|
-
- Privilege escalation: `sudo *`, `doas *`, `su *`
|
|
914
|
-
- Pipe-to-shell RCE: `curl * | sh`, `wget * | bash`, `bash <(...)`
|
|
915
|
-
- Platform secret CLI: `security *`, `secret-tool *`, `cmdkey *`
|
|
916
|
-
- Secret file reads/writes: `.env`, `~/.ssh/**`, `~/.gnupg/**`, `~/.aws/**`, `~/.config/gcloud/**`
|
|
917
|
-
- Daemon-managed secrets: `~/.personal-agent/secrets/**`, `~/.personal-agent/whatsapp/auth/**`
|
|
280
|
+
## Safety
|
|
918
281
|
|
|
919
|
-
|
|
282
|
+
Four independent layers, designed so that the bottom layer holds even when upper layers are widened:
|
|
920
283
|
|
|
921
|
-
|
|
284
|
+
1. **SDK permission model** — strict `allowedTools` whitelist in Safe mode; `bypassPermissions` in Allow mode
|
|
285
|
+
2. **PreToolUse hooks** (Claude, Safe mode) — `curl` parsed for hostname + port; daemon-API is the only legal write path
|
|
286
|
+
3. **Daemon API risk tiers** — `Autonomous` / `ReadSensitive` (X-Read-Token) / `Approve` (Bearer token)
|
|
287
|
+
4. **Absolute-block layer** — recursive deletes, `sudo`, pipe-to-shell, secret-file reads/writes, Anthropic-cloud managed-agent tools — hard-denied in **both** modes regardless of overrides
|
|
922
288
|
|
|
923
|
-
|
|
924
|
-
- **Bearer token** — required for all Approve-tier endpoints
|
|
925
|
-
- **Webhook HMAC** — GitHub webhooks verified with `X-Hub-Signature-256`
|
|
926
|
-
- **No automated financial transactions** — never trade, transfer, or pay
|
|
927
|
-
- **No automated social posting** — never post publicly on your behalf
|
|
928
|
-
- **Single-owner only** — group chats and multi-user channels are filtered at the adapter layer
|
|
929
|
-
- **Auth Health Monitor** — hourly probe of every backend's auth state, with grace periods, escalating DMs, and auto-recovery flows for Claude / Codex / Gemini
|
|
289
|
+
Plus: localhost-only API, webhook HMAC verification, no automated financial transactions, no automated social posting, single-owner adapter filtering, hourly auth-health monitoring with auto-recovery.
|
|
930
290
|
|
|
931
291
|
---
|
|
932
292
|
|
|
933
|
-
## Cost
|
|
293
|
+
## Cost
|
|
934
294
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
| Control | Default | Configurable |
|
|
295
|
+
| Control | Default | Effect when set |
|
|
938
296
|
|---|---|---|
|
|
939
|
-
| `maxConcurrentSessions` (autonomous) | 3 |
|
|
940
|
-
| `maxReactiveSessions` (DMs) | 2 |
|
|
941
|
-
| `executeTimeoutMinutes`
|
|
942
|
-
| `autonomousDailyCostCapUsd` | null
|
|
943
|
-
| `autonomousMonthlyCostCapUsd` | null
|
|
944
|
-
| Per-ProcessKey `maxBudgetUsd`
|
|
945
|
-
| `delegated_task` hard caps | `maxToolCalls=15` · `maxBudgetUsd=$0.50` · `timeoutMs=300_000` | no (compile-time) |
|
|
297
|
+
| `maxConcurrentSessions` (autonomous) | 3 | Hard semaphore |
|
|
298
|
+
| `maxReactiveSessions` (DMs) | 2 | Hard semaphore |
|
|
299
|
+
| `executeTimeoutMinutes` | 60 | Per-execute watchdog |
|
|
300
|
+
| `autonomousDailyCostCapUsd` | `null` | Priority-based skipping: `hourly_check` at 100%, `evening_review` at 150%, `morning_routine` at 200%. Reactive DMs are not gated. |
|
|
301
|
+
| `autonomousMonthlyCostCapUsd` | `null` | Alert + warn surface |
|
|
302
|
+
| Per-ProcessKey `maxBudgetUsd` | per-row | Hard cap per execute |
|
|
946
303
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
```
|
|
950
|
-
04:00 Morning Routine (Sonnet) ~$0.15
|
|
951
|
-
07:00 Morning Briefing (Sonnet) ~$0.03
|
|
952
|
-
09:00 Hourly Check (Sonnet) ~$0.05
|
|
953
|
-
12:00 Hourly Check (Sonnet) ~$0.03
|
|
954
|
-
12:55 DM response (Sonnet) ~$0.08
|
|
955
|
-
18:00 Evening Review (Sonnet) ~$0.15
|
|
956
|
-
─────────────────────────────────────────────────
|
|
957
|
-
Total ~$0.49
|
|
958
|
-
```
|
|
959
|
-
|
|
960
|
-
If you're on a Claude / Codex / Gemini subscription, none of this hits a metered API key — it consumes your subscription quota directly. Quota exhaustion is detected, dedupe-notified once per 2-hour window, and the next hourly tick retries automatically.
|
|
304
|
+
Typical day for an active user: **~$0.50** (Morning routine + briefing + 2× hourly check + 1 DM + Evening review, all on Sonnet 4.6). Quota exhaustion is detected, dedupe-notified once per 2-hour window, and retried on the next tick.
|
|
961
305
|
|
|
962
306
|
---
|
|
963
307
|
|
|
964
308
|
## Configuration
|
|
965
309
|
|
|
966
|
-
`.env` is **bootstrap-only
|
|
967
|
-
|
|
968
|
-
### `.env` (bootstrap)
|
|
969
|
-
|
|
970
|
-
```bash
|
|
971
|
-
PA_DATA_DIR=~/.personal-agent # macOS / Linux
|
|
972
|
-
# PA_DATA_DIR=C:\Users\You\.personal-agent # Windows
|
|
973
|
-
PA_API_PORT=8321
|
|
974
|
-
PA_DASHBOARD_PORT=3000
|
|
975
|
-
PA_LOG_LEVEL=info # trace | debug | info | warn | error
|
|
976
|
-
```
|
|
977
|
-
|
|
978
|
-
### Pre-seeding identifiers via env (optional)
|
|
979
|
-
|
|
980
|
-
Bot **tokens and OAuth credentials** always live in the OS keychain — they're never read from environment variables. The wizard's Messaging step (or `/connections/*`) is the single entry point. The few non-secret identifiers you *can* pre-seed for fully scripted installs:
|
|
981
|
-
|
|
982
|
-
```bash
|
|
983
|
-
# Owner identifiers (non-secret — let messaging adapters know who you are)
|
|
984
|
-
PA_SLACK_OWNER_USER_ID=U...
|
|
985
|
-
PA_TELEGRAM_OWNER_CHAT_ID=...
|
|
986
|
-
PA_DISCORD_OWNER_USER_ID=...
|
|
987
|
-
PA_WHATSAPP_ENABLED=true
|
|
988
|
-
PA_WHATSAPP_OWNER_PHONE=...
|
|
989
|
-
|
|
990
|
-
# Obsidian vault paths
|
|
991
|
-
PA_PRIMARY_VAULT_PATH=~/Documents/MyVault
|
|
992
|
-
PA_EXTERNAL_OBSIDIAN_VAULT_PATH=~/Documents/SecondaryVault
|
|
993
|
-
|
|
994
|
-
# Notion default database routing
|
|
995
|
-
PA_NOTION_DATABASE_IDS='{"tasks":"abc...","notes":"def..."}'
|
|
996
|
-
```
|
|
997
|
-
|
|
998
|
-
Everything else — bot tokens, OAuth refresh tokens, Notion API key, GitHub token, Google Maps key, Apple Calendar credentials — is set from the dashboard `/connections` page (or via the setup wizard) and lives in the keychain.
|
|
999
|
-
|
|
1000
|
-
### Runtime settings
|
|
1001
|
-
|
|
1002
|
-
The dashboard `/settings` tree exposes ~100 runtime keys. The headline ones:
|
|
310
|
+
`.env` is **bootstrap-only** (`PA_DATA_DIR`, `PA_API_PORT`, `PA_DASHBOARD_PORT`, `PA_LOG_LEVEL`). Everything else — ~100 runtime keys covering schedule, notifications, models, character, mail, voice, delegated mode — is editable from the dashboard at `:3000`, or via natural-language DMs to the agent.
|
|
1003
311
|
|
|
1004
|
-
|
|
1005
|
-
- **Notifications** — `quietHoursStart/End`, `maxNotificationsPerHour`, `maxNotificationsPerDay`, `batchIntervalMinutes`
|
|
1006
|
-
- **Sessions** — `sessionTimeoutDmMinutes`, `historyInjectionMaxMessages`, `historyInjectionMaxTokens`
|
|
1007
|
-
- **Safety** — execution mode per backend, `disallowedTools` overrides
|
|
1008
|
-
- **Models** — per-ProcessKey backend + tier, advisor on/off, advisor model
|
|
1009
|
-
- **Cost** — daily / monthly soft caps with 80% and 100% alerts
|
|
1010
|
-
- **Mail** — provider list, poll interval, IMAP IDLE on/off
|
|
1011
|
-
- **Character** — 1,000-char free-form tone description
|
|
1012
|
-
- **Language** — `primaryLanguage` nudges output language for DMs, knowledge, and vault writes
|
|
1013
|
-
- **Voice** — `voiceTranscriptionEnabled`, `voiceTranscriptionModel`, `voiceTranscriptionPrimaryLanguage`
|
|
1014
|
-
- **Delegated task mode** — kill switch, per-day quota, heavy-tier opt-in, cache / pool / structured-output toggles
|
|
1015
|
-
|
|
1016
|
-
…or just DM the agent: *"Don't run hourly checks on weekends."*
|
|
312
|
+
Bot tokens and OAuth credentials always live in the OS keychain, never in environment variables.
|
|
1017
313
|
|
|
1018
314
|
---
|
|
1019
315
|
|
|
1020
316
|
## Platform support
|
|
1021
317
|
|
|
1022
|
-
|
|
|
318
|
+
| | macOS | Linux | Windows |
|
|
1023
319
|
|---|---|---|---|
|
|
1024
|
-
| **Secret storage** | Keychain
|
|
1025
|
-
| **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `
|
|
320
|
+
| **Secret storage** | Keychain | `secret-tool` (libsecret) → AES file fallback | DPAPI → AES file fallback |
|
|
321
|
+
| **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `FolderBrowserDialog` |
|
|
1026
322
|
| **Process tree kill** | POSIX process group | POSIX process group | `taskkill /T /F` |
|
|
1027
|
-
| **Log tailing (`-f`)** | Built-in Node tailer | Built-in Node tailer | Built-in Node tailer (no `tail` binary needed) |
|
|
1028
|
-
| **Console windows** | n/a | n/a | Background spawns hide the console window |
|
|
1029
|
-
|
|
1030
|
-
### WSL
|
|
1031
|
-
|
|
1032
|
-
GNOME Keyring / D-Bus are typically unavailable. Aitne falls back to the encrypted file store. Set:
|
|
1033
323
|
|
|
1034
|
-
|
|
1035
|
-
export PA_MASTER_PASSWORD='use-a-long-random-string'
|
|
1036
|
-
```
|
|
324
|
+
WSL falls back to the encrypted file store — set `PA_MASTER_PASSWORD` to a long random string. Windows users hitting `ENAMETOOLONG` on install should enable long paths via `LongPathsEnabled=1` registry key.
|
|
1037
325
|
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
```bash
|
|
1041
|
-
sudo apt-get install libsecret-tools # Debian / Ubuntu
|
|
1042
|
-
sudo dnf install libsecret # Fedora
|
|
1043
|
-
sudo pacman -S libsecret # Arch
|
|
1044
|
-
```
|
|
1045
|
-
|
|
1046
|
-
### Windows long paths
|
|
1047
|
-
|
|
1048
|
-
If `npm install` fails with `ENAMETOOLONG`, run from elevated PowerShell and reboot:
|
|
1049
|
-
|
|
1050
|
-
```powershell
|
|
1051
|
-
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
|
|
1052
|
-
-Name "LongPathsEnabled" -Value 1
|
|
1053
|
-
```
|
|
326
|
+
Common gotchas: [docs/troubleshooting.md](docs/troubleshooting.md)
|
|
1054
327
|
|
|
1055
328
|
---
|
|
1056
329
|
|
|
1057
|
-
##
|
|
1058
|
-
|
|
1059
|
-
### `aitne start` says "dist not found"
|
|
1060
|
-
|
|
1061
|
-
The build did not complete. Run `aitne build` and check for TypeScript errors.
|
|
1062
|
-
|
|
1063
|
-
### Port already in use
|
|
1064
|
-
|
|
1065
|
-
Change `PA_API_PORT` (or `PA_DASHBOARD_PORT`) in `.env`. To find the conflicting process:
|
|
1066
|
-
|
|
1067
|
-
```bash
|
|
1068
|
-
# macOS / Linux
|
|
1069
|
-
lsof -i :8321
|
|
1070
|
-
|
|
1071
|
-
# Windows
|
|
1072
|
-
netstat -ano | findstr :8321
|
|
1073
|
-
```
|
|
1074
|
-
|
|
1075
|
-
### `aitne` not found after `npm install -g`
|
|
1076
|
-
|
|
1077
|
-
```bash
|
|
1078
|
-
npm config get prefix
|
|
1079
|
-
# add the printed prefix's `bin/` (or its root on Windows) to your PATH
|
|
1080
|
-
```
|
|
330
|
+
## Documentation
|
|
1081
331
|
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
332
|
+
| Topic | Doc |
|
|
333
|
+
|---|---|
|
|
334
|
+
| Documentation index | [docs/index.md](docs/index.md) |
|
|
335
|
+
| Setup walkthrough | [docs/setup-guide.md](docs/setup-guide.md) |
|
|
336
|
+
| Troubleshooting | [docs/troubleshooting.md](docs/troubleshooting.md) |
|
|
337
|
+
| Maintenance playbook | [docs/maintenance.md](docs/maintenance.md) |
|
|
338
|
+
| Advisor model | [docs/advisor.md](docs/advisor.md) |
|
|
1085
339
|
|
|
1086
|
-
|
|
1087
|
-
aitne stop
|
|
1088
|
-
rm ~/.personal-agent/data/personal_agent.db*
|
|
1089
|
-
# Remove-Item "$env:USERPROFILE\.personal-agent\data\personal_agent.db*" # Windows
|
|
1090
|
-
aitne start
|
|
1091
|
-
```
|
|
340
|
+
---
|
|
1092
341
|
|
|
1093
|
-
|
|
342
|
+
## Tech stack
|
|
1094
343
|
|
|
1095
|
-
|
|
1096
|
-
aitne doctor # confirms which backend failed
|
|
1097
|
-
claude auth login # re-auth Claude
|
|
1098
|
-
codex login --device-auth # re-auth Codex
|
|
1099
|
-
# Gemini re-auth happens automatically via the dashboard banner
|
|
1100
|
-
```
|
|
344
|
+
Daemon: Node.js 22 · Hono · `@anthropic-ai/claude-agent-sdk` · `@slack/bolt` · `telegraf` · `discord.js` · `@whiskeysockets/baileys` · `googleapis` · `@azure/msal-node` · `@notionhq/client` · `@octokit/rest` · `tsdav` · `chokidar` · `node-cron` · `better-sqlite3` (FTS5) · `pino` · `zod`
|
|
1101
345
|
|
|
1102
|
-
|
|
346
|
+
Dashboard: Next.js 16 · React 19 · Tailwind 4 · shadcn/ui · TanStack Query · Recharts · Monaco
|
|
1103
347
|
|
|
1104
|
-
|
|
1105
|
-
aitne audit --since 24h --result failed --detail
|
|
1106
|
-
```
|
|
348
|
+
Monorepo: pnpm 10 workspaces · Turborepo · TypeScript 5.8 · Vitest 3 (100% coverage gate on a curated pure-logic subset)
|
|
1107
349
|
|
|
1108
350
|
---
|
|
1109
351
|
|
|
1110
|
-
##
|
|
1111
|
-
|
|
1112
|
-
For contributors:
|
|
1113
|
-
|
|
1114
|
-
```bash
|
|
1115
|
-
git clone https://github.com/Aitne-sh/Aitne.git aitne
|
|
1116
|
-
cd aitne
|
|
1117
|
-
corepack enable
|
|
1118
|
-
pnpm install
|
|
1119
|
-
pnpm start # build (if stale) + launch in background
|
|
1120
|
-
pnpm dev # foreground mode with full stdio
|
|
1121
|
-
pnpm test # vitest — unit tests across packages/*
|
|
1122
|
-
pnpm test:watch
|
|
1123
|
-
pnpm lint # turbo run lint
|
|
1124
|
-
pnpm clean # remove all build artifacts and node_modules
|
|
1125
|
-
```
|
|
1126
|
-
|
|
1127
|
-
### Tech stack
|
|
352
|
+
## Contributing
|
|
1128
353
|
|
|
1129
|
-
|
|
1130
|
-
|---|---|
|
|
1131
|
-
| **Daemon** | Node.js 22 · Hono · `@anthropic-ai/claude-agent-sdk` · `@slack/bolt` · `telegraf` · `discord.js` · `@whiskeysockets/baileys` · `googleapis` · `@azure/msal-node` · `@notionhq/client` · `@octokit/rest` · `tsdav` · `chokidar` · `node-cron` · `heap-js` · `pino` · `zod` |
|
|
1132
|
-
| **Storage** | `better-sqlite3` (WAL + FTS5 trigram) · OS Keychain · plain Markdown |
|
|
1133
|
-
| **Dashboard** | Next.js 16 (App Router) · React 19 · Tailwind CSS 4 · shadcn/ui · TanStack Query · Recharts · Monaco Editor |
|
|
1134
|
-
| **Voice** | `ffmpeg-static` · `@huggingface/transformers` (Whisper, opt-in) |
|
|
1135
|
-
| **Monorepo** | pnpm 10.x workspaces · Turborepo · TypeScript 5.8 · Vitest 3 |
|
|
1136
|
-
|
|
1137
|
-
### Conventions
|
|
354
|
+
Issues and PRs welcome. Conventions:
|
|
1138
355
|
|
|
1139
356
|
- All code, comments, tests, and user-facing text are in **English**
|
|
1140
357
|
- TypeScript throughout, camelCase, ESM with `.js` import extensions
|
|
1141
358
|
- Tests colocated with source as `foo.ts` + `foo.test.ts`
|
|
1142
|
-
-
|
|
1143
|
-
- The `docs/design/` tree (v4.16) is the authoritative spec; `packages/daemon/src/` is the source of truth when they diverge
|
|
1144
|
-
|
|
1145
|
-
### Source-of-truth pointers
|
|
1146
|
-
|
|
1147
|
-
| If you need to… | Start in |
|
|
1148
|
-
|---|---|
|
|
1149
|
-
| Understand startup order | `packages/daemon/src/index.ts` |
|
|
1150
|
-
| Change event routing | `src/core/dispatcher.ts` + `src/core/event-bus.ts` |
|
|
1151
|
-
| Add a backend or change tier mapping | `packages/shared/src/process-key.ts` + `src/core/backends/backend-router.ts` |
|
|
1152
|
-
| Add an API route | `src/api/routes/` + register in `src/api/server.ts` |
|
|
1153
|
-
| Add an integration | `packages/shared/src/integrations.ts` (registry) + `src/services/<name>/` + optional `src/observers/` |
|
|
1154
|
-
| Edit a built-in skill | `agent-assets/skills/<slug>/SKILL.md` |
|
|
1155
|
-
| Edit an event task flow | `agent-assets/task-flows/<eventType>.md` |
|
|
1156
|
-
| Change risk classification | `src/safety/risk-classifier.ts` |
|
|
1157
|
-
| Change the absolute-block layer | `src/safety/always-disallowed.ts` |
|
|
1158
|
-
| Change auth health / recovery | `src/core/backends/auth-health-monitor.ts` + `auth-recovery.ts` |
|
|
359
|
+
- `packages/daemon/src/` is the source of truth
|
|
1159
360
|
|
|
1160
361
|
---
|
|
1161
362
|
|
|
1162
363
|
## FAQ
|
|
1163
364
|
|
|
1164
|
-
**Is Aitne a chatbot?**
|
|
1165
|
-
No. It's a daemon. It also responds to chat, but the more interesting half is what it does *while you're not looking at it*.
|
|
1166
|
-
|
|
1167
|
-
**Does it phone home?**
|
|
1168
|
-
No. The daemon binds to `127.0.0.1` only. There is no telemetry. Verify with `lsof` and `nettop`.
|
|
1169
|
-
|
|
1170
|
-
**Where do my secrets live?**
|
|
1171
|
-
In your OS-native credential store (macOS Keychain / libsecret / DPAPI). Never in `.env`. On systems without a credential store, in an AES-encrypted file under `~/.personal-agent/secrets/`.
|
|
1172
|
-
|
|
1173
|
-
**Can I bring my own AI?**
|
|
1174
|
-
Yes — Claude Code, OpenAI Codex, and Google Gemini CLI are all supported. Pick one or all three. Per-process tier routing lets you mix-and-match.
|
|
1175
|
-
|
|
1176
|
-
**Do I need an API key?**
|
|
1177
|
-
No metered API key required — Aitne uses your subscription quota via the official CLIs (`claude auth login`, `codex login`, `gemini`). If you'd rather pay-as-you-go, supply `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `GEMINI_API_KEY` in the wizard.
|
|
1178
|
-
|
|
1179
|
-
**Can I edit the agent's memory directly?**
|
|
1180
|
-
Yes — that's the entire point. Open `~/.personal-agent/context/today.md` in your editor, change anything, save. The agent picks up your edits on the next routine. Any edit is *just text in a file* — no proprietary format, no migration headaches if you uninstall.
|
|
365
|
+
**Is Aitne a chatbot?** No — it's a daemon. It also responds to chat, but the more interesting half is what it does while you're not looking at it.
|
|
1181
366
|
|
|
1182
|
-
**
|
|
1183
|
-
Aitne can use your existing Obsidian vault as the primary memory store. The agent reads vault files directly and writes via the official Obsidian CLI. Your wiki links keep working. Your daily notes get appended to.
|
|
367
|
+
**Does it phone home?** No. The daemon binds to `127.0.0.1` only. No telemetry. Verify with `lsof` and `nettop`.
|
|
1184
368
|
|
|
1185
|
-
**Can I
|
|
1186
|
-
Yes. Register them in the dashboard `/connections` page; the daemon writes the per-session MCP config into each backend's session workdir before launching, so all your MCP tools are available transparently.
|
|
369
|
+
**Can I edit memory directly?** Yes. Open `~/.personal-agent/context/today.md`, change anything, save. The agent picks up your edits on the next routine.
|
|
1187
370
|
|
|
1188
|
-
**Do my existing Claude Code / Codex / Gemini settings work?**
|
|
1189
|
-
Yes. Aitne reads your `~/.claude/`, `~/.codex/`, `~/.gemini/` configs on session init and layers its persona on top. Custom skills, slash commands, MCP servers, and plugins all carry over. See [Bring your own harness](#bring-your-own-harness-byoh).
|
|
371
|
+
**Do my existing Claude Code / Codex / Gemini settings work?** Yes. Aitne reads `~/.claude/`, `~/.codex/`, and `~/.gemini/` on session init and layers its persona on top. (`~/.opencode/` is recognised but the OpenCode runtime is coming soon.)
|
|
1190
372
|
|
|
1191
|
-
**
|
|
1192
|
-
The AI backends and reactive messaging need internet (to hit those services). The daemon, dashboard, observers (Git, Obsidian local), and Markdown memory are entirely offline.
|
|
373
|
+
**Is this for my team?** No — single-owner by design. Group chats and multi-user channels are filtered at the adapter layer.
|
|
1193
374
|
|
|
1194
|
-
**Does it
|
|
1195
|
-
Yes. Talk to it in your native language — Japanese, German, Spanish, anything. The LLM handles it; the `primaryLanguage` setting nudges DM / knowledge / vault outputs into that language too. Implementation code remains English-only.
|
|
375
|
+
**Does it work without internet?** Backends and reactive messaging need internet. The daemon, dashboard, observers, and Markdown memory are entirely offline.
|
|
1196
376
|
|
|
1197
|
-
**
|
|
1198
|
-
No — Aitne is **single-owner by design**. Group chats and multi-user channels are filtered at the adapter layer. If you want a team agent, run one Aitne per teammate.
|
|
1199
|
-
|
|
1200
|
-
**How do I uninstall?**
|
|
1201
|
-
`aitne uninstall`. It will offer to wipe `~/.personal-agent` or keep it for re-installation.
|
|
377
|
+
**How do I uninstall?** `aitne uninstall` — offers to wipe `~/.personal-agent` or keep it for re-installation.
|
|
1202
378
|
|
|
1203
379
|
---
|
|
1204
380
|
|
|
1205
381
|
## License
|
|
1206
382
|
|
|
1207
|
-
MIT —
|
|
1208
|
-
|
|
1209
|
-
---
|
|
1210
|
-
|
|
1211
|
-
<div align="center">
|
|
1212
|
-
|
|
1213
|
-
**Aitne — Always on. Always yours.**
|
|
1214
|
-
|
|
1215
|
-
[Issues](https://github.com/Aitne-sh/Aitne/issues) · [Discussions](https://github.com/Aitne-sh/Aitne/discussions) · [npm](https://www.npmjs.com/package/@aitne-sh/aitne)
|
|
1216
|
-
|
|
1217
|
-
</div>
|
|
383
|
+
MIT — see [LICENSE](./LICENSE).
|