Your life, organized by the AI you already use.
Zaati OS is an open-source, private-by-default personal operating system. Scheduled AI workflows turn approved sources into versioned snapshots, and a schema-driven dashboard turns those snapshots into useful daily views, trends, calendars, lists, tables, and reviews.
You choose the LLM. You own the data. You control the deployment. Zaati OS has no hosted account, required telemetry, central database, or platform fee.
Explore the seven populated dashboard examples, with local screenshots, forkable JSON compositions, and a documented design system. Run npm run examples after installing dependencies.
The LLM is the ingestion and reasoning layer. Your private snapshot store is the durable memory. The dashboard is the interface.
Start onboarding · Quickstart · Privacy model
Important
Zaati OS supplies contracts, prompts, validators, storage, rendering, and deployment infrastructure. It does not ship built-in Gmail, Jira, calendar, or financial connectors. Your chosen LLM or workflow must already have approved, read-only access to each source.
Note
The Zaati dashboard is read-only. It displays validated snapshots and safe external links. It does not reply to messages, change calendars or tasks, send notifications, trade, or write back to source systems. The maintained production recipe is for developers and technical AI power users.
- Any LLM workflow: ChatGPT, Claude, Gemini, a local model, n8n, cron, or custom code can publish the same contract.
- LLM-directed presentation: A safe UI contract lets the producer request metrics, lists, timelines, calendars, line, bar, or allocation charts, progress views, notices, text, and tables. The renderer only permits audited components, never arbitrary HTML or code.
- Private by architecture: Real snapshots are ignored in the public code repository. The recommended public-fork setup keeps data in a separate private repository and protects the deployment with Cloudflare Access.
- Files before databases: JSON is portable, diffable, inspectable, and easy for AI tools to create.
- Useful failure states: Freshness, provenance, confidence, missing sources, and warnings remain visible.
- Forkable foundation: The app, schemas, prompts, tests, CI, deployment recipes, theming, and synthetic examples ship together.
Requires Node.js 22 or newer.
git clone https://github.com/YOUR_GITHUB_USERNAME/zaati-os.git
cd zaati-os
npm install
npm run devThe first demo visit opens an optional guided tour of sources, safe components, scheduled-task prompts, and the private setup path. Everything shown is public synthetic data. When you are ready to create your workspace:
npm run setup
npm run tutorialThe setup assistant creates ignored local preferences and switches the local app to private mode. Synthetic example pages, Component Lab, copy-prompt guides, and the automatic demo tour are no longer included. The tutorial can still test ingestion with credential-free synthetic snapshots, clearly labeled as test data inside the private shell.
No .env, API key, connected provider, or personal data is required for this test drive. When you are ready for real sources, follow the complete visual onboarding guide.
Prefer Make?
make setup
make tutorial- Explore the synthetic demo and guided tour with
npm run dev. - Run
npm run setupto create an ignored private workspace and remove demo-only UI. - Test the entire ingestion loop with
npm run tutorial. - Run
npm run prompt:create, then paste the generated task prompt into the LLM you already use.
Everything else, including custom sources, encrypted storage, full theme tokens, and automatic deployment, is optional and documented separately.
Synthetic demo mode includes a Component lab with the JSON contract beside each rendered block. Every demo source also includes a Recreate this page drawer containing one standalone scheduled-task prompt. It includes the resolved worker and source, permission boundary, and current executable schemas; the user only replaces the code repository, private data repository, and timezone placeholders before review and use.
The canonical daily bundle contains agenda, inbox attention, work focus, money, news, and the dependency-backed daily overview. Prompt Studio can also create smaller independent bundles, and now generates the matching private-repository setup command.
Prompt Studio asks three plain-language questions, then creates a human-readable permission receipt and the complete machine prompt. Advanced users can supply a reusable profile.
npm run prompt:create- Answer the local wizard. Never enter credentials or real source values.
- Review
.zaati/generated-prompts/<task>.permissions.md. - Paste the scheduled-task prompt into your LLM. Voilà.
Generated profiles and prompts are ignored by Git and written with private file permissions. Existing sources produce one scheduled-task prompt. A new source produces a separate one-time setup prompt using only synthetic fixtures, while the recurring prompt remains data-only. See Prompt Studio and the example profile.
flowchart TD
A[Approved sources] --> B[Your LLM workflow]
B --> C[Private JSON snapshots]
C --> D[Schema validation]
D --> E[Safe component renderer]
E --> F[Access-protected dashboard]
No upstream Zaati OS service participates in this flow.
schemas/snapshot-bundle.schema.json lets one LLM run produce up to 20 registered snapshots. Zaati OS compares the returned sources with the workflow's authoritative source set, applies one shared privacy and temporal policy, sends concise contract errors back for up to three attempts, and writes nothing to its local snapshot store until every nested snapshot passes. Git publication creates candidate files on a private branch before CI; the independent validator prevents invalid candidates from merging into the protected data branch.
This is especially useful for scheduled AI products where active task capacity is limited. One daily task can refresh agenda, inbox, work, money, news, and the overview instead of consuming one task per source. Start with the one-task tutorial.
Every worker owns one source and writes one deterministic dated file:
data/snapshots/<domain>/<source>/<YYYY>/<MM>/<YYYY-MM-DD>.json
The common envelope records source identity, time period, producer, status, provenance, freshness, privacy, warnings, and domain data. The presentation.blocks array requests only allowlisted components.
{
"schema_version": "0.1.1",
"snapshot_id": "agenda:primary:2030-01-15",
"source_id": "agenda:primary",
"generated_at": "2030-01-15T07:30:00Z",
"status": "success",
"privacy": { "classification": "private", "contains_personal_data": true, "synthetic": false },
"data": {
"title": "Tuesday agenda",
"summary": "Two focus blocks and one decision need attention.",
"presentation": {
"layout": "dashboard",
"blocks": [{ "id": "day", "kind": "calendar", "title": "Today", "date": "2030-01-15", "events": [] }]
}
}
}See LLM contract and schemas/ for the executable specification.
| Prompt | Purpose | Default visualization |
|---|---|---|
inbox-attention.md |
Extract only messages needing a decision or response | Prioritized list |
daily-agenda.md |
Turn calendars and tasks into a realistic day | Calendar and action list |
work-focus.md |
Surface owned work, blockers, and next actions | Status metrics and table |
money-pulse.md |
Normalize user-approved financial summaries | Metrics, line chart, notices |
news-briefing.md |
Keep only high-value developments | Evidence-linked list |
daily-overview.md |
Combine registered source snapshots | Adaptive dashboard |
weekly-review.md |
Find patterns and produce an evidence-based review | Progress, timeline, decisions |
These are provider-neutral templates, not connectors. The local mock tutorial and command adapter are maintained in v0.1.1. ChatGPT scheduled tasks are the target first hosted path, but no hosted provider is claimed as end-to-end certified until its documented provider gate passes.
config/ Source, workflow, and local instance configuration
data/examples/ Synthetic snapshots used by demo mode
data/snapshots/ Ignored local private snapshots
docs/ Architecture, privacy, setup, extension, deployment
prompts/ Provider-neutral LLM workflow templates
public/data/ Ignored build-time dashboard payload
schemas/ Executable registry, envelope, domain, and UI contracts
scripts/ Validation, indexing, setup, and source scaffolding
src/ React, shadcn, Tailwind, and safe block renderer
deployments/ Optional infrastructure recipes
.github/workflows/ CI, security, release, and Cloudflare deployment
A public fork is code, not a diary. Real snapshots, instance configuration, connector exports, secrets, and generated dashboard data are ignored. CI rejects committed private snapshot paths and common credential shapes. This scanner is defense in depth, not a promise to recognize every secret or unnecessary personal detail. Synthetic examples are visibly marked and schema-validated.
Optional AES-256-GCM snapshot encryption protects files at rest with a key supplied only through an ignored local key file or protected CI secret. It is feature flagged and off by default. Use it only with a trusted ingestion process that can receive the key. Never paste the key into an LLM prompt. Encryption does not replace Access because authorized builds and browsers must eventually decrypt displayed facts.
The dashboard is a static bundle. That bundle contains the snapshot facts needed for display, so it must be treated as private even if the source repository is public. The recommended deployment disables public workers.dev and preview URLs, then requires Cloudflare Access on a custom hostname before data deployment.
Read Privacy and threat model before connecting a real source.
| Command | Result |
|---|---|
npm run dev |
Build the data index and start Vite |
npm run setup |
Complete the guided three-step local setup |
npm run tutorial |
Run the retrying mock LLM bundle and open it locally |
npm run workflow:run |
Connect any command-based LLM adapter |
npm run snapshot:ingest |
Atomically validate and persist one multi-snapshot bundle |
npm run snapshot:keygen |
Create an ignored 256-bit snapshot key |
npm run instance:configure |
Create ignored local settings |
npm run source:add |
Scaffold a source catalog entry and worker prompt |
npm run prompt:create |
Build a private copy-ready scheduled-task prompt from a local profile |
npm run data-repository:init |
Install the independent validator in a private snapshot repository |
npm run data:validate |
Validate registries, snapshots, ownership, and UI blocks |
npm run privacy:validate |
Reject private paths and common credential shapes |
npm run format:check |
Reject formatting drift with Prettier |
npm run lint |
Run type-aware ESLint, React Hooks, and React Refresh rules |
npm run test:coverage |
Run tests with enforced line, branch, and function coverage |
npm run check |
Run contracts, security, build, retry, encryption, performance, and WCAG tests |
npm run deploy |
Validate, build, and deploy with Wrangler |
The badges at the top of this README reflect the current default-branch CI and CodeQL results. A red badge means the published branch is failing a real check, not that someone forgot to update a status table.
| Gate | Enforced standard |
|---|---|
| Formatting | Zero Prettier drift |
| Static analysis | Zero ESLint errors or warnings, strict TypeScript build |
| Repository policy | Exact dependency versions, valid workflow YAML, timeouts, least-privilege permissions, safe checkout configuration |
| Contracts and privacy | Every registry, snapshot, schema, ownership rule, deployment boundary, and committed path validates |
| Unit coverage | At least 90% lines, 78% branches, and 80% functions across the ingestion and encryption core |
| Performance | At most 120 KB JavaScript gzip, 20 KB CSS gzip, and 120 KB dashboard data gzip |
| Accessibility | Zero axe WCAG A or AA violation groups across tutorial and dashboard, light, dark, desktop, and mobile |
| Security | Zero high-severity npm audit findings plus CodeQL analysis |
Pull requests expose each gate as a separate job and finish with one Quality gate result suitable for branch protection. Run npm run check locally for the same product checks before pushing.
- Recommended: Cloudflare Workers static assets on a custom domain protected by Cloudflare Access.
- Portable, community-operated: Any private static host that provides real authentication before serving assets. Cloudflare is the only maintained security-complete recipe in v0.1.1.
- Not recommended for real data: Public GitHub Pages, unauthenticated preview URLs, or relying on an obscure URL.
Zaati OS charges no platform fee and can be deployed using free or already-owned tools, depending on provider, connector, model, storage, and hosting choices.
Code version: v0.1.1
Latest GitHub release: v0.1.1, published August 25, 2026.
This foundation release establishes the portable data contract, atomic bundle ingestion, adaptive renderer, guided onboarding, provider-neutral prompts, optional encrypted storage, theme studio, privacy boundaries, Cloudflare recipe, and CI quality gates. Hosted LLM workflows remain contract-compatible rather than provider-certified until their recorded end-to-end gates pass. Private validators should pin the reviewed v0.1.1 release commit 0ef31dc8e973e5f1f557b1df9c7f79a012dd7d2a; future signed, protected, and immutable releases may be used as stable references. See CHANGELOG.md.
Before storing real data, read Data lifecycle and key recovery. Fork maintainers can follow Upgrade and fork sync.
Contributions should be composable domain packs with a source entry, schema, prompt, synthetic fixture, rendering behavior, tests, privacy notes, and removal steps. Maintainers must never need real personal data to review a contribution.
Read CONTRIBUTING.md, CODE_OF_CONDUCT.md, SUPPORT.md, and SECURITY.md.
The long-term product direction is captured in Product vision and Roadmap.
Repository owners should complete the one-time Maintainer setup after the first merge.
Licensed under the Apache License 2.0. It provides clear reuse rights and an explicit patent grant for an ecosystem intended to be forked and extended.




