Skip to main content
A project is the authoring container in AI Studio. Everything you build — apps, workflows, data schemas, connections, and configuration — lives inside a project. Chat operates at the project scope by default, so a single conversational turn can compile changes that span multiple resources. The project-as-container model (authoring scope, atomic release, sandbox twin, approval floors) is the binding decision in ADR-056 — AI Studio Project-Based Authoring Model. The runtime still executes workflows; the project is what you open in Studio and what you release as a unit.

Project structure

Project
├── Apps           UI surfaces, each with a declared audience
├── Workflows      Triggered automation, each with one or more triggers
├── Entities       Shared data schemas
├── Integrations   Outbound external system connections
├── Webhooks       Inbound HTTP endpoints
└── Settings       Named configuration values

Apps

Apps are user-facing surfaces. Each app declares an audience at creation — this drives routing, permissions, and PHI handling. Default CRUD against entities is implicit in an app; workflows are what apps add when behavior beyond CRUD is needed. See Apps authoring.

Workflows

Workflows are automation contracts executed by the HASP runtime. Each workflow has one or more triggers and a step graph. Workflows reference entities (read/write), integrations (outbound calls), and emit data-change events that other workflows can listen to. See Workflow authoring.

Entities

Entities are shared data schemas. Multiple workflows and apps in the same project can reference the same entity. Schema changes (adding, renaming, or removing fields) are surfaced as explicit confirmation gates in chat because they have migration consequences. See Entities.

Integrations

Integrations are outbound connections to external systems — Stripe, HubSpot, EHR APIs, Postmark, Twilio, Google Workspace, and others. Credentials and configuration live at the project level so multiple workflows can share one connection without duplicating config.

Webhooks

Webhooks are inbound HTTP endpoints. The project provisions a URL under your org’s runtime subdomain (or custom domain on Enterprise); workflows listen to specific webhook endpoints as triggers. Webhooks are sibling to integrations, not nested inside them.

Settings

Settings are named configuration values referenced by name from workflow contracts — e.g., compliance_officer_email, urgent_routing_recipients, practice_timezone. Changing a setting propagates to every workflow that references it without re-authoring.

Chat scope

By default, chat operates at the project scope. The system resolves resource references across the project, so a single conversational turn like “flag urgent intakes so clinicians see them at the top of the triage board” can compile changes to a workflow step, an entity field, and an app sort rule — all at once. You can scope chat down to a specific resource: “let’s work on just the intake form”. Scoped chat narrows reference resolution to that resource and its immediate dependencies. Return to project scope with: “go back to the project.” When the system infers something non-trivial — the audience for a new app, the shape of a trigger, whether a project is headless — it states the inference and asks for confirmation. The system never silently picks.

Runtime URLs

Apps live at your org’s runtime subdomain (or custom domain on Enterprise):
acme.usehasp.run/intake      ← Patient Intake (audience: Public)
acme.usehasp.run/triage      ← Clinical Triage Board (audience: Role-gated)
acme.usehasp.run/admin       ← Admin Panel (audience: Role-gated)
Path uniqueness is scoped to the org, not the project. Two projects in the same org cannot both have an app at /intake. If a collision would occur, the system resolves it conversationally at app-creation time. The project name does not appear in runtime URLs. Studio admin URLs (app.usehasp.com/projects/<project-slug>/...) carry project namespace because that is a builder concern, not an end-user concern.

Project navigation at scale

Projects with 50+ resources are the design target, not an edge case.

Search (⌘K)

Project-wide search returns typed results across all six sections. Results show type, name, and key metadata — audience for apps, trigger type for workflows, and so on. Click to open that resource’s contract view.

Activity log

Every contract change emits a project-activity event. The project overview shows recent activity by default with author attribution. A deeper history view is accessible for forensic review.

Health rollup

The project overview shows: how many workflows are running normally, how many have recent failures, how many apps are live, whether webhooks are receiving traffic, and recent error counts. Failing workflows surface immediately with a click-through to the failing run’s trace.

Reverse-dependency views

Every resource has a “what depends on me” view:
ResourceShows
EntityWhich workflows write to it, which read from it, which apps render it, which data-change events it emits and who listens
IntegrationWhich workflows use this connection, which steps make outbound calls
WebhookWhich workflow handles incoming requests
SettingWhich workflows reference this value
AppWhich workflows are triggered by events from this app, which entities it reads/writes

Scoped graph view

A read-only relationship graph scoped to entity-centric and event-centric subgraphs: “show me everything that touches the patient entity” or “show me what fires when patient.status changes.” The graph is never an authoring surface and never the default view.

Project as the unit of release

All draft changes across all resources are part of one project-level pending changeset. Release is atomic and all-or-nothing. Releasing publishes every draft change in the project simultaneously. See Release & Sandbox for the full release lifecycle, approval gates, and sandbox behavior.