Skip to main content

shift-cli app

Manage app workspace state — sync platform context, refresh skills, and push to Stage.

Usage

shift-cli app <subcommand> [options]

Subcommands

sync-context

Pull dynamic service context into .shift/state and local service folders.

shift-cli app sync-context [--cwd <path>] [--service <name>...]
OptionDescription
--cwd <path>Working directory (default: current)
--service <name>Sync only specific services (repeatable)

Creates or updates:

  • .shift/state/manifest.json — App state manifest with version, services, and stage snapshot
  • .shift/state/services/<name>.json — Per-service context snapshots

refresh-skills

Refresh CLAUDE/AGENTS instructions and bundled skills for an existing app.

shift-cli app refresh-skills [--cwd <path>] [--service <name>...] [--no-sync-context]
OptionDescription
--cwd <path>Working directory (default: current)
--service <name>Include specific services (repeatable)
--no-sync-contextSkip the context sync step

push

Sync local context, push files to Stage, then refresh snapshots.

shift-cli app push <local-dir> [remote-dir] [options]
OptionDescription
--cwd <path>Working directory (default: current)
-s, --session <id>Target session ID
-e, --entry <path>Entry point path
--no-renderPush without triggering render
-n, --name <name>App name
-d, --description <text>App description
-t, --tags <tags>Comma-separated tags

Example:

shift-cli app push ./src /app --name "my-app" --entry /app/App.tsx

Workspace Layout

The app commands work with the .shift/ directory in your project:

.shift/
├── stage-app.config.json # Session ID, app metadata, gateway URL
├── state/
│ ├── manifest.json # App state manifest
│ ├── services/
│ │ ├── stage.json # Stage context snapshot
│ │ ├── palette.json # Palette context snapshot
│ │ └── ...
│ └── history/ # Previous state archives
├── compute/
│ └── config.json # Compute module and prefix
└── palette.config.json # Palette ID and export timestamp

Examples

# Sync all platform context into the workspace
shift-cli app sync-context

# Sync only Stage and Palette context
shift-cli app sync-context --service stage --service palette

# Push app to Stage with full context sync
shift-cli app push ./my-app /app --name "todo-app" --json

# Refresh agent skills without re-syncing context
shift-cli app refresh-skills --no-sync-context