# chainctl skills harden

URL: https://edu.chainguard.dev/platform/chainctl/chainctl-docs/chainctl_skills_harden.md
Last Modified: September 22, 2026
Tags: chainctl, Reference, Product

 chainctl skills harden Submit a skill for server-side hardening.
Synopsis Submit a skill to the Skills API for server-side hardening. Pass a local path or use &ndash;folder to package and upload a directory; SKILL.md supplies the skill name. An uploads registry reference uses an existing artifact. &ndash;digest uses an artifact already uploaded to uploads.cgr.dev/ORG/NAME and requires &ndash;name. The digest must be sha256:&lt;64-hex&gt;, not a tag or a full reference. &ndash;group is required and accepts an organization name or UIDP.
Prints the job ID and status after submission. With &ndash;wait, polls until the job finishes, downloads the result to ./hardened/NAME, and prints its reference and digest. HARDENING.md in the download contains the report and scanner findings. &ndash;timeout bounds the command when waiting. A timeout or interrupt leaves the server-side job running.
Submitting unchanged content to the same organization as the same user returns the same job ID. Use skills status to check a saved job ID or resume waiting without uploading again.
chainctl skills harden [&lt;path|uploads-ref&gt;] --group &lt;org&gt; [flags] Examples chainctl skills harden --group my-org ./my-skill --wait --timeout 30m chainctl skills harden --folder ./my-skill --group my-org chainctl skills harden uploads.cgr.dev/my-org/my-skill:latest --group my-org --wait chainctl skills harden --digest sha256:&lt;64-hex&gt; --name my-skill --group my-org chainctl skills status --group my-org --id &lt;job-id&gt; --wait Options --digest string SHA256 digest of an artifact already in the uploads registry. --folder string Local skill directory containing SKILL.md. -g, --group string Target organization name or UIDP (required). --name string Uploaded skill name (required with --digest). --timeout duration Maximum command duration with --wait (0 means no timeout). --wait Wait for hardening to finish. Options inherited from parent commands --api string The url of the Chainguard platform API. (default &#34;https://console-api.enforce.dev&#34;) --audience string The Chainguard token audience to request. (default &#34;https://console-api.enforce.dev&#34;) --config string A specific chainctl config file. Uses CHAINCTL_CONFIG environment variable if a file is not passed explicitly. --console string The url of the Chainguard platform Console. (default &#34;https://console.chainguard.dev&#34;) --force-color Force color output even when stdout is not a TTY. -h, --help Help for chainctl --issuer string The url of the Chainguard STS endpoint. (default &#34;https://issuer.enforce.dev&#34;) --log-level string Set the log level (debug, info) (default &#34;ERROR&#34;) -o, --output string Output format. One of: [csv, env, go-template, id, json, markdown, none, table, terse, tree, wide] -v, --v int Set the log verbosity level. SEE ALSO chainctl skills	- Skills registry related commands. 
