원클릭으로
create-skill
Author a new SKILL.md from a user prompt, or migrate an existing non-spec skill to the Anthropic Agent Skills format.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Author a new SKILL.md from a user prompt, or migrate an existing non-spec skill to the Anthropic Agent Skills format.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Google Calendar via gws: list events, create, accept, find free time.
Google Docs via gws: read, append text, structured batch edits.
Google Drive via gws: search, list, upload, download, share.
Google Forms via gws: create forms, add items, read responses.
Gmail via gws: send, read, search, label, draft, reply, forward.
Google Sheets via gws: read/write cells, append rows, structured batch edits.
SOC 직업 분류 기준
| name | create-skill |
| description | Author a new SKILL.md from a user prompt, or migrate an existing non-spec skill to the Anthropic Agent Skills format. |
| license | MIT |
| compatibility | Requires the gini gateway. |
| allowed-tools | Bash file_write file_patch |
| metadata | {"gini":{"version":"1.0.0","author":"Gini","category":"meta","requires":{"credentials":[]}}} |
You author new skills from a prompt and migrate legacy skills to the Anthropic Agent Skills specification. The goal is one spec-compliant SKILL.md plus optional scripts the agent can later run.
version, author, platforms,
prerequisites, requires.connectors).Required top-level frontmatter keys (Anthropic Agent Skills spec):
name — max 64 chars, lowercase + digits + hyphens, must equal the
parent directory name.description — max 1024 chars.Optional spec keys:
license — free-form string.compatibility — max 500 chars; human summary of environment needs.metadata — arbitrary; Gini extensions live under metadata.gini.*.allowed-tools — space-separated list of tool names the skill plans
to invoke (advisory; recorded in audit trail).Gini extensions (under metadata.gini):
version, author, platformsprerequisites: { commands, env }requires.credentials: [<credential-name>] — the credential names the
skill needs, referenced by name (e.g. [LINEAR_API_KEY] for an
api-key credential, [google-workspace-oauth] for the Google oauth2
credential). This is the current, preferred form.requires.connectors: [{ provider, scopes? }] — still accepted for
backward compatibility during the migration window; prefer
requires.credentials.Confirm the user's intent. If the request is "create a skill that posts to Slack", clarify whether the skill should also read messages, list channels, etc. — surface the cardinality so the design is right.
Decide whether the skill needs a credential. Use
requires.credentials only when the skill needs a configured account,
credential, remote API, or connector-backed local integration. Each
entry is a credential NAME — LINEAR_API_KEY for an api-key
credential, google-workspace-oauth for the Google oauth2 credential.
Check the configured credentials in GET /api/connectors to find the
right name. If the skill only needs local commands such as git,
gh, jq, or curl, record those under prerequisites.commands and
set requires.credentials: []. If the skill truly needs a credential
that hasn't been configured yet, name it the way the credential will
be stored (the env-var name for an api-key) and tell the user to add
it. Do not ask the user to pick between install/skip on unknown
credentials — default to forward motion.
(requires.connectors: [{ provider }] is still accepted for backward
compatibility, but requires.credentials is preferred.)
Draft the frontmatter. Use this template:
---
name: <kebab-case-name>
description: "<one-liner>"
license: MIT
compatibility: "<one sentence describing host requirements>"
allowed-tools: "<space-separated tool names>"
metadata:
gini:
version: 1.0.0
author: <user-or-"Gini">
platforms: [<macos|linux|windows>]
prerequisites:
commands: [<cli names>]
env: [<ENV_VAR_NAMES>]
requires:
# Leave empty for local-command-only skills. If a credential is
# needed, list it by name, e.g. [LINEAR_API_KEY] or
# [google-workspace-oauth].
credentials: []
---
Write the body. The body is the model's manual for this skill at
runtime — concrete examples, when-to-use / when-not-to-use sections,
exact commands. Imitate the body shape of
skills/apple/apple-notes/SKILL.md for a working reference.
Validate before writing to disk. Run:
bun run gini skill validate /tmp/draft-skill.md
Fix every issue the validator reports. Common failures:
name is uppercase or contains underscores → switch to kebab-case.description exceeds 1024 chars → tighten it.name → adjust whichever is wrong.[A-Z][A-Z0-9_]*, e.g. LINEAR_API_KEY); if the skill
only needs local commands, remove the credential requirement.Install the skill via the API so the runtime picks it up:
curl -sS -X POST http://localhost:<runtime-port>/api/skills \
-H "authorization: Bearer $GINI_TOKEN" \
-H "content-type: application/json" \
-d "$(jq -nc \
--arg body "$(cat /tmp/draft-skill.md)" \
'{ body: $body }')"
The endpoint writes the file flat under
~/.gini/instances/<instance>/skills/<name>/SKILL.md
and triggers a loader reload. The response includes the new
SkillRecord with validation: { ok, issues }.
Walk the credential dependency:
requires.credentials.GET /api/connectors. If a healthy credential with
that name already exists, you are done.request_connector (passing the
new skill's id as skillId) so they can enter it securely — the card
stores the credential and grants it to the skill in one step. For a
credential with no registered provider, use the templateless
{name, type, skillId} shape. The /skills page (find the new skill,
click the inline [Set up <Credential>] button) is a fallback when the
secure card cannot render. There is no standalone Connectors page.When converting a legacy SKILL.md, the recipe is:
Move version, author, platforms, prerequisites, and the
credential requirement under metadata.gini.*, landing on the current
requires.credentials: [<name>] form. Convert legacy connector
declarations to credential names:
requires.identities[].kind and requires.connectors[].provider →
requires.credentials[] names (e.g. linear → LINEAR_API_KEY,
google-oauth-desktop → google-workspace-oauth).
The legacy requires.identities / kind: and requires.connectors /
provider: shapes are what older SKILL.md files used;
requires.connectors is still accepted for backward compatibility, but
migrate to requires.credentials when rewriting.Move compatibility to the top level if you can describe the host
contract in ≤ 500 chars.
Add allowed-tools at the top level when the skill is meant to run
under an agent harness that respects it.
Re-validate with gini skill validate before installing.
GET /api/connectors for the credentials the new skill
will depend on, and reference them by name in requires.credentials.
Do not add a credential requirement for local-command-only skills.