Skip to content

CLI Enterprise Edition Commands

This guide documents how SkillMeat CLI commands behave differently in Enterprise edition compared to Local edition. Enterprise edition introduces multi-tenant support, VGS (Version Graph Service) backed operations, and additional scoping options for enterprise deployments.

Overview

SkillMeat CLI commands maintain backward compatibility between editions while adding enterprise-specific features and constraints. Some commands are fully supported with enhanced capabilities, while others display helpful guidance directing users to web or API alternatives.

Fully Supported Commands

These commands work in both Local and Enterprise editions, with enterprise-specific enhancements:

deploy

Deploy artifacts to project profiles with multi-profile selection capabilities.

Enterprise Enhancement:

In enterprise edition, the deploy command supports additional flags for profile selection:

# Deploy to single profile
skillmeat deploy canvas --profile claude_code --project /path/to/project

# Deploy to multiple specific profiles
skillmeat deploy canvas --profiles claude_code,codex --project /path/to/project

# Deploy using project's saved default profiles
skillmeat deploy canvas --default-profiles --project /path/to/project

# Deploy to all available profiles
skillmeat deploy canvas --all-profiles --project /path/to/project

Behavior in Enterprise:

  • Supports --profile flag for single profile deployment
  • Supports --profiles flag for comma-separated profile list
  • Supports --use-defaults to deploy using project's default profile set
  • Supports --all-profiles to deploy to all configured profiles
  • Profile scope prevents unintended broad deployments
  • Returns descriptive errors if requested profiles don't exist

Example:

# Example: Deploy Python skill to all profiles in enterprise
skillmeat deploy python-skill --all-profiles \
  --project ~/enterprise-project

# Output:
# Deploying python-skill to enterprise project...
# ✓ Deployed to profile: claude_code
# ✓ Deployed to profile: codex
# ✓ Deployed to profile: gemini
# Deployment complete (3 profiles)

undeploy

Remove deployed artifacts from project profiles.

Enterprise Behavior:

In enterprise edition, undeploy operates within project and profile scope:

# Undeploy from current project (default profile)
skillmeat undeploy canvas --project /path/to/project

# Undeploy from specific profile
skillmeat undeploy canvas --profile codex --project /path/to/project

The undeploy command respects enterprise tenant boundaries and will not undeploy artifacts from other projects or tenants. The CLI resolves the project path to an internal project ID automatically; if the path cannot be resolved, a user-facing error is shown rather than silently sending an invalid request.

Example:

skillmeat undeploy canvas --project ~/enterprise-app --profile claude_code

# Output:
# Undeployed canvas from profile: claude_code
# Location: /path/to/project/.claude/skills/canvas/

history / version list

View artifact version history with VGS-backed queries.

Enterprise Behavior:

In enterprise edition, version history is served through the Version Graph Service (VGS) API:

# List version history
skillmeat history artifact-name --project /path/to/project

# List with limit
skillmeat history artifact-name --limit 20 --project /path/to/project

# List specific collection
skillmeat history artifact-name --collection work

Version queries respect tenant isolation—users only see versions they have access to.

Example:

skillmeat history canvas --limit 10

# Output:
# Version History: canvas
# 
# Version    Date                 Author          Message
# ──────────────────────────────────────────────────────────
# v2.1.5     2026-05-09 14:30:00  team@example    Fixed layout bug
# v2.1.4     2026-05-08 10:15:00  dev@example     Refactored styles
# v2.1.3     2026-05-07 16:45:00  admin@example   Initial enterprise release

artifact push-content

Update or repair a single artifact's stored content, creating a new version without re-publishing the entire bundle.

Enterprise Behavior:

In enterprise edition, push-content creates a new artifact version via the POST /api/v1/artifacts/{artifact_id}/version endpoint. This is distinct from skillmeat update <name> (upstream synchronization) — push-content is for direct content replacement, targeted corrections, or emergency fixes.

