- Create: Select resources from your Sinas instance → export as
SinasPackageYAML - Share: Distribute the YAML file (GitHub, email, package registry)
- Install: Paste/upload the YAML → preview changes → confirm install
- Uninstall: Removes all resources created by the package in one operation
- Resources created by packages are tagged with
managed_by: "pkg:<name>" - Detach-on-edit: Editing a package-managed resource clears
managed_by— the resource survives uninstall - Uninstall: Deletes all resources where
managed_by = "pkg:<name>"+ the package record - Upgrade: Re-installing an existing package updates its resources in place (idempotent apply)
- Excluded types: Packages cannot include roles, users, LLM providers, or database connections (these are environment-specific)
- Dependencies: Packages can declare Python dependencies — these are recorded in the database and installed in containers on worker restart
Install-time Variables
Packages can declare typed variables that are prompted during installation. Variables are substituted into the YAML before resources are persisted — the resulting resources contain literal values, no runtime template evaluation. Declaring variables:| Type | Description | Validation |
|---|---|---|
text | Free text input | Optional pattern (regex) |
boolean | True/false toggle | — |
enum | Fixed choices | choices: [a, b, c] |
resource_ref | Pointer to existing resource | resource: llm_providers|database_connections|collections|secrets|roles — validated at install |
secret | Masked input, stored encrypted | Creates/upserts a Secret. Not re-prompted on upgrade if already exists. |
${{ vars.NAME }} anywhere in the package spec. Resolved by simple string replacement before parsing — not Jinja2, so no conflicts with system prompt templates.
POST /api/v1/packages/preview— response includesvariables(declarations) andrequires_input(bool). Passvariables: {NAME: value}in the request to preview with substitution.POST /api/v1/packages/install— passvariables: {NAME: value}in the request. Required variables must be present.
Package.values. On upgrade, the console pre-fills the form with previous values. Secret values are stored as "***" — the actual credential lives in the Secrets table.
Endpoints:
agent, function, skill, connector, manifest, component, query, collection, store, template, webhook, schedule, database_trigger.