Prompt Studio turns a small, private local profile into a complete prompt that you can paste into ChatGPT, Claude, Gemini, a local model, or another scheduled workflow. The generated prompt includes repository locations, source intent, current Zaati OS contracts, safe presentation blocks, privacy boundaries, validation, retries, and atomic publication.
It does not connect to an LLM, install source connectors, or store credentials.
npm run prompt:create- Choose a provider and a useful starter dashboard.
- Enter the public code fork and private data repository.
- Review
<task>.permissions.md, run the matching command in<task>.data-repository.md, then copy<task>.scheduled-task.mdinto your LLM and approve only the listed connections.
The normal wizard chooses registered sources, dependencies, safe blocks, and sensible tool labels for you. Registered-source visualization guidance comes from config/sources.json, so generated prompts cannot drift from the maintained domain contract. Repository names are the only technical concepts in the default path. Use a JSON profile when you need per-source requirements and tool control.
The profile and prompts are ignored by Git. Their directory uses mode 0700 and each file uses mode 0600. They may still reveal repository names and workflow intent, so treat them as private configuration.
Start with the synthetic example:
cp config/prompt-profile.example.json .zaati/market-pulse.json
npm run prompt:create -- --config .zaati/market-pulse.jsonUse separate repositories by default:
code_repositoryis the public Zaati OS fork that defines schemas, prompts, and renderers.data_repositoryis the private repository that receives real snapshots.
The CLI rejects a shared code and data repository unless allow_same_repository is explicitly enabled. A public fork should never receive private snapshots.
schemas/prompt-profile.schema.json is the executable contract. Each source needs:
- a registered
domain:sourceID - decision-oriented
requirements - the exact approved
toolsavailable to the scheduled LLM - one or more
preferred_blocksfrom the audited UI contract (used for a new source; registered sources use the registry's authoritative list)
The preferred block list is a safe menu, not a forced layout. The LLM should choose a line chart only for an ordered trend, a table for exact repeated fields, a calendar for timed events, and no visualization when plain text is clearer.
Add several source objects to the same profile. The generated prompt includes expected_source_ids, requires one complete snapshot-bundle, retries the whole candidate at most three times, and opens one pull request. It never publishes a subset or merges its own pull request.
The private repository must independently validate the candidate with npm run data-repository:init. Prompt Studio generates an exact --sources command so one-source, starter, weekly, and custom selections install the same expected source set. This separates the LLM that reads and writes data from the policy gate that decides whether the candidate is mergeable.
Direct sources should appear before aggregate sources. Registered aggregate dependencies still apply.
The interactive wizard intentionally accepts only registered sources. For a new source, add a registration object to a config profile. Prompt Studio then creates:
<task>.source-setup.md, a one-time coding prompt that opens a public, generic pull request with synthetic fixtures and tests<task>.scheduled-task.md, a recurring data-only prompt that refuses to run until the registration is merged
Keep these authorities separate. A scheduled task must never change application code, configuration, prompts, schemas, documentation, dependencies, or CI.
npm run prompt:create -- \
--config .zaati/my-task.json \
--output-dir .zaati/generated-prompts \
--forceUse --stdout only when you deliberately want the generated scheduled prompt in terminal output. By default, Prompt Studio prints paths rather than prompt contents to reduce accidental disclosure in logs.
- Confirm the code URL points to the intended Zaati OS fork.
- Confirm the data URL points to a private repository.
- Give the LLM only the source and GitHub permissions it needs.
- Grant Contents and Pull requests access only. Deny Actions, Workflows, Administration, settings, environments, secrets, and variables write access.
- Review provider retention and training settings.
- Keep Cloudflare Access in front of the deployed dashboard.
- Run once with synthetic or low-sensitivity data before enabling the schedule.