# Update from a single file
skillmeat artifact push-content my-skill \
  --content-file /path/to/updated_skill.py \
  --change-note "Fixed typo in line 42"

# Update multiple files from a directory
skillmeat artifact push-content my-skill \
  --content-dir /path/to/artifact/dir \
  --change-note "Updated documentation"

# Update from manifest
skillmeat artifact push-content my-skill \
  --manifest /path/to/manifest.toml \
  --change-note "Synchronized with upstream state"

Key Features:

  • Idempotent: Submitting identical content twice results in a no-op on the second call — no duplicate versions
  • Artifact:write scope required: Your API token must have the artifact:write permission
  • Tenant-scoped isolation: Works only within your enterprise tenant; cannot access or modify artifacts outside your scope
  • JSON output mode (--json flag): For scripting, output the result as JSON: {"action": "created|updated|noop", "version_id": "...", "content_hash": "...", "files_written": 2, "skipped": 0}

When to use push-content vs. update:

Task Use
Fix a typo or logic error in an artifact you own push-content
Pull the latest version from GitHub upstream update
Revert an artifact to a previous version push-content (from saved backup file)
Emergency content swap or security fix push-content
Bulk re-publish with updated content POST /bundles/import-pack --conflict=overwrite

Example:

# Repair a stale skill after discovery in production
skillmeat artifact push-content python-lint \
  --content-file corrected_lint.py \
  --change-note "Emergency fix: removed deprecated flake8 API call"

# Output:
# Pushed content to python-lint
# action: created (new version created)
# version_id: v2:abc123def456...
# content_hash: sha256:fed0...
# files_written: 1

Reference: For more on update workflows and version management, see Enterprise Version Management — Single-Artifact Content Update.


Commands Not Yet Supported in Enterprise

These commands display a helpful message directing users to web interface or API endpoints:

branch

Create, list, and manage artifact branches.

Status: Not yet supported in enterprise edition

User Message:

Error: This command is not yet supported in enterprise edition.
Use the web interface at https://app.skillmeat.io/artifacts or 
the API endpoint /api/v1/artifacts/{id}/branches.

Documentation: https://docs.skillmeat.dev/user/guides/cli-reference.html#enterprise-limitations

Workaround: Use the web interface to manage branches:

  1. Navigate to the artifact detail page
  2. Go to the "Branches" tab
  3. Create, switch, or delete branches using the web UI

sync-state

Check synchronization status between project and collection.

Status: Not yet supported in enterprise edition

User Message:

Error: This command is not yet supported in enterprise edition.
Use the web interface at https://app.skillmeat.io/artifacts or 
the API endpoint /api/v1/versions/artifacts/{id}/sync-status.

Documentation: https://docs.skillmeat.dev/user/guides/cli-reference.html#enterprise-limitations

Workaround: Use the web UI to view sync status:

  1. Navigate to the artifact detail view
  2. Select the "Sync Status" tab to see collection vs. project state
  3. Review conflicts and perform manual sync if needed

merge

Merge branches or resolve conflicts.

Status: Not yet supported in enterprise edition

User Message:

Error: This command is not yet supported in enterprise edition.
Use the web interface at https://app.skillmeat.io/artifacts or 
the API endpoint /api/v1/artifacts/{id}/branches/{branch}/merge.

Documentation: https://docs.skillmeat.dev/user/guides/cli-reference.html#enterprise-limitations

Workaround: Use the web interface for merge operations:

  1. Navigate to the target branch in the artifact view
  2. Click "Merge" button
  3. Select source branch and resolve any conflicts in the UI

cherry-pick

Cherry-pick commits from one branch to another.

Status: Not yet supported in enterprise edition

User Message:

Error: This command is not yet supported in enterprise edition.
Use the API endpoint /api/v1/artifacts/{id}/branches/{branch_name}/cherry-pick.

Documentation: https://docs.skillmeat.dev/user/guides/cli-reference.html#enterprise-limitations

Workaround: Use the API directly or web interface:

Via API:

curl -X POST "https://app.skillmeat.io/api/v1/artifacts/{artifact_id}/branches/{branch_name}/cherry-pick" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "source_branch": "main",
    "commit_sha": "abc123def456"
  }'

Via Web Interface:

  1. Navigate to the target branch
  2. Find the commit to cherry-pick
  3. Click the "Cherry-Pick" action button
  4. Select destination branch and confirm

Enterprise-Specific Considerations

Profile Scoping

Enterprise deployments support multiple deployment profiles (claude_code, codex, gemini, cursor). When using deploy or undeploy, always specify the profile(s) you want to target to avoid unintended changes:

# GOOD: Explicitly target profile
skillmeat deploy my-skill --profile claude_code --project /path/to/project

# RISKY: Targets default profile only
skillmeat deploy my-skill --project /path/to/project

Version Graph Service (VGS)

All version operations (history, rollback, snapshot) are backed by the centralized Version Graph Service in enterprise edition. This ensures:

  • Consistent version history across all tenants
  • Atomic version operations (all-or-nothing)
  • Audit trail for all version changes
  • Promotion workflows (user → team → enterprise)

Tenant Isolation

All CLI commands respect enterprise tenant boundaries:

  • Users can only view/modify artifacts in their assigned tenant
  • Version history is filtered by tenant
  • Deployments are scoped to tenant projects
  • Collections are tenant-scoped

Error Messages

Edition Mismatch

Error: This operation requires local edition.
Your deployment is configured as: enterprise
Use the web interface or API for this operation.

Resolution: Check your edition setting:

skillmeat config get edition
# Should return "enterprise"

Profile Not Found

Error: Profile 'invalid_profile' not found for this project.
Available profiles: claude_code, codex, gemini

Run: skillmeat project default-profiles list --project /path/to/project

Resolution: Use a valid profile name or check project defaults.

Tenant Boundary Violation

Error: You do not have permission to access this artifact.
The artifact belongs to a different tenant or organization.

Resolution: Verify you're working in the correct tenant context. Contact your administrator if you need access.

Best Practices

  1. Always specify profiles in enterprise: Use --profile, --profiles, --all-profiles, or --default-profiles to be explicit about where deployments go.

  2. Use project defaults: Set meaningful default profiles for each project to reduce command complexity:

skillmeat project default-profiles set claude_code,codex --project /path/to/project
skillmeat deploy my-skill --default-profiles --project /path/to/project
  1. Check tenant boundaries: Before deploying, verify you're in the correct tenant/organization context.

  2. Use web interface for complex operations: For branch management, merging, and conflict resolution, the web interface provides better visualization.

  3. Monitor version history: Regularly check version history to understand deployment patterns:

skillmeat history artifact-name --limit 50

Federated Deployment Tracking (Enterprise-Only)

These commands implement the CLI-push relay model: a local project pushes its deployment events to the enterprise instance, which becomes the authoritative deployment ledger.

Prerequisites

Before using the federated deployment commands:

  1. Initialize the local project: skillmeat init
  2. Authenticate to the enterprise instance:
    skillmeat auth login --enterprise https://your-instance.example.com
    
    This writes ~/.skillmeat/enterprise.toml with the enterprise base URL and a PAT that must have artifact:write scope.
  3. Ensure enterprise.toml exists — both project register and sync push read enterprise credentials from ~/.skillmeat/enterprise.toml.

skillmeat project register

Registers the current local project with the remote enterprise instance and stores the mapping in the local manifest.

Usage:

skillmeat project register [--project-id <uuid>] [--yes]

Options:

Flag Description
--project-id <uuid> Skip name-based lookup and use this exact enterprise project UUID.
--yes Skip all confirmation prompts (non-interactive / CI mode).

What it does:

  1. Reads the project name and path from .skillmeat/manifest.toml.
  2. Calls GET /api/v1/projects on the enterprise instance and matches by name (client-side).
  3. If git remote get-url origin is available, uses it as a secondary deduplication key when multiple projects match by name.
  4. If no match is found, offers to create the project on the enterprise instance.
  5. Writes server_project_id (and git_origin when resolved) into .skillmeat/manifest.toml.

Examples:

# Auto-discover by name (with confirmation prompt)
skillmeat project register

# Use an explicit enterprise project UUID (skips name lookup)
skillmeat project register --project-id 550e8400-e29b-41d4-a716-446655440000

# Non-interactive / CI
skillmeat project register --yes

Troubleshooting:

  • server_project_id already set — Re-running project register will show the current mapping and offer to overwrite; use --yes to skip the prompt.
  • Multiple name matches — If >1 enterprise project shares the same name and git_origin does not disambiguate, the command lists all candidates and prompts for selection.
  • enterprise.toml not found — Run skillmeat auth login --enterprise <url> first.

skillmeat sync push

Relays local deployment records to the enterprise instance via POST /api/v1/projects/{id}/relay-deployments.

Usage:

skillmeat sync push [--dry-run] [--since <ISO8601>] [--no-collection-enroll]

Options:

Flag Description
--dry-run Print the records that would be sent without making any API call.
--since <ISO8601> Relay only deployments recorded after this UTC timestamp (e.g. 2026-01-01T00:00:00Z).
--no-collection-enroll Suppress server-side auto-enroll of relayed artifacts into the default collection.

Prerequisites (checked at runtime):

  • .skillmeat/manifest.toml must exist (run skillmeat init).
  • manifest.toml must contain server_project_id (run skillmeat project register).
  • ~/.skillmeat/enterprise.toml must exist with a PAT holding artifact:write scope.

What it does:

  1. Reads .skillmeat-deployed.toml from the local project.
  2. Filters records by --since timestamp if supplied.
  3. POSTs the batch to POST /api/v1/projects/{server_project_id}/relay-deployments.
  4. By default, the enterprise instance auto-enrolls each artifact in the authenticated user's collection. Pass --no-collection-enroll to suppress this.

Examples:

# Preview what would be relayed (no API call)
skillmeat sync push --dry-run

# Relay all deployment records
skillmeat sync push

# Relay only records since a specific date
skillmeat sync push --since 2026-01-01T00:00:00Z

# Relay without auto-enrolling artifacts into the collection
skillmeat sync push --no-collection-enroll

# Relay since a date, suppress auto-enroll, non-interactive preview first
skillmeat sync push --since 2026-06-01T00:00:00Z --dry-run
skillmeat sync push --since 2026-06-01T00:00:00Z --no-collection-enroll

Notes:

  • The relay endpoint is idempotent: sending the same content_hash for the same (tenant_id, artifact_id, project_id, deployment_profile_id) tuple updates updated_at without creating a duplicate row.
  • Local edition: sync push is not applicable — there is no enterprise instance to relay to.

Comparison: Local vs. Enterprise

Command Local Enterprise Notes
deploy Full Full (with profiles) Enterprise requires explicit profile selection
undeploy Full Full Tenant-scoped in enterprise
history Full Full (VGS-backed) Powered by Version Graph Service
branch Full Web/API only Web interface recommended
sync-state Full Web/API only Web interface recommended
merge Full Web/API only Web interface recommended
cherry-pick Full Web/API only Use API endpoint or web UI
project register Full Register local project with enterprise instance
sync push Full Relay local deployment records to enterprise

Getting Help

For issues with enterprise CLI commands:

  1. Check your edition: skillmeat config get edition
  2. Verify profiles: skillmeat project default-profiles list --project /path/to/project
  3. Review error message: Contains direction to web or API alternative
  4. Contact support: Your administrator or support team for tenant access issues