- 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:
Substitution syntax:
Use
${{ 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.