AgentKit
DocsKitsCLI ReferenceDesktop App
BetaYou are reading docs for the beta channel (2.15.0-beta.13). Features may change before the next stable release.Switch to stable →

Skills

Use the ak:ckm-storage router

Route list, sync, upload, and URL operations through the ak-ckm-storage export.

The ak-ckm-storage export routes list, sync, upload, and url operations to an S3-compatible storage client. Its frontmatter now declares the unique runtime identity ak:ckm-storage, distinct from the separate ak-storage export.

Invoke this export by its canonical name

Use /ak:ckm-storage in Claude Code or Cursor and $ak:ckm-storage in Codex. The separate ak-storage export continues to own ak:storage.

Use this page to understand the operation boundary

Scope

  • List remote objects, optionally filtered by a prefix.
  • Preview or perform a recursive local-folder sync.
  • Upload one local file to a chosen object key.
  • Construct a public URL for an object key.

Do not use this export when

  • You need download, delete, access-policy, bucket-creation, lifecycle, or migration behavior. Those are not router subcommands.
  • You need a guarantee that a constructed URL is public or that an object exists. Public access remains a provider and bucket-policy decision.

Prepare without exposing credentials

The client checks these environment variables:

VariableRequirement
S3_ENDPOINTRequired service endpoint
S3_ACCESS_KEY_IDRequired access-key identifier
S3_SECRET_ACCESS_KEYRequired secret access key
S3_BUCKETRequired bucket name
S3_REGIONOptional; the client defaults to auto
S3_PUBLIC_URLOptional public base URL or custom domain

The backing client also requires @aws-sdk/client-s3 in the environment that executes it. Keep credentials in an ignored local environment file, use a bucket-scoped least-privilege credential, and never paste secrets into the Skill prompt or output.

Runtime identity status

RuntimeInvocationCurrent boundary
Claude Code/ak:ckm-storage ...Routes to the export whose frontmatter declares ak:ckm-storage.
Cursor/ak:ckm-storage ...Routes to the same unique canonical identity.
Codex$ak:ckm-storage ...Uses the same canonical identity through Codex invocation syntax.

Use /ak:ckm-storage list, /ak:ckm-storage sync, /ak:ckm-storage upload, or /ak:ckm-storage url.

See Runtime adapters for capability and delivery differences. Use the runtime-specific invocation shown above.

Review the operation contract

OperationArguments and optionsEffect
list[prefix]Reads up to the backing client's current listing limit and formats key, size, and last-modified data.
sync<folder> [remote-prefix] [--dry-run] [--extensions=.png,.jpg]Recursively scans local files; dry-run returns proposed object keys, while an approved live run uploads matching files.
upload<path> [remote-path]Reads one local file and writes one remote object. If the remote path is omitted, the router uses the local relative path.
url<path>Constructs a URL from S3_PUBLIC_URL or from endpoint and bucket configuration; existence checking is optional.

Pass these arguments after the runtime-specific canonical invocation.

Understand the stages

  1. The router parses the first argument as an operation.
  2. It loads the matching operation reference.
  3. The operation loads the backing client from the separate ak-storage export and verifies configuration.
  4. Read-only operations list metadata or construct a URL. Write operations inspect local input before any remote request.
  5. A dry-run sync reports proposed object keys without uploading. A live sync uploads files sequentially and reports individual success or failure.

This cross-export dependency means ak-ckm-storage is a router rather than an independent storage implementation.

Keep approval and external effects explicit

  • list and optional existence checks send authenticated read requests to the configured provider.
  • upload and live sync read local files and send their contents to the configured bucket. Approve the exact files, object keys, provider, and data classification first.
  • --dry-run prevents upload in the backing sync routine, but it still scans the local folder.
  • URL construction does not change bucket policy and does not make a private object public.
  • The router does not authorize deletion, publication, CDN changes, provider billing, or credential creation.

Expected evidence

For each operation, require:

  • The selected operation and resolved local and remote paths.
  • Configuration presence without secret values.
  • A dry-run file-to-object mapping before a multi-file upload.
  • Per-file upload results, failed count, and returned URLs for a live sync.
  • Provider errors preserved verbatim enough to diagnose without exposing credentials.

Troubleshoot or continue

SymptomSafe next step
/ak:ckm-storage or $ak:ckm-storage is not discoveredConfirm the installed export's SKILL.md declares name: ak:ckm-storage; an older package may still declare ak:storage.
Storage is reported as not configuredCheck the required variables and SDK locally without printing their values. Do not add dependencies or credentials until the canonical export is confirmed.
A sync is needed nowUse a separately reviewed provider tool or workflow with an explicit dry run, destination, and credential boundary.
A returned URL is inaccessibleVerify object existence, bucket policy, custom-domain routing, and provider behavior outside this Skill.
Installation state looks unexpectedFollow Kit installation problems without forcing a reinstall over user files.

Continue with the Marketing Kit overview, Installing kits, or the CLI reference for AgentKit lifecycle commands.

Know the current limits

  • Select this router through its declared canonical name ak:ckm-storage; ak-storage retains the separate ak:storage identity.
  • The router references a backing client in the other export, so both exports remain part of the documented operation path.
  • Provider compatibility is shipped intent, not a live guarantee. Endpoint, authentication, public URL, and billing behavior must be verified with the selected provider.