@aitne-sh/aitne 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +251 -164
- package/agent-assets/agent-profiles/_safety.md +3 -3
- package/agent-assets/agent-profiles/browser-task.md +108 -0
- package/agent-assets/agent-profiles/conversational.md +3 -3
- package/agent-assets/agent-profiles/profile-importer.md +2 -2
- package/agent-assets/agent-profiles/routine-fetch-window.md +30 -19
- package/agent-assets/agents/context-index-reconcile/agent.md +52 -0
- package/agent-assets/agents/evening-review/agent.md +53 -0
- package/agent-assets/agents/hourly-check/agent.md +62 -0
- package/agent-assets/agents/monthly-review/agent.md +55 -0
- package/agent-assets/agents/morning-routine/agent.md +78 -0
- package/agent-assets/agents/roadmap-maintenance/agent.md +52 -0
- package/agent-assets/agents/skill-curation/agent.md +52 -0
- package/agent-assets/agents/user-profile-sweep-evening/agent.md +48 -0
- package/agent-assets/agents/user-profile-sweep-morning/agent.md +53 -0
- package/agent-assets/agents/weekly-review/agent.md +51 -0
- package/agent-assets/docs/concepts/agent-day.md +13 -11
- package/agent-assets/docs/concepts/auth-health.md +47 -10
- package/agent-assets/docs/concepts/backends-and-tiers.md +66 -31
- package/agent-assets/docs/concepts/costs-and-quotas.md +51 -15
- package/agent-assets/docs/concepts/delegated-mode.md +56 -17
- package/agent-assets/docs/concepts/memory-model.md +77 -34
- package/agent-assets/docs/concepts/observations.md +49 -11
- package/agent-assets/docs/concepts/process-keys.md +56 -22
- package/agent-assets/docs/concepts/routines.md +60 -33
- package/agent-assets/docs/concepts/safety-and-execution.md +50 -21
- package/agent-assets/docs/concepts/safety-model.md +61 -50
- package/agent-assets/docs/concepts/skills.md +34 -18
- package/agent-assets/docs/features/integrations/browser-history.md +196 -0
- package/agent-assets/docs/features/integrations/calendar.md +39 -29
- package/agent-assets/docs/features/integrations/git.md +18 -7
- package/agent-assets/docs/features/integrations/github.md +84 -33
- package/agent-assets/docs/features/integrations/mail.md +61 -17
- package/agent-assets/docs/features/integrations/notion.md +18 -6
- package/agent-assets/docs/features/integrations/obsidian.md +28 -5
- package/agent-assets/docs/features/lifestyle/git.md +44 -40
- package/agent-assets/docs/features/lifestyle/reading.md +57 -22
- package/agent-assets/docs/features/lifestyle/receipts.md +51 -21
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +77 -14
- package/agent-assets/docs/features/memory-files/agent-journal.md +132 -53
- package/agent-assets/docs/features/memory-files/agent-lessons.md +177 -0
- package/agent-assets/docs/features/memory-files/projects.md +73 -17
- package/agent-assets/docs/features/memory-files/roadmap.md +54 -11
- package/agent-assets/docs/features/memory-files/schedule.md +113 -70
- package/agent-assets/docs/features/memory-files/today.md +46 -21
- package/agent-assets/docs/features/memory-files/user-profile.md +63 -33
- package/agent-assets/docs/features/messaging/bang-commands.md +113 -36
- package/agent-assets/docs/features/messaging/dashboard-chat.md +43 -21
- package/agent-assets/docs/features/messaging/discord.md +35 -4
- package/agent-assets/docs/features/messaging/overview.md +37 -19
- package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +94 -27
- package/agent-assets/docs/features/messaging/slack.md +67 -14
- package/agent-assets/docs/features/messaging/telegram.md +22 -8
- package/agent-assets/docs/features/messaging/whatsapp.md +71 -17
- package/agent-assets/docs/features/operations/activity-and-conversations.md +45 -15
- package/agent-assets/docs/features/operations/approvals.md +49 -16
- package/agent-assets/docs/features/operations/backend-routing.md +68 -16
- package/agent-assets/docs/features/operations/cost-tracking.md +84 -17
- package/agent-assets/docs/features/operations/managed-chromium.md +222 -0
- package/agent-assets/docs/features/operations/notifications.md +52 -11
- package/agent-assets/docs/features/operations/quiet-hours.md +64 -40
- package/agent-assets/docs/features/operations/schedule-approaching.md +54 -24
- package/agent-assets/docs/features/routines/custom-routines.md +98 -26
- package/agent-assets/docs/features/routines/evening-review.md +82 -21
- package/agent-assets/docs/features/routines/hourly-check.md +149 -29
- package/agent-assets/docs/features/routines/morning-routine.md +54 -35
- package/agent-assets/docs/features/routines/weekly-review.md +46 -21
- package/agent-assets/docs/features/wiki/commands.md +26 -16
- package/agent-assets/docs/features/wiki/cost-and-approval.md +241 -0
- package/agent-assets/docs/features/wiki/dashboard.md +256 -0
- package/agent-assets/docs/features/wiki/overview.md +70 -12
- package/agent-assets/docs/features/wiki/search.md +248 -0
- package/agent-assets/docs/features/wiki/workspaces.md +254 -0
- package/agent-assets/docs/getting-started/01-what-is-this.md +34 -23
- package/agent-assets/docs/getting-started/02-first-steps.md +17 -10
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +25 -14
- package/agent-assets/docs/getting-started/04-first-day.md +39 -21
- package/agent-assets/docs/glossary.md +235 -24
- package/agent-assets/docs/guides/add-a-custom-routine.md +63 -23
- package/agent-assets/docs/guides/backup-and-restore.md +80 -16
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +57 -26
- package/agent-assets/docs/guides/build-your-wiki.md +22 -9
- package/agent-assets/docs/guides/change-which-model-handles-x.md +64 -10
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +66 -15
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +32 -14
- package/agent-assets/docs/guides/import-knowledge-file.md +50 -40
- package/agent-assets/docs/guides/install-and-run.md +49 -20
- package/agent-assets/docs/guides/maintain-wiki-health.md +35 -10
- package/agent-assets/docs/guides/migrate-machines.md +74 -18
- package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +111 -60
- package/agent-assets/docs/guides/pause-the-agent.md +69 -24
- package/agent-assets/docs/guides/reinstall-cleanly.md +88 -18
- package/agent-assets/docs/guides/setup-wizard.md +116 -54
- package/agent-assets/docs/guides/switch-default-backend.md +62 -16
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +30 -14
- package/agent-assets/docs/reference/api.md +153 -32
- package/agent-assets/docs/reference/cli-commands.md +39 -18
- package/agent-assets/docs/reference/config.md +241 -49
- package/agent-assets/docs/reference/disallowed-tools.md +34 -13
- package/agent-assets/docs/reference/keyboard-shortcuts.md +34 -10
- package/agent-assets/docs/reference/knowledge-layout.md +629 -0
- package/agent-assets/docs/reference/process-keys.md +62 -6
- package/agent-assets/docs/reference/skills.md +41 -14
- package/agent-assets/docs/troubleshooting/auth-failed.md +51 -21
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +97 -28
- package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +86 -22
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +68 -24
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +80 -20
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +73 -21
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +33 -8
- package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +126 -54
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +29 -12
- package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
- package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +1 -1
- package/agent-assets/optimizer-skills/skill-curation/SKILL.md +1 -1
- package/agent-assets/sandbox/linux/aitne-chromium.apparmor +91 -0
- package/agent-assets/sandbox/macos/aitne-chromium.sb +156 -0
- package/agent-assets/skills/agent-actions/SKILL.md +25 -41
- package/agent-assets/skills/agent-create/SKILL.md +158 -0
- package/agent-assets/skills/attach/SKILL.md +10 -29
- package/agent-assets/skills/browser-history/SKILL.md +211 -0
- package/agent-assets/skills/browser-history-respond/SKILL.md +111 -0
- package/agent-assets/skills/browser-task/SKILL.md +164 -0
- package/agent-assets/skills/context/SKILL.md +35 -44
- package/agent-assets/skills/context/curation.json +14 -14
- package/agent-assets/skills/context/references/api.md +52 -40
- package/agent-assets/skills/context/references/required-frontmatter.md +13 -12
- package/agent-assets/skills/context/references/snapshot-files.md +18 -17
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +8 -8
- package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
- package/agent-assets/skills/docs-search/SKILL.md +23 -34
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +17 -114
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +17 -113
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +17 -113
- package/agent-assets/skills/external-services/SKILL.md +3 -3
- package/agent-assets/skills/external-services/SKILL.native.claude.md +7 -7
- package/agent-assets/skills/external-services/SKILL.native.codex.md +7 -7
- package/agent-assets/skills/external-services/SKILL.native.gemini.md +4 -4
- package/agent-assets/skills/external-services/references/calendar-apple.md +2 -2
- package/agent-assets/skills/external-services/references/calendar-outlook.md +1 -1
- package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
- package/agent-assets/skills/external-services/references/obsidian.md +2 -2
- package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
- package/agent-assets/skills/gmail-lifestyle/SKILL.md +11 -83
- package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
- package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
- package/agent-assets/skills/mail/SKILL.delegated.claude.md +15 -18
- package/agent-assets/skills/mail/SKILL.delegated.codex.md +11 -6
- package/agent-assets/skills/mail/SKILL.delegated.gemini.md +11 -6
- package/agent-assets/skills/mail/SKILL.md +10 -18
- package/agent-assets/skills/mail/SKILL.native.claude.md +8 -7
- 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 +10 -3
- package/agent-assets/skills/mail/references/examples.md +2 -1
- package/agent-assets/skills/mail/references/providers.md +1 -1
- package/agent-assets/skills/managed-tasks/SKILL.md +48 -81
- package/agent-assets/skills/managed-tasks/references/errors.md +33 -19
- package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
- package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +7 -5
- package/agent-assets/skills/management-policy/SKILL.md +42 -42
- package/agent-assets/skills/management-policy/curation.json +1 -1
- package/agent-assets/skills/management-policy/references/policy-workflow.md +11 -12
- package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +1 -1
- package/agent-assets/skills/notify/SKILL.md +14 -16
- package/agent-assets/skills/notify/references/priority.md +28 -20
- package/agent-assets/skills/notion/SKILL.delegated.claude.md +2 -2
- package/agent-assets/skills/notion/SKILL.delegated.codex.md +2 -2
- package/agent-assets/skills/notion/SKILL.delegated.gemini.md +2 -2
- package/agent-assets/skills/notion/SKILL.md +17 -17
- package/agent-assets/skills/notion/SKILL.native.claude.md +11 -7
- package/agent-assets/skills/notion/SKILL.native.codex.md +10 -5
- package/agent-assets/skills/notion/SKILL.native.gemini.md +10 -5
- package/agent-assets/skills/observations/SKILL.md +29 -28
- package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
- package/agent-assets/skills/project-doc/SKILL.md +10 -7
- package/agent-assets/skills/project-doc/curation.json +3 -3
- package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +8 -5
- package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +5 -5
- package/agent-assets/skills/reading/SKILL.md +18 -42
- package/agent-assets/skills/reading/references/reading-taste.md +7 -7
- package/agent-assets/skills/roadmap/SKILL.md +8 -24
- package/agent-assets/skills/roadmap/curation.json +1 -1
- package/agent-assets/skills/roadmap/references/api.md +21 -11
- package/agent-assets/skills/roadmap/references/cross-check.md +15 -8
- package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
- package/agent-assets/skills/roadmap/references/migration.md +12 -10
- package/agent-assets/skills/roadmap/references/retention.md +18 -0
- package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +1 -1
- package/agent-assets/skills/schedule/SKILL.md +41 -50
- package/agent-assets/skills/schedule/references/batch.md +2 -2
- package/agent-assets/skills/schedule/references/errors.md +7 -4
- package/agent-assets/skills/schedule/references/importance.md +23 -0
- package/agent-assets/skills/schedule/references/model-selection.md +3 -3
- package/agent-assets/skills/schedule/references/recurrence-rule.md +7 -5
- package/agent-assets/skills/scheduled-managed-task/SKILL.md +77 -70
- package/agent-assets/skills/today/SKILL.md +24 -83
- package/agent-assets/skills/today/curation.json +3 -3
- package/agent-assets/skills/today/references/agent-plan-lifecycle.md +6 -5
- package/agent-assets/skills/today/references/today-skeleton.md +66 -0
- package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
- package/agent-assets/skills/today/seeds/section-shape.seed.json +7 -7
- package/agent-assets/skills/user-interview/SKILL.md +21 -93
- package/agent-assets/skills/user-interview/references/op-briefing.md +3 -3
- package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
- package/agent-assets/skills/user-interview/references/op-morning.md +1 -1
- package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +9 -1
- package/agent-assets/skills/user-profile/SKILL.md +29 -39
- package/agent-assets/skills/user-profile/curation.json +4 -4
- package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
- package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +8 -8
- package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +6 -6
- package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
- package/agent-assets/skills/wiki/wiki-compile/SKILL.md +9 -8
- package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
- package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
- package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
- package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
- package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
- package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
- package/agent-assets/system-prompts/routine-fetch-window.md +22 -12
- package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +4 -2
- package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +4 -2
- package/agent-assets/task-flows/_partials/capture-user-info.md +2 -2
- package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +1 -1
- package/agent-assets/task-flows/_partials/dm-intent.project.md +9 -9
- package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
- package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +3 -2
- package/agent-assets/task-flows/_partials/notion-acquire.notion.md +10 -5
- package/agent-assets/task-flows/browser_task.md +84 -0
- package/agent-assets/task-flows/github.assigned.md +1 -1
- package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
- package/agent-assets/task-flows/github.workflow_run.failed.md +2 -2
- package/agent-assets/task-flows/knowledge.import.md +14 -14
- package/agent-assets/task-flows/message.received.dm.md +13 -4
- package/agent-assets/task-flows/message.received.dm_first.md +7 -3
- package/agent-assets/task-flows/routine.custom.md +3 -3
- package/agent-assets/task-flows/routine.evening_review.md +88 -8
- package/agent-assets/task-flows/routine.fetch_window.md +2 -2
- package/agent-assets/task-flows/routine.hourly_check.md +16 -12
- package/agent-assets/task-flows/routine.monthly_review.md +93 -21
- package/agent-assets/task-flows/routine.morning_routine_journal.md +119 -97
- package/agent-assets/task-flows/routine.morning_routine_today.md +43 -43
- package/agent-assets/task-flows/routine.research_cluster_update.md +35 -0
- package/agent-assets/task-flows/routine.research_dispatch.md +38 -0
- package/agent-assets/task-flows/routine.research_offer_dm.md +125 -0
- package/agent-assets/task-flows/routine.research_wiki_summary.md +53 -0
- package/agent-assets/task-flows/routine.roadmap_refresh.md +10 -10
- package/agent-assets/task-flows/routine.today_refresh.md +4 -4
- package/agent-assets/task-flows/routine.user_profile_sweep.md +10 -10
- package/agent-assets/task-flows/routine.weekly_review.md +114 -24
- package/agent-assets/task-flows/schedule.approaching.md +0 -1
- package/agent-assets/task-flows/scheduled.dm.md +5 -5
- package/agent-assets/task-flows/scheduled.task.md +4 -4
- package/agent-assets/task-flows/setup.initial.md +21 -21
- package/agent-assets/task-flows/setup.update.md +2 -2
- package/agent-assets/task-flows/wiki.trace.md +1 -1
- package/agent-assets/templates/README.md +27 -20
- package/agent-assets/templates/_index.md +42 -26
- package/agent-assets/templates/_manifest.json +34 -99
- package/agent-assets/templates/{user → identity}/_index.md +1 -1
- package/agent-assets/templates/{user → identity}/profile.md +2 -2
- package/agent-assets/templates/{dossiers → knowledge/dossiers}/_index.md +1 -1
- package/agent-assets/templates/{projects → plans/projects}/_active.base +1 -1
- package/agent-assets/templates/policies/_index.md +21 -0
- package/agent-assets/templates/{rules → policies}/journal-export.md +1 -1
- package/agent-assets/templates/{rules → policies}/journal-format.md +5 -5
- package/agent-assets/templates/{rules/policies → policies/management-captures}/_index.md +2 -2
- package/agent-assets/templates/{rules → policies}/management.md +3 -3
- package/agent-assets/templates/{rules → policies}/mcp.md +1 -1
- package/agent-assets/templates/{rules → policies}/redaction.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/_index.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/evening.md +2 -2
- package/agent-assets/templates/{routines → policies/routines}/hourly.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/monthly.md +2 -2
- package/bin/aitne.mjs +58 -15
- package/package.json +5 -4
- package/scripts/commands/doctor.mjs +25 -10
- package/scripts/commands/run-now.mjs +6 -21
- package/scripts/lib/ports.d.mts +27 -0
- package/scripts/lib/ports.mjs +36 -0
- package/scripts/lib/process-identity.d.mts +46 -0
- package/scripts/lib/process-identity.mjs +193 -0
- package/scripts/lib/read-api-token.mjs +176 -0
- package/scripts/start.mjs +16 -5
- package/agent-assets/docs/features/lifestyle/travel-time.md +0 -58
- package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +0 -59
- package/agent-assets/skills/schedule/references/recurring.md +0 -185
- package/agent-assets/templates/context-index.md +0 -42
- package/agent-assets/templates/rules/_index.md +0 -19
- /package/agent-assets/templates/{user → identity}/expertise.md +0 -0
- /package/agent-assets/templates/{user → identity}/goals.md +0 -0
- /package/agent-assets/templates/{user → identity}/people.md +0 -0
- /package/agent-assets/templates/{user → identity}/personal.md +0 -0
- /package/agent-assets/templates/{user → identity}/work.md +0 -0
- /package/agent-assets/templates/{agent/journal.md → journal/agent.md} +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/evening.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/hourly.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/monthly.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/morning.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/roadmap.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/weekly.md +0 -0
- /package/agent-assets/templates/{projects → plans/projects}/_index.md +0 -0
- /package/agent-assets/templates/{roadmap.md → plans/roadmap.md} +0 -0
- /package/agent-assets/templates/{routines → policies/routines}/morning.md +0 -0
- /package/agent-assets/templates/{routines → policies/routines}/weekly.md +0 -0
- /package/agent-assets/templates/{agent → state}/profile-questions.md +0 -0
- /package/agent-assets/templates/{today.md → state/today.md} +0 -0
|
@@ -7,95 +7,167 @@ aliases:
|
|
|
7
7
|
- ingest full refused
|
|
8
8
|
- wiki approval pending
|
|
9
9
|
- wiki dirty tree refused
|
|
10
|
+
- compile full uncommitted changes
|
|
10
11
|
category: troubleshooting
|
|
11
12
|
summary: |
|
|
12
|
-
`!compile full`
|
|
13
|
-
pre-compile gate)
|
|
13
|
+
`!compile full` stopped before running and replied with one of three
|
|
14
|
+
things: "uncommitted changes" (the git pre-compile gate), "Sent for
|
|
15
|
+
approval" (the cost gate), or "Wiki is not enabled" (no workspace).
|
|
14
16
|
This entry tells you how to clear each branch.
|
|
15
|
-
section:
|
|
17
|
+
section: troubleshooting
|
|
16
18
|
tags:
|
|
17
19
|
- troubleshooting
|
|
18
20
|
- wiki
|
|
19
21
|
- cost
|
|
20
22
|
- git
|
|
23
|
+
- approval
|
|
21
24
|
status: stable
|
|
22
25
|
ask_examples:
|
|
23
26
|
- Why did !compile full refuse to run?
|
|
24
27
|
- Where do I approve a pending wiki compile?
|
|
25
28
|
- Why does !compile full want a clean git tree?
|
|
29
|
+
- What does "Sent for approval" mean after !compile full?
|
|
26
30
|
locale: en-US
|
|
27
31
|
created: 2026-05-12
|
|
28
|
-
updated: 2026-05-
|
|
32
|
+
updated: 2026-05-28
|
|
29
33
|
keywords:
|
|
30
|
-
- wiki
|
|
31
|
-
-
|
|
32
|
-
-
|
|
34
|
+
- wiki compile blocked
|
|
35
|
+
- compile cost gate
|
|
36
|
+
- compile approval
|
|
33
37
|
- full rebuild blocked
|
|
38
|
+
- uncommitted changes
|
|
39
|
+
process_keys:
|
|
40
|
+
- wiki.compile
|
|
41
|
+
api_endpoints:
|
|
42
|
+
- GET /api/approvals
|
|
43
|
+
- POST /api/approvals/:id/approve
|
|
34
44
|
related:
|
|
35
45
|
- features/wiki/commands
|
|
46
|
+
- features/wiki/cost-and-approval
|
|
36
47
|
- guides/budget-and-cost-for-wiki
|
|
37
48
|
- features/wiki/overview
|
|
49
|
+
prerequisites:
|
|
50
|
+
- features/wiki/overview
|
|
38
51
|
ui_anchors:
|
|
39
52
|
- /settings/wiki
|
|
40
|
-
- /
|
|
53
|
+
- /
|
|
41
54
|
---
|
|
42
55
|
|
|
43
56
|
# `!compile full` Is Blocked
|
|
44
57
|
|
|
45
58
|
## What You See
|
|
46
59
|
|
|
47
|
-
You ran `!compile full` and the bang reply
|
|
60
|
+
You ran `!compile full` and the bang reply was one of these. Jump to the
|
|
61
|
+
matching section:
|
|
62
|
+
|
|
63
|
+
- **"the external vault has uncommitted changes"** — the git pre-compile
|
|
64
|
+
gate. See [Uncommitted Changes](#uncommitted-changes).
|
|
65
|
+
- **"Sent for approval"** — the cost gate. See [Sent for
|
|
66
|
+
Approval](#sent-for-approval).
|
|
67
|
+
- **"Wiki is not enabled"** — no workspace exists. See [Not
|
|
68
|
+
Enabled](#not-enabled).
|
|
69
|
+
|
|
70
|
+
## Uncommitted Changes
|
|
48
71
|
|
|
49
|
-
|
|
50
|
-
changes."
|
|
51
|
-
- "Sent for approval. Open `/settings/wiki` → Approvals to confirm
|
|
52
|
-
and the compile will start."
|
|
72
|
+
The full reply is:
|
|
53
73
|
|
|
54
|
-
|
|
74
|
+
> Cannot run `!compile full` — the external vault has uncommitted
|
|
75
|
+
> changes. Please commit or stash first. Dirty paths: …
|
|
55
76
|
|
|
56
|
-
This is the **git pre-compile gate** firing.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
77
|
+
This is the **git pre-compile gate** firing. Before a full rebuild,
|
|
78
|
+
Aitne wants to take a clean pre-compile snapshot commit so you can revert
|
|
79
|
+
the whole compile in one step. It refuses to start on an external
|
|
80
|
+
git-tracked vault whose working tree is dirty, because that snapshot
|
|
81
|
+
would no longer be a clean baseline.
|
|
60
82
|
|
|
61
83
|
To proceed:
|
|
62
84
|
|
|
63
85
|
1. `git -C <vault> status` — review the dirty paths Aitne listed.
|
|
64
86
|
2. Commit or stash them: `git add -A && git commit -m "wip"` or
|
|
65
87
|
`git stash -u`.
|
|
66
|
-
3. Re-run `!compile full`. On a clean tree Aitne
|
|
67
|
-
`
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
If you don't want the auto-commit,
|
|
71
|
-
`!compile full`**
|
|
72
|
-
git-tracked external vaults). Aitne
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
3. Re-run `!compile full`. On a clean tree Aitne commits the snapshot
|
|
89
|
+
itself (`aitne wiki: pre-compile snapshot <ts>`) before the compile
|
|
90
|
+
starts, and the reply echoes the short SHA.
|
|
91
|
+
|
|
92
|
+
If you don't want the auto-commit, turn off **Auto-commit before
|
|
93
|
+
`!compile full`** on `/settings/wiki` (the toggle only appears for
|
|
94
|
+
git-tracked external vaults). Aitne then runs without taking a snapshot,
|
|
95
|
+
and the estimate reply says `pre-compile git snapshot: disabled by
|
|
96
|
+
setting`.
|
|
97
|
+
|
|
98
|
+
> Internal-mode wikis are not git-tracked — they snapshot through
|
|
99
|
+
> `md_file_snapshots` instead, so this gate never fires for them.
|
|
100
|
+
|
|
101
|
+
## Sent for Approval
|
|
102
|
+
|
|
103
|
+
The full reply ends with:
|
|
104
|
+
|
|
105
|
+
> Sent for approval. Open `/settings/wiki` → Approvals to confirm and the
|
|
106
|
+
> compile will start.
|
|
107
|
+
|
|
108
|
+
This is the **cost gate**. Before running, Aitne estimates the compile
|
|
109
|
+
cost (pure on-disk arithmetic — no agent session is spent). The estimate
|
|
110
|
+
DM looks like this:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Full compile estimate for `my-wiki`:
|
|
114
|
+
- raw notes: 42
|
|
115
|
+
- est. input tokens: 51,300
|
|
116
|
+
- cost range: $0.08 (optimistic) – $0.31 (pessimistic), expected $0.15
|
|
117
|
+
- approval threshold: $2.00
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
If the **pessimistic** bound (`2× expected`) exceeds the per-workspace
|
|
121
|
+
approval threshold (default **$2.00**), the compile is queued for
|
|
122
|
+
approval instead of running.
|
|
123
|
+
|
|
124
|
+
### Approve or Deny
|
|
125
|
+
|
|
126
|
+
The queued request shows up as a **pending approval** on the dashboard.
|
|
127
|
+
Open the dashboard overview (the home page `/`, also reached via the
|
|
128
|
+
`/approvals` shortcut) and use the **pending approvals** card:
|
|
129
|
+
|
|
130
|
+
- Click **Approve** to run the compile. Aitne re-checks the git tree and
|
|
131
|
+
takes the pre-compile snapshot at that moment (so declining leaves your
|
|
132
|
+
git log clean).
|
|
133
|
+
- Click **Deny** to drop it.
|
|
134
|
+
|
|
135
|
+
You can also approve from your DM channel by replying `yes` to the
|
|
136
|
+
request.
|
|
137
|
+
|
|
138
|
+
### If the estimate looks too high
|
|
139
|
+
|
|
140
|
+
You have three levers, all on `/settings/wiki`:
|
|
141
|
+
|
|
142
|
+
- **Raise the threshold.** The **Approval threshold for `!compile full`**
|
|
143
|
+
field controls when a compile queues for approval. Bump it if routine
|
|
144
|
+
recompiles keep stalling on a confirmation you'd always grant.
|
|
145
|
+
- **Use a cheaper model.** In the **Commands & models** section, point
|
|
146
|
+
`wiki.compile` at a lite-tier model. It defaults to the medium tier
|
|
147
|
+
(Claude Sonnet 4.6), whose per-token cost is the dominant variable in
|
|
148
|
+
the estimate.
|
|
149
|
+
- **Trim the raw layer.** The estimate scans `10_raw/` and approximates
|
|
150
|
+
tokens per file from on-disk content, so the cost tracks the actual
|
|
151
|
+
size of what you're compiling. Compiling fewer or shorter raw notes
|
|
152
|
+
lowers the bound directly.
|
|
153
|
+
|
|
154
|
+
> The estimate is a heuristic (≈4 chars per token for prose, denser for
|
|
155
|
+
> CJK), bracketed `0.5×`–`2×`. It is intentionally cheap rather than
|
|
156
|
+
> exact — close enough to gate spend without burning a session to
|
|
157
|
+
> measure it.
|
|
158
|
+
|
|
159
|
+
## Not Enabled
|
|
160
|
+
|
|
161
|
+
If the reply is:
|
|
162
|
+
|
|
163
|
+
> Wiki is not enabled. Open `/settings/wiki` and enable the internal
|
|
164
|
+
> wiki workspace first.
|
|
165
|
+
|
|
166
|
+
you have no active workspace row. On `/settings/wiki`, either click
|
|
167
|
+
**Enable internal wiki** to create the built-in workspace, or point Aitne
|
|
168
|
+
at an existing folder with **Use this folder** (after the path probe
|
|
169
|
+
passes). Then re-run `!compile full`.
|
|
170
|
+
|
|
171
|
+
If the workspace exists but is archived, the page shows a **This wiki is
|
|
172
|
+
archived** card — click **Re-activate wiki** there before any `!compile`
|
|
173
|
+
command will run.
|
|
@@ -17,6 +17,7 @@ tags:
|
|
|
17
17
|
- troubleshooting
|
|
18
18
|
- wiki
|
|
19
19
|
- obsidian
|
|
20
|
+
- integrations
|
|
20
21
|
status: stable
|
|
21
22
|
ask_examples:
|
|
22
23
|
- Why can't the wiki write to my Obsidian vault?
|
|
@@ -24,12 +25,18 @@ ask_examples:
|
|
|
24
25
|
- How do I retry the write-strategy probe?
|
|
25
26
|
locale: en-US
|
|
26
27
|
created: 2026-05-12
|
|
27
|
-
updated: 2026-05-
|
|
28
|
+
updated: 2026-05-28
|
|
28
29
|
keywords:
|
|
29
30
|
- wiki write failed
|
|
30
31
|
- wiki API failure
|
|
31
|
-
- wiki write
|
|
32
|
+
- wiki write strategy
|
|
32
33
|
- external vault write
|
|
34
|
+
- obsidian cli fallback
|
|
35
|
+
api_endpoints:
|
|
36
|
+
- /api/wiki/:workspace/health
|
|
37
|
+
ui_anchors:
|
|
38
|
+
- /settings/wiki
|
|
39
|
+
- /connections/knowledge
|
|
33
40
|
related:
|
|
34
41
|
- features/wiki/overview
|
|
35
42
|
- guides/use-an-existing-obsidian-vault
|
|
@@ -40,8 +47,9 @@ related:
|
|
|
40
47
|
## What You See
|
|
41
48
|
|
|
42
49
|
A wiki bang command (`!ingest`, `!compile`) reports a write failure in
|
|
43
|
-
the daemon log, or the
|
|
44
|
-
|
|
50
|
+
the daemon log, or the `GET /api/wiki/:workspace/health` endpoint
|
|
51
|
+
(surfaced behind the dashboard's write-strategy badge) reports a
|
|
52
|
+
non-`fs` strategy with `cliAvailable: false`.
|
|
45
53
|
|
|
46
54
|
## Quick Checklist
|
|
47
55
|
|
|
@@ -74,14 +82,23 @@ Requirements:
|
|
|
74
82
|
|
|
75
83
|
If any of these is missing, the daemon surfaces a structured error:
|
|
76
84
|
|
|
77
|
-
| Error code | Meaning |
|
|
78
|
-
|
|
79
|
-
| `EWIKI_CLI_UNAVAILABLE` | Aitne's `ObsidianService` is not configured. Open
|
|
80
|
-
| `EWIKI_CLI_NOT_RUNNING` | Obsidian is not running. Launch the app and retry. |
|
|
85
|
+
| Error code | Meaning | Fix |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `EWIKI_CLI_UNAVAILABLE` | Aitne's `ObsidianService` is not configured (the `obsidian` binary is not resolvable on `PATH`). | Open **Connections → Knowledge** and connect Obsidian via the Obsidian card, then confirm Obsidian 1.12+ is installed with the CLI enabled. |
|
|
88
|
+
| `EWIKI_CLI_NOT_RUNNING` | The CLI is configured but the Obsidian app is not running, so it cannot reach the sandboxed vault. | Launch the Obsidian app and retry. |
|
|
81
89
|
|
|
82
90
|
## Force a Re-Probe
|
|
83
91
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
92
|
+
The resolved strategy (`fs` or `cli`) is cached on the workspace row so
|
|
93
|
+
later writes skip the probe. If you've fixed the underlying issue
|
|
94
|
+
(granted iCloud permission, mounted the disk read-write) but the cached
|
|
95
|
+
strategy is still `cli`, force a fresh probe:
|
|
96
|
+
|
|
97
|
+
1. Open **Settings → Wiki** (`/settings/wiki`) and edit the external
|
|
98
|
+
workspace.
|
|
99
|
+
2. Set the **Write strategy** field back to **Auto (probe on first
|
|
100
|
+
write)**. (This field only appears for external workspaces; internal
|
|
101
|
+
workspaces always write via the local filesystem.)
|
|
102
|
+
3. Save. The next write probes again — trying direct `fs` first and
|
|
103
|
+
falling back to the CLI only on `EPERM` / `EACCES` / `EROFS` /
|
|
104
|
+
`EBUSY` — and persists the fresh outcome.
|
|
@@ -16,7 +16,7 @@ Each is one row from `skill_curation_signals`:
|
|
|
16
16
|
"skill_slug": "user-profile",
|
|
17
17
|
"section_id": "topic-files",
|
|
18
18
|
"signal_type": "structure_diff",
|
|
19
|
-
"payload": { "sub_kind": "heading_add", "target": "
|
|
19
|
+
"payload": { "sub_kind": "heading_add", "target": "identity/personal.md#health-log" },
|
|
20
20
|
"observed_at": 1717000000000
|
|
21
21
|
}
|
|
22
22
|
```
|
|
@@ -21,7 +21,7 @@ submitting a proposal.
|
|
|
21
21
|
"taken_at": 1717000000000,
|
|
22
22
|
"files": [
|
|
23
23
|
{
|
|
24
|
-
"path": "
|
|
24
|
+
"path": "identity/profile.md",
|
|
25
25
|
"headings": ["Identity", "Work Pattern", "Learned Context"],
|
|
26
26
|
"frontmatter": { "type": "profile", "owner": "shared" },
|
|
27
27
|
"last_modified_at": 1716900000000
|
|
@@ -65,7 +65,7 @@ Free-text fields (`convention_notes.rule`, `routing_table.note`,
|
|
|
65
65
|
action. Examples:
|
|
66
66
|
|
|
67
67
|
- ❌ "When the user mentions a doctor visit, write to user/personal.md"
|
|
68
|
-
- ✅ "Doctor visits are recorded under `
|
|
68
|
+
- ✅ "Doctor visits are recorded under `identity/personal.md ## Health Log`"
|
|
69
69
|
- ❌ "Always include the date with the entry"
|
|
70
70
|
- ✅ "Entries carry a `[YYYY-MM-DD]` prefix"
|
|
71
71
|
- ❌ "Never use spaces in slugs"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Aitne Managed Chromium — AppArmor profile
|
|
2
|
+
#
|
|
3
|
+
# MANAGED_CHROMIUM_IMPLEMENTATION_PLAN.md §5.4 / §7.4
|
|
4
|
+
#
|
|
5
|
+
# Belt-and-suspenders profile applied when AppArmor is active on the
|
|
6
|
+
# host. Bubblewrap / systemd-run is the primary primitive; AppArmor
|
|
7
|
+
# adds an OS-policy-level guard on top of the namespace isolation.
|
|
8
|
+
#
|
|
9
|
+
# Install:
|
|
10
|
+
# sudo install -m 0644 aitne-chromium.apparmor /etc/apparmor.d/
|
|
11
|
+
# sudo apparmor_parser -r /etc/apparmor.d/aitne-chromium
|
|
12
|
+
#
|
|
13
|
+
# The `aa-aitne-chromium` namespace allows multiple per-instance
|
|
14
|
+
# profiles (sync vs. automation) to coexist if we ever split them; for
|
|
15
|
+
# the B-1 surface only `sync` is active.
|
|
16
|
+
|
|
17
|
+
#include <tunables/global>
|
|
18
|
+
|
|
19
|
+
profile aa-aitne-chromium-sync flags=(attach_disconnected) {
|
|
20
|
+
#include <abstractions/base>
|
|
21
|
+
#include <abstractions/X>
|
|
22
|
+
#include <abstractions/dbus-session-strict>
|
|
23
|
+
#include <abstractions/fonts>
|
|
24
|
+
#include <abstractions/nameservice>
|
|
25
|
+
#include <abstractions/ssl_certs>
|
|
26
|
+
|
|
27
|
+
# Read-only access to the Chromium binary's installed location plus
|
|
28
|
+
# system libraries it needs at runtime. Allow both Debian-style and
|
|
29
|
+
# Fedora-style install paths.
|
|
30
|
+
/usr/bin/chromium r,
|
|
31
|
+
/usr/bin/chromium-browser r,
|
|
32
|
+
/usr/lib/chromium/chromium rmix,
|
|
33
|
+
/usr/lib64/chromium/chromium rmix,
|
|
34
|
+
/usr/lib{,64}/chromium/** r,
|
|
35
|
+
/usr/lib{,64}/x86_64-linux-gnu/** r,
|
|
36
|
+
/usr/share/chromium/** r,
|
|
37
|
+
/usr/share/fonts/** r,
|
|
38
|
+
/etc/chromium/** r,
|
|
39
|
+
/etc/passwd r,
|
|
40
|
+
/etc/group r,
|
|
41
|
+
/proc/sys/kernel/** r,
|
|
42
|
+
/proc/[0-9]*/stat r,
|
|
43
|
+
/proc/[0-9]*/status r,
|
|
44
|
+
/proc/[0-9]*/cmdline r,
|
|
45
|
+
/sys/devices/** r,
|
|
46
|
+
|
|
47
|
+
# Per-instance user data dir — the only writable persistent path. The
|
|
48
|
+
# path is templated in by sandbox-install.ts; until install rewrites
|
|
49
|
+
# this profile the rule below denies the entire chromium-sync tree.
|
|
50
|
+
owner @{HOME}/.personal-agent/chromium-sync/** rwk,
|
|
51
|
+
owner @{HOME}/.personal-agent/chromium-sync rw,
|
|
52
|
+
|
|
53
|
+
# Tempfs / runtime dirs.
|
|
54
|
+
owner /tmp/** rw,
|
|
55
|
+
owner /var/tmp/** rw,
|
|
56
|
+
owner @{HOME}/.cache/aitne-chromium/** rw,
|
|
57
|
+
|
|
58
|
+
# Network — Chromium itself reaches sync endpoints. Fine-grained
|
|
59
|
+
# filtering happens at the CDP layer in B-2.
|
|
60
|
+
network inet,
|
|
61
|
+
network inet6,
|
|
62
|
+
network netlink,
|
|
63
|
+
network unix,
|
|
64
|
+
|
|
65
|
+
# Capabilities Chromium requires (process management, scheduling).
|
|
66
|
+
capability sys_admin,
|
|
67
|
+
capability sys_ptrace,
|
|
68
|
+
capability sys_chroot,
|
|
69
|
+
capability sys_resource,
|
|
70
|
+
capability setuid,
|
|
71
|
+
capability setgid,
|
|
72
|
+
capability setpcap,
|
|
73
|
+
|
|
74
|
+
# No exec of foreign binaries — Chromium spawns its own helper
|
|
75
|
+
# processes from the same install dir via `ix`. Reject anything else.
|
|
76
|
+
audit deny /bin/sh x,
|
|
77
|
+
audit deny /bin/bash x,
|
|
78
|
+
audit deny /usr/bin/curl x,
|
|
79
|
+
audit deny /usr/bin/wget x,
|
|
80
|
+
audit deny /usr/bin/python* x,
|
|
81
|
+
|
|
82
|
+
# No reads of OS secret stores from inside Chromium.
|
|
83
|
+
audit deny /etc/shadow r,
|
|
84
|
+
audit deny /etc/sudoers r,
|
|
85
|
+
audit deny /etc/sudoers.d/** r,
|
|
86
|
+
audit deny @{HOME}/.aws/** r,
|
|
87
|
+
audit deny @{HOME}/.ssh/** r,
|
|
88
|
+
audit deny @{HOME}/.gnupg/** r,
|
|
89
|
+
audit deny @{HOME}/.config/gh/** r,
|
|
90
|
+
audit deny @{HOME}/.kube/** r,
|
|
91
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
;; Aitne Managed Chromium — sandbox-exec profile
|
|
2
|
+
;;
|
|
3
|
+
;; MANAGED_CHROMIUM_IMPLEMENTATION_PLAN.md §5.4 / §7.4
|
|
4
|
+
;;
|
|
5
|
+
;; Deny-by-default sandbox for Chromium under macOS. Loaded via:
|
|
6
|
+
;; sandbox-exec -f aitne-chromium.sb /Applications/Chromium.app/...
|
|
7
|
+
;;
|
|
8
|
+
;; Defence layering:
|
|
9
|
+
;; - Outer ring (this file): system-call-level deny of arbitrary file
|
|
10
|
+
;; reads, exec of foreign binaries, raw socket creation, etc.
|
|
11
|
+
;; - Middle ring: Chromium's own multi-process renderer sandbox.
|
|
12
|
+
;; - Inner ring (B-2): per-workflow CDP request interception in
|
|
13
|
+
;; Playwright's `context.route` handler.
|
|
14
|
+
;;
|
|
15
|
+
;; The user-data-dir parameter (`%user_data_dir%`) is substituted by
|
|
16
|
+
;; sandbox-install.ts at install time — sandbox-exec's parameter syntax
|
|
17
|
+
;; (`(param "name")`) is awkward to template, so we ship one profile
|
|
18
|
+
;; with a literal substitution before write.
|
|
19
|
+
|
|
20
|
+
(version 1)
|
|
21
|
+
|
|
22
|
+
(deny default)
|
|
23
|
+
(deny file-write* (with no-log))
|
|
24
|
+
|
|
25
|
+
;; Allow forking + IPC needed for Chromium's multi-process model.
|
|
26
|
+
;; `%binary_bundle%` is the resolved .app bundle root (e.g.
|
|
27
|
+
;; /Applications/Chromium.app, or for a Playwright-managed install
|
|
28
|
+
;; ~/Library/Caches/ms-playwright/chromium-NNNN/chrome-mac-{arm64,x64}/
|
|
29
|
+
;; Google Chrome for Testing.app). The subpath covers helpers
|
|
30
|
+
;; (`Chromium Helper.app`, `Google Chrome for Testing Helper.app`),
|
|
31
|
+
;; crashpad_handler, and the embedded `.framework/*` bundles Chromium
|
|
32
|
+
;; spawns from inside the .app at runtime. Substituted by
|
|
33
|
+
;; sandbox-install.ts alongside %binary_path%.
|
|
34
|
+
(allow process-fork)
|
|
35
|
+
(allow process-exec
|
|
36
|
+
(literal "%binary_path%")
|
|
37
|
+
(subpath "%binary_bundle%")
|
|
38
|
+
(subpath "/Applications/Chromium.app")
|
|
39
|
+
(subpath "/Applications/Google Chrome.app")
|
|
40
|
+
(subpath "/System/Library")
|
|
41
|
+
(subpath "/usr/lib")
|
|
42
|
+
(subpath "/usr/bin"))
|
|
43
|
+
(allow signal (target same-sandbox))
|
|
44
|
+
(allow mach-priv-host-port)
|
|
45
|
+
(allow mach-lookup)
|
|
46
|
+
;; `mach-register` is required for Chromium's `MachPortRendezvousServer`
|
|
47
|
+
;; to call `bootstrap_check_in` and register its per-PID rendezvous
|
|
48
|
+
;; service (`com.google.chrome.for.testing.MachPortRendezvousServer.<pid>`).
|
|
49
|
+
;; Without it the browser process aborts with
|
|
50
|
+
;; `FATAL:mach_port_rendezvous_mac.cc: bootstrap_check_in ...
|
|
51
|
+
;; Permission denied (1100)`. The registered name embeds the PID so a
|
|
52
|
+
;; compromised Chromium cannot squat a well-known name; the daemon
|
|
53
|
+
;; itself reaches Chromium over CDP, not Mach, so allowing `mach-register`
|
|
54
|
+
;; on the outer ring does not widen the daemon ↔ Chromium boundary.
|
|
55
|
+
(allow mach-register)
|
|
56
|
+
(allow ipc-posix-shm*)
|
|
57
|
+
(allow process-info-pidinfo)
|
|
58
|
+
(allow process-info-pidfdinfo)
|
|
59
|
+
(allow process-info-pidfileportinfo)
|
|
60
|
+
(allow process-info-setcontrol)
|
|
61
|
+
(allow process-info-dirtycontrol)
|
|
62
|
+
(allow process-info-rusage)
|
|
63
|
+
|
|
64
|
+
;; Reads — system frameworks, fonts, locale data, the binary's own
|
|
65
|
+
;; bundle. Read access to the user's general Library tree is denied;
|
|
66
|
+
;; only the explicit chromium-sync/ profile dir is writable.
|
|
67
|
+
;; `%binary_bundle%` covers the same .app root referenced under
|
|
68
|
+
;; `process-exec` above so Chromium can load its .dylib / .pak /
|
|
69
|
+
;; .icns / locale resources from inside its own bundle.
|
|
70
|
+
;;
|
|
71
|
+
;; The bare `(literal "/")` is mandatory on macOS 26 (Tahoe): dyld
|
|
72
|
+
;; performs `file-read-data /` very early during process boot
|
|
73
|
+
;; (boot_boot → CacheFinder → ignition_halt path, abort_with_reason
|
|
74
|
+
;; namespace 0x23 / code 2). Without it every sandboxed arm64e child
|
|
75
|
+
;; — Chromium, /usr/bin/true, anything — aborts before main() runs.
|
|
76
|
+
;; `/dev/dtracehelper` is opened by libdispatch on first
|
|
77
|
+
;; dispatch_queue use; benign denial, allow it to keep the kernel log
|
|
78
|
+
;; clean.
|
|
79
|
+
(allow file-read*
|
|
80
|
+
(literal "/")
|
|
81
|
+
(literal "/dev/dtracehelper")
|
|
82
|
+
(subpath "%binary_bundle%")
|
|
83
|
+
(subpath "/Applications/Chromium.app")
|
|
84
|
+
(subpath "/Applications/Google Chrome.app")
|
|
85
|
+
(subpath "/Library/Frameworks")
|
|
86
|
+
(subpath "/Library/Fonts")
|
|
87
|
+
(subpath "/Library/Audio")
|
|
88
|
+
(subpath "/Library/Preferences/.GlobalPreferences.plist")
|
|
89
|
+
(subpath "/Library/Keychains")
|
|
90
|
+
(subpath "/System")
|
|
91
|
+
(subpath "/private/etc")
|
|
92
|
+
(subpath "/private/var/db/timezone")
|
|
93
|
+
(subpath "/private/var/folders") ;; temp / NSCachesDirectory
|
|
94
|
+
(subpath "/usr/lib")
|
|
95
|
+
(subpath "/usr/share")
|
|
96
|
+
(literal "/dev/null")
|
|
97
|
+
(literal "/dev/random")
|
|
98
|
+
(literal "/dev/urandom")
|
|
99
|
+
(literal "/dev/zero")
|
|
100
|
+
(literal "/dev/tty")
|
|
101
|
+
(literal "/etc")
|
|
102
|
+
(literal "/var")
|
|
103
|
+
(literal "/tmp")
|
|
104
|
+
(literal "/private/tmp"))
|
|
105
|
+
|
|
106
|
+
;; Path-traversal metadata grant. macOS 26 no longer implicitly
|
|
107
|
+
;; allows `file-read-metadata` on the parent directories of a
|
|
108
|
+
;; `(subpath ...)` rule, so a `stat("/Users")` on the way down to
|
|
109
|
+
;; %binary_bundle% / %user_data_dir% fails and Chromium then raises
|
|
110
|
+
;; `NSInvalidArgumentException: *** -[NSBundle initWithURL:]:
|
|
111
|
+
;; non-file URL argument` during framework bootstrap.
|
|
112
|
+
;;
|
|
113
|
+
;; Only metadata (stat / lstat) is granted — no `file-read-data`,
|
|
114
|
+
;; so directory contents under the ancestors are not enumerable from
|
|
115
|
+
;; this rule. The list is the union of the ancestors of
|
|
116
|
+
;; %binary_bundle% and %user_data_dir%, deduped + sorted, and is
|
|
117
|
+
;; expanded by sandbox-install.ts at install time. If both paths
|
|
118
|
+
;; collapse to no ancestors (e.g. both at `/`) the placeholder
|
|
119
|
+
;; renders to a single no-op `(literal "/")` line so the form stays
|
|
120
|
+
;; syntactically valid.
|
|
121
|
+
(allow file-read-metadata
|
|
122
|
+
%ancestor_metadata_literals%)
|
|
123
|
+
|
|
124
|
+
;; The per-instance user data dir is the only persistent path the
|
|
125
|
+
;; browser can write to. sandbox-install.ts rewrites %user_data_dir%
|
|
126
|
+
;; to the resolved absolute path before this file is written to
|
|
127
|
+
;; PA_DATA_DIR/sandbox/aitne-chromium.sb.
|
|
128
|
+
(allow file-read* file-write*
|
|
129
|
+
(subpath "%user_data_dir%"))
|
|
130
|
+
|
|
131
|
+
;; Temp directories Chromium needs at runtime.
|
|
132
|
+
(allow file-read* file-write*
|
|
133
|
+
(subpath "/private/var/folders")
|
|
134
|
+
(subpath "/tmp")
|
|
135
|
+
(subpath "/private/tmp"))
|
|
136
|
+
|
|
137
|
+
;; Networking — Chromium needs general network access to reach Google
|
|
138
|
+
;; sync endpoints. The fine-grained allowlist lives at the CDP layer
|
|
139
|
+
;; (B-2); this is the coarse ring.
|
|
140
|
+
(allow network*)
|
|
141
|
+
|
|
142
|
+
;; System info, sysctls, mach ports Chromium queries on startup.
|
|
143
|
+
(allow sysctl-read)
|
|
144
|
+
(allow system-socket)
|
|
145
|
+
(allow iokit-open (iokit-user-client-class "RootDomainUserClient"))
|
|
146
|
+
(allow iokit-open (iokit-user-client-class "IOSurfaceRootUserClient"))
|
|
147
|
+
(allow iokit-open (iokit-user-client-class "IOSurfaceSendRight"))
|
|
148
|
+
(allow iokit-open (iokit-user-client-class "IOFramebufferSharedUserClient"))
|
|
149
|
+
(allow iokit-open (iokit-user-client-class "IOHIDLibUserClient"))
|
|
150
|
+
(allow iokit-open (iokit-user-client-class "IOAudioControlUserClient"))
|
|
151
|
+
(allow iokit-open (iokit-user-client-class "IOAudioEngineUserClient"))
|
|
152
|
+
|
|
153
|
+
;; Required for the Chromium UI to function when running with a window
|
|
154
|
+
;; (initial sign-in bootstrap; headless instances never hit this path).
|
|
155
|
+
(allow user-preference-read)
|
|
156
|
+
(allow user-preference-write)
|