Sync a repository from GitHub
Use Atlan SkillSync when Git should remain the source of truth for several skills. The GitHub Action posts a read-only impact report on pull requests, then publishes approved additions and updates from a protected branch. The current flow requires destination workspace IDs in.atlan/package.json
and a repository secret named ATLANAI_TOKEN. The preflight workflow receives
neither that secret nor checked-out pull request code.
Set up GitHub SkillSync
Add the manifest, repository secret, pull request preflight, and protected-branch publish workflow.
Publish a Skill
Preview. Start with a disposable workspace and an approved canonical
sample bundle. This direct API recipe uses the current multipart contract; it
does not define a new Skill package format.
Publish a Skill
Prepare a ZIP bundle withSKILL.md at its root and only the supporting files
the Skill needs. The metadata multipart part carries the Skill name, optional
description, and target workspace. The body part carries the ZIP.
SKILL.md opens with YAML front matter carrying name and
description. These describe the Skill to the runtime that loads it, and
are required in addition to the metadata part, which addresses the Skill in
the Registry. A bundle without front matter returns
422 validation_failed.SKILL.md
metadata and items are multipart parts rather than a request body, so
pass them as JSON strings in both languages. Their keys stay snake_case,
since the string is JSON you build yourself rather than an object the client
serialises for you.Bulk-create Skills
Use the bulk endpoint when an application needs to create a one-time batch of new skill bundles. It accepts at most 100 items. Each item in theitems JSON
array supplies the same metadata used for one Skill and a body_part name. The
multipart request includes a ZIP body under each of those names.
Preview. A bulk response is
207 Multi-Status, even when some items were
created. Read every returned item instead of treating the HTTP status alone as
a successful import.items is the same JSON string, and each body_part name
becomes its own multipart part:
items array follows the request order. A 201 item includes the
created skill. A rejected item includes its own status and problem document;
successful items are not rolled back. For a duplicate-content rejection, the
problem can include existing_artifact_id, which identifies the skill that
already holds that content.
Use the returned IDs to inspect every created skill and record failed item
indexes for a corrected retry. Do not resubmit a whole batch until you know
which items were created.
Find a Skill
Search takes the query in the body, so it is aPOST:
All 17 skill operations are in the
skill operations reference.
From the CLI,
atlanai skill list and atlanai search cover the same ground in
one command — see the skills guide. For an agent doing this
itself, use registry__search.
Retrieve a version
Use the current Skill when you need the latest maintained package. Use a pinned version when an environment needs reproducible content. Verify that the selected version contains the files your consuming environment expects. Read a specific version’s metadata before downloading it:application/zip, not JSON. Compare the downloaded
package with the source bundle before a consuming environment uses it.
With the SDK, both bundle operations return raw bytes, so write them straight
to a file or read them in memory:
skill_get_version_enriched returns the version’s metadata and file
manifest; the bundle operations return the archive itself. Check the content
type before writing the bytes to a file — a problem response would otherwise
be saved as a corrupt archive.Publish a content change
Upload an updated ZIP to publish updated Skill content. Use the version-specific read or bundle actions in the Skill API category to verify that a consumer will receive the intended version. Use the same category when only a name or description needs to change.Inspect usage
After publication, find out whether the Skill is actually being used and how well it performs.measure comes from a fixed set:
request_type is scalar, table, or time_series. measure is one of
sessions, traces, spans, skill_invocations, tool_calls, tokens,
active_users, error_rate, success_rate, tokens_per_trace, cost,
latency_p50, latency_p90, or latency_p99.
Traces only appear here if the consuming runtime reports them. If a Skill you
know is in use shows nothing, the gap is instrumentation, not the Skill — see
the tracing SDKs or the
Claude Code trace plugin.
From the CLI,
atlanai skill runs and atlanai trace cover the same ground —
see the traces guide.
Related
Publish with the CLI
One command instead of a multipart request.
Publish from GitHub
Publish on merge from a protected branch.
Discover and use a skill
Reviewing a Skill before use.
Agents cookbook
Register an Agent and record its runs.