taubyte-project-and-application
Project and application
Default (important)
Do not create an application “just because” you created or selected a project.
- After
tau select project, stop unlesstaubyte-scope-routing(and the user’s request) show that an application is actually needed. - Never run
tau new applicationunless one of the “Create or select an application” triggers below is true.
Log the decision (including “no application; project-level only”) in taubyte-context-log.
Website vs API-only (greenfield)
Follow taubyte-scope-routing → Website when logically appropriate. For new projects where end users would reasonably open a browser, default to including a website (and the Frontend + Backend split from Multi-application pattern when the backend uses database, libraries, or multi-route functions). Do not add a website when the brief or user is explicitly API-only / headless / no UI.
New project vs reusing an existing project
When the user asks to create a new project (or equivalent wording: “new Taubyte project”, “start a project from scratch”, “greenfield project”, etc.):
- Pick a distinct
--name(avoid reusing an existing project name unless the user explicitly wants that repo — collisions confuse humans and tools). - Always run
tau --defaults --yes new project --name <name> ..., thentau select project --name <name>. - Mandatory verification: run
tau --json currentand assertProjectis exactly<name>. If not, stop — do not import, push, or create resources until selection is fixed. - Mandatory project email: open
config/config.yamland ensurenotification.emailis a real email address (not""). Prefergit config user.email. Write it as a plain YAML value (no quotes) to avoidmail: no addressconfig compiler failures. - Forbidden until step 3 passes:
tau import website,tau import library,tau push project,tau new domain,tau new database,tau new function,tau new website,tau new library, or any other mutation tied to a project. Those operations attach to whatever project is currently selected; a stale selection is what makes it look like “GitHub keeps importing the old project.” - Do not reuse
tau --json current’s existing Project or assume the open editor folder is the active project unless the user clearly said to extend that project (by name, “current project”, “add to skills-test”, etc.). Do not skiptau new projectjust because a project was already selected in a previous chat turn.
If the brief is ambiguous (“build a todo app”) and a project is already selected, ask one short question (new dedicated project vs extend current) before mutating resources.
Log in taubyte-context-log: project_intent (new vs extend), project name, verified_project_after_select (yes/no + JSON Project value), and whether tau new project was run vs tau select project only.
When not to create or select an application
Stay at project context (no tau new application, no tau select application) when the work is any of:
- Website only (create/import/push/configure site).
- Library only.
- Domain (or other global resources) only.
- A single function or small function-only task without the user asking for separate apps, “multiple contexts,” or an explicit application boundary.
- The user did not name an application and did not describe multiple applications or multi-context layouts.
In those cases, complete the task under project scope unless the CLI returns an error that clearly requires tau select application—then reassess with the user rather than inventing a new app.
When to create or select an application
Do tau new application / tau select application only when at least one of:
- The user explicitly wants one or more named applications or a multi-app / multi-context project.
taubyte-scope-routingmarks the task as application-scoped (e.g. work that assumes an application context: service, database, storage, messaging, smartops, or a function explicitly tied to a chosen/named application).- You are about to run commands that require a selected application per
tau --help/ error output for that command.
If an application already exists and the user named it, use tau select application --name <app> only—do not create a duplicate with new application.
Multi-application pattern (Frontend + Backend)
Use when the brief needs all of: a website on the project domain, HTTP functions (often backed by a Go WASM library), and application-scoped persistence (database, etc.). This is an explicit multi-context layout — not the default project-only website path. For user-facing apps with persistence or a non-trivial API, treat this as the default layout unless taubyte-scope-routing says to skip the website (headless / API-only).
Typical split (names vary):
- Frontend application —
websites/*.yamlsourcing the front-end GitHub repo;domainsaligned with the API so the SPA can use same-originfetch("/api/...")when no separate API base is configured (seetaubyte-build-runtime-config). - Backend application —
libraries/*.yaml(library WASM repo),databases/*.yamlwithmatchaligned todatabase.New("/...")in code,functions/*.yamlwithsource: libraries/<library>and per-routeexecution.callmatching//export <name>in the library (seetaubyte-resource-creation).
Run tau select application when mutating resources under each app; log which application is active in taubyte-context-log.
Steps
1. Verify context
tau --json current
2. Create or select project only
tau --defaults --yes new project --name <project> --description "<desc>" --private --no-embed-token
tau select project --name <project>
Use tau select project --name <existing> alone only when extending an existing project the user chose—not when they asked for a new project (see “New project vs reusing an existing project” above).
3. Application — only if triggers above match
tau --defaults --yes new application --name <app> --description "<desc>"
tau select application --name <app>
Skip this block entirely when “When not to create” applies.
4. Verify
tau --json current
Record project and, if applicable, application (or none / global-only) in the context log.
If the user asked for a new project in this task, re-read the Project field and confirm it matches the name from step 2 before leaving this skill.
More from taubyte/skills
verifying-taubyte-functions
Verifies a Taubyte Go function locally via the `taubyte/go-wasi` Docker recipe (preferred over `tau build`, with tmpfs+bind-mount-ro to avoid root-owned artifacts in the source tree), and verifies a function actually serves on Dream by curling the gateway with the right `Host:` header (plus `/etc/hosts` mapping for `*.localtau`). Use when locally compiling a Go function to WASM, when smoke-testing a function before pushing, or when probing a Dream-hosted HTTP function from the laptop.
12creating-taubyte-resources
Creates Taubyte resources non-interactively via `tau new` for domain, website, library, function, application, database, storage, messaging, and service. Encodes the project-vs-application scope rule, the database `min < max` constraint, the website/library `--generate-repository` + import sequence, and the forbidden `--generated-fqdn-prefix` flag. Use when adding any resource to a Taubyte project's config repo.
12diagnosing-dream-builds
Diagnoses Dream local-cloud builds when `tau list/query builds` is empty or unreliable, by hitting the jobs HTTP endpoint directly (`GET /jobs/<project_id>`, `GET /job/<job_id>`) using the GitHub token from `~/tau.yaml`, then downloading logs with `tau query logs --jid`. Use when Dream builds appear silent, the build table is empty after `dream inject`, or you need raw job ids and logs for a failing build.
11taubyte-resource-creation
Scope-aware resource creation workflow. Uses non-interactive mode by default and references the shared flags catalog.
11taubyte-push-build-verify
Pushes config/code and verifies builds/logs. Includes website/library push handling with tau command first, git fallback.
11taubyte-scope-routing
Routes project-level vs application-scoped work; defaults to a website when a browser UI is logically appropriate; avoids unnecessary applications for simple website/function-only tasks unless needed.
11