Skills & Logs
Creating and deleting skills, and the log sink clients write into.
Send these requests to your own running server. Values stay in this browser.
How this works
Start a server with nikcli serve --hostname 127.0.0.1 --port 4096. Requests go
straight from this page to that address — the browser allows it because loopback counts as a
secure origin, and the server allows it because nikcli-ai.dev is in its CORS
allowlist.
To try things without touching your real sessions or config, start the server with
NIKCLI_TEST_HOME pointed at a throwaway directory — see
the guided tour.
Operations
3 endpoints, generated from the
server's own OpenAPI document. Every path also accepts the
directory and workspace query parameters that select which instance
handles the request.
| post | /skill | app.skill.create |
| post | /log | app.log |
| delete | /skill/{name} | app.skill.delete |
app.skill.create | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ // Skill name (kebab-case recommended) name: string // Short description of the skill description: string // Optional category category?: string | null // Optional tags tags?: string[] | null // Optional markdown content body content?: string | null // Where to create the skill (default workspace) scope?: "workspace" | "global" | null }
{ name: string description: string location: string category?: string | null tags?: string[] | null version?: string | null }
Example response from schema
{
"name": "",
"description": "",
"location": "",
"category": "",
"tags": [
""
],
"version": ""
} Generated from the response schema — field values are placeholders, the shape is real.
SDK example
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"
const client = createNikcliClient()
await client.app.skill.create({
...
}) Try it
app.log | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ // Service name for the log entry service: string // Log level level: | "debug" | "info" | "error" | "warn" // Log message message: string // Additional metadata for the log entry extra?: { [key: string]: unknown } | null }
boolean Example response from schema
false
Generated from the response schema — field values are placeholders, the shape is real.
SDK example
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"
const client = createNikcliClient()
await client.app.log({
...
}) Try it
app.skill.delete | Name | In | Type | Required |
|---|---|---|---|
| name | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
boolean Example response from schema
false
Generated from the response schema — field values are placeholders, the shape is real.
SDK example
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"
const client = createNikcliClient()
await client.app.skill.delete({
...
}) Try it
This changes or removes server state, against whatever base URL is set above.
Schemas
The 3 schemas reachable from these endpoints. Each is shown one level
deep; nested types link to their own entry below.
Names ending in _2, _3 and so on are the OpenAPI emitter
disambiguating same-named schemas declared by different HttpApi groups — they are distinct
shapes, not duplicates.
{ // Service name for the log entry service: string // Log level level: | "debug" | "info" | "error" | "warn" // Log message message: string // Additional metadata for the log entry extra?: { [key: string]: unknown } | null }
{ // Skill name (kebab-case recommended) name: string // Short description of the skill description: string // Optional category category?: string | null // Optional tags tags?: string[] | null // Optional markdown content body content?: string | null // Where to create the skill (default workspace) scope?: "workspace" | "global" | null }
{ name: string description: string location: string category?: string | null tags?: string[] | null version?: string | null }