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>...]
| Option | Description |
|---|---|
--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]
| Option | Description |
|---|---|
--cwd <path> | Working directory (default: current) |
--service <name> | Include specific services (repeatable) |
--no-sync-context | Skip the context sync step |
push
Sync local context, push files to Stage, then refresh snapshots.
shift-cli app push <local-dir> [remote-dir] [options]
| Option | Description |
|---|---|
--cwd <path> | Working directory (default: current) |
-s, --session <id> | Target session ID |
-e, --entry <path> | Entry point path |
--no-render | Push 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