Skip to content
nikcli
Docs
Documentation

Mobile · Host & Bootstrap

The mobile host surface: pairing tokens, the bootstrap payload the app opens with, projects and commands, memory, worktrees, and the host capability probes behind browser, computer, island, devtools and LAN.

Playground

Send these requests to your own running server. Values stay in this browser.

Not connected
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

33 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.

get /mobile/auth/token mobile.auth.token.list
post /mobile/auth/token mobile.auth.token.create
delete /mobile/auth/token/{id} mobile.auth.token.revoke
get /mobile/bootstrap mobile.bootstrap
get /mobile/command mobile.command.list
get /mobile/project mobile.project.list
get /mobile/memory/history mobile.memory.history
get /mobile/memory/search mobile.memory.search
get /mobile/memory/stash mobile.memory.stash.list
post /mobile/memory/stash mobile.memory.stash.create
delete /mobile/memory/stash/{id} mobile.memory.stash.delete
post /mobile/worktree mobile.worktree.create
delete /mobile/worktree mobile.worktree.remove
post /mobile/worktree/reset mobile.worktree.reset
get /mobile/events mobile.events
get /mobile/brain mobile.brain.get
post /mobile/brain mobile.brain.trigger
get /mobile/chatbot/bots mobile.chatbot.list
post /mobile/chatbot/bots/{name}/start mobile.chatbot.start
post /mobile/chatbot/bots/{name}/stop mobile.chatbot.stop
get /mobile/observability mobile.observability.get
post /mobile/observability mobile.observability.set
get /mobile/lsp mobile.lsp.status
get /mobile/fusion mobile.fusion.list
post /mobile/fusion mobile.fusion.set
get /mobile/host/browser mobile.host.browser
get /mobile/host/computer mobile.host.computer
get /mobile/host/herdr mobile.host.herdr.get
post /mobile/host/herdr mobile.host.herdr.set
get /mobile/host/island mobile.host.island
get /mobile/host/devtools mobile.host.devtools
get /mobile/host/lan mobile.host.lan.get
post /mobile/host/lan mobile.host.lan.start

Auth

get /mobile/auth/token # mobile.auth.token.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  id: string
  name: string
  createdAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  lastUsedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  expiresAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  scope?: string | null
})[]
Example response from schema
[
  {
    "id": "",
    "name": "",
    "createdAt": 0,
    "lastUsedAt": 0,
    "expiresAt": 0,
    "scope": ""
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.auth.token.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.auth.token.list({
  ...
})
Try it
post /mobile/auth/token # mobile.auth.token.create
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  name?: string
  expiresInDays?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
Responses
200 Success application/json
{
  token: string
  info: {
    id: string
    name: string
    createdAt: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    lastUsedAt?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    expiresAt?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    scope?: string | null
  }
}
Example response from schema
{
  "token": "",
  "info": {
    "id": "",
    "name": "",
    "createdAt": 0,
    "lastUsedAt": 0,
    "expiresAt": 0,
    "scope": ""
  }
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.auth.token.create
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.auth.token.create({
  ...
})
Try it
delete /mobile/auth/token/{id} # mobile.auth.token.revoke
Parameters
Name In Type Required
id path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  revoked: boolean
}
Example response from schema
{
  "revoked": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.auth.token.revoke
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.auth.token.revoke({
  ...
})
Try it

This changes or removes server state, against whatever base URL is set above.

Bootstrap

get /mobile/bootstrap # mobile.bootstrap
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 MobileBootstrap application/json
{
  version: string
  auth: {
    bearerEnabled: boolean
    currentToken?: MobileAuthTokenPublic | null
  }
  currentProject: MobileProject
  projects: MobileProject[]
  execution: {
    container: {
      available: boolean
      runtime?: "docker" | "podman" | null
      image: string
    }
  }
  github: {
    connected: boolean
    tokenAvailable?: boolean | null
    reconnectRequired?: boolean | null
    oauthDeviceEnabled: boolean
    oauthDeviceConfigured?: boolean | null
    oauthClientSource?: "flag" | "config" | "env" | null
    user?: 
      | {
      login: string
      name?: string | null | null
      avatar_url?: string | null
    }
      | null
  }
  expo: {
    available: boolean
    easAvailable: boolean
    details: string[]
  }
  mobileProject?: 
    | {
    detected: boolean
    platforms?: string[] | null
    primaryPlatform?: string | null
    method?: string | null
    root?: string | null
  }
    | null
}
Example response from schema
{
  "version": "",
  "auth": {
    "bearerEnabled": false,
    "currentToken": {
      "id": "",
      "name": "",
      "createdAt": 0,
      "lastUsedAt": 0,
      "expiresAt": 0,
      "scope": ""
    }
  },
  "currentProject": {
    "id": "",
    "worktree": "",
    "canonical": "",
    "vcs": "git",
    "name": "",
    "icon": {
      "url": "",
      "override": "",
      "color": ""
    },
    "commands": {
      "start": ""
    },
    "time": {
      "created": 0,
      "updated": 0,
      "initialized": 0
    },
    "sandboxes": [
      ""
    ],
    "current": false
  },
  "projects": [
    {
      "id": "",
      "worktree": "",
      "canonical": "",
      "vcs": "git",
      "name": "",
      "icon": {
        "url": null,
        "override": null,
        "color": null
      },
      "commands": {
        "start": null
      },
      "time": {
        "created": null,
        "updated": null,
        "initialized": null
      },
      "sandboxes": [],
      "current": false
    }
  ],
  "execution": {
    "container": {
      "available": false,
      "runtime": "docker",
      "image": ""
    }
  },
  "github": {
    "connected": false,
    "tokenAvailable": false,
    "reconnectRequired": false,
    "oauthDeviceEnabled": false,
    "oauthDeviceConfigured": false,
    "oauthClientSource": "flag",
    "user": {
      "login": "",
      "name": "",
      "avatar_url": ""
    }
  },
  "expo": {
    "available": false,
    "easAvailable": false,
    "details": [
      ""
    ]
  },
  "mobileProject": {
    "detected": false,
    "platforms": [
      ""
    ],
    "primaryPlatform": "",
    "method": "",
    "root": ""
  }
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.bootstrap
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.bootstrap({
  ...
})
Try it

Command

get /mobile/command # mobile.command.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  name: string
  description?: string | null
  agent?: string | null
  model?: string | null
  mcp?: boolean | null
  skill?: boolean | null
  subtask?: boolean | null
  hints: string[]
})[]
Example response from schema
[
  {
    "name": "",
    "description": "",
    "agent": "",
    "model": "",
    "mcp": false,
    "skill": false,
    "subtask": false,
    "hints": [
      ""
    ]
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.command.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.command.list({
  ...
})
Try it

Project

get /mobile/project # mobile.project.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  id: string
  worktree: string
  canonical: string
  vcs?: "git" | null
  name?: string | null
  icon?: 
    | {
    url?: string | null
    override?: string | null
    color?: string | null
  }
    | null
  commands?: 
    | {
    start?: string | null
  }
    | null
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    initialized?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  sandboxes: string[]
  current: boolean
})[]
Example response from schema
[
  {
    "id": "",
    "worktree": "",
    "canonical": "",
    "vcs": "git",
    "name": "",
    "icon": {
      "url": "",
      "override": "",
      "color": ""
    },
    "commands": {
      "start": ""
    },
    "time": {
      "created": 0,
      "updated": 0,
      "initialized": 0
    },
    "sandboxes": [
      ""
    ],
    "current": false
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.project.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.project.list({
  ...
})
Try it

Memory

get /mobile/memory/history # mobile.memory.history
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  id: string
  input: string
  mode?: "normal" | "shell" | null
  partsCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
})[]
Example response from schema
[
  {
    "id": "",
    "input": "",
    "mode": "normal",
    "partsCount": 0
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.memory.history
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.memory.history({
  ...
})
Try it
get /mobile/memory/stash # mobile.memory.stash.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  id: string
  input: string
  timestamp: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  partsCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
})[]
Example response from schema
[
  {
    "id": "",
    "input": "",
    "timestamp": 0,
    "partsCount": 0
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.memory.stash.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.memory.stash.list({
  ...
})
Try it
post /mobile/memory/stash # mobile.memory.stash.create
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  input: string
}
Responses
200 MobilePromptStashEntry application/json
{
  id: string
  input: string
  timestamp: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  partsCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
Example response from schema
{
  "id": "",
  "input": "",
  "timestamp": 0,
  "partsCount": 0
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.memory.stash.create
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.memory.stash.create({
  ...
})
Try it
delete /mobile/memory/stash/{id} # mobile.memory.stash.delete
Parameters
Name In Type Required
id path string required
directory query string optional
workspace query string optional
Responses
200 MobileSuccess application/json
{
  success: true
}
404 MobileNotFound application/json
{
  name: "NotFoundError"
  error: string
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.memory.stash.delete
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.memory.stash.delete({
  ...
})
Try it

This changes or removes server state, against whatever base URL is set above.

Worktree

post /mobile/worktree # mobile.worktree.create
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  name?: string | null
  branch?: string | null
  branchPrefix?: string | null
  baseBranch?: string | null
  remote?: string | null
  startCommand?: string | null
  detached?: boolean | null
  sourceDirectory?: string | null
  root?: string | null
}
Responses
200 Worktree application/json
{
  name: string
  branch?: string | null
  directory: string
}
Example response from schema
{
  "name": "",
  "branch": "",
  "directory": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.worktree.create
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.worktree.create({
  ...
})
Try it
delete /mobile/worktree # mobile.worktree.remove
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  directory: string
  force?: boolean | null
}
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.worktree.remove
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.worktree.remove({
  ...
})
Try it

This changes or removes server state, against whatever base URL is set above.

post /mobile/worktree/reset # mobile.worktree.reset
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  directory: string
}
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.worktree.reset
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.worktree.reset({
  ...
})
Try it

Events

get /mobile/events # mobile.events
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success text/event-stream
{
  id: string | null
  event: string
  data: string
}
Example response from schema
{
  "id": "",
  "event": "",
  "data": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.events
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.events({
  ...
})
Try it

Brain

get /mobile/brain # mobile.brain.get
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  enabled: boolean
  memoryEnabled: boolean
  minHours: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  minSessions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  lastBrainAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  hoursSinceLastBrain: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  sessionsSinceLastBrain: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  shouldTrigger: boolean
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
}
Example response from schema
{
  "enabled": false,
  "memoryEnabled": false,
  "minHours": 0,
  "minSessions": 0,
  "lastBrainAt": 0,
  "hoursSinceLastBrain": 0,
  "sessionsSinceLastBrain": 0,
  "shouldTrigger": false,
  "model": {
    "providerID": "",
    "modelID": ""
  }
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.brain.get
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.brain.get({
  ...
})
Try it
post /mobile/brain # mobile.brain.trigger
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
  | {
  force?: boolean | null
}
  | null
Responses
200 Success application/json
{
  success: boolean
  sessionsReviewed: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  hoursSinceLastBrain: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  error?: string | null
  sessionID?: string | null
}
Example response from schema
{
  "success": false,
  "sessionsReviewed": 0,
  "hoursSinceLastBrain": 0,
  "error": "",
  "sessionID": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.brain.trigger
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.brain.trigger({
  ...
})
Try it

Chatbot

get /mobile/chatbot/bots # mobile.chatbot.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  bots: ({
    name: string
    type: string
    running: boolean
    webhookPath: string
  })[]
}
Example response from schema
{
  "bots": [
    {
      "name": "",
      "type": "",
      "running": false,
      "webhookPath": ""
    }
  ]
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.chatbot.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.chatbot.list({
  ...
})
Try it
post /mobile/chatbot/bots/{name}/start # mobile.chatbot.start
Parameters
Name In Type Required
name path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  running: boolean
  error?: string | null
}
Example response from schema
{
  "running": false,
  "error": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.chatbot.start
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.chatbot.start({
  ...
})
Try it
post /mobile/chatbot/bots/{name}/stop # mobile.chatbot.stop
Parameters
Name In Type Required
name path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  removed: boolean
}
Example response from schema
{
  "removed": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.chatbot.stop
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.chatbot.stop({
  ...
})
Try it

Observability

get /mobile/observability # mobile.observability.get
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  enabled: boolean
  otlpEndpoint: string | null
}
Example response from schema
{
  "enabled": false,
  "otlpEndpoint": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.observability.get
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.observability.get({
  ...
})
Try it
post /mobile/observability # mobile.observability.set
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  enabled: boolean
}
Responses
200 Success application/json
{
  enabled: boolean
  otlpEndpoint: string | null
}
Example response from schema
{
  "enabled": false,
  "otlpEndpoint": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.observability.set
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.observability.set({
  ...
})
Try it

Lsp

get /mobile/lsp # mobile.lsp.status
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  servers: ({
    id: string
    name: string
    root: string
    status: "connected" | "error"
  })[]
  error?: string | null
}
Example response from schema
{
  "servers": [
    {
      "id": "",
      "name": "",
      "root": "",
      "status": "connected"
    }
  ],
  "error": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.lsp.status
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.lsp.status({
  ...
})
Try it

Fusion

get /mobile/fusion # mobile.fusion.list
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  presets: ({
    name: string
    builtin: boolean
    enabled: boolean
  })[]
}
Example response from schema
{
  "presets": [
    {
      "name": "",
      "builtin": false,
      "enabled": false
    }
  ]
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.fusion.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.fusion.list({
  ...
})
Try it
post /mobile/fusion # mobile.fusion.set
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  name: string
  enabled: boolean
}
Responses
200 Success application/json
{
  name: string
  enabled: boolean
}
Example response from schema
{
  "name": "",
  "enabled": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.fusion.set
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.fusion.set({
  ...
})
Try it

Host

get /mobile/host/browser # mobile.host.browser
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  sessions?: unknown[] | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "sessions": []
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.browser
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.browser({
  ...
})
Try it
get /mobile/host/computer # mobile.host.computer
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  platform?: string | null
  screenshot?: boolean | null
  input?: boolean | null
  detail?: string | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "platform": "",
  "screenshot": false,
  "input": false,
  "detail": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.computer
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.computer({
  ...
})
Try it
get /mobile/host/herdr # mobile.host.herdr.get
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  enabled?: boolean | null
  installed?: boolean | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "enabled": false,
  "installed": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.herdr.get
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.herdr.get({
  ...
})
Try it
post /mobile/host/herdr # mobile.host.herdr.set
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  enabled: boolean
}
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  enabled?: boolean | null
  installed?: boolean | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "enabled": false,
  "installed": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.herdr.set
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.herdr.set({
  ...
})
Try it
get /mobile/host/island # mobile.host.island
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  supported?: boolean | null
  enabled?: boolean | null
  appRunning?: boolean | null
  sessions?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "supported": false,
  "enabled": false,
  "appRunning": false,
  "sessions": 0
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.island
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.island({
  ...
})
Try it
get /mobile/host/devtools # mobile.host.devtools
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  available: boolean
  reason?: string | null
  rss?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  heapUsed?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  heapTotal?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  external?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  pid?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  uptimeSec?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  platform?: string | null
}
Example response from schema
{
  "available": false,
  "reason": "",
  "rss": 0,
  "heapUsed": 0,
  "heapTotal": 0,
  "external": 0,
  "pid": 0,
  "uptimeSec": 0,
  "platform": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.devtools
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.devtools({
  ...
})
Try it
get /mobile/host/lan # mobile.host.lan.get
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 MobileHostLan application/json
{
  listening: boolean
  url?: string | null
  hostname?: string | null
  port?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
Example response from schema
{
  "listening": false,
  "url": "",
  "hostname": "",
  "port": 0
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.lan.get
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.lan.get({
  ...
})
Try it
post /mobile/host/lan # mobile.host.lan.start
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  mdns?: boolean
}
Responses
200 MobileHostLan application/json
{
  listening: boolean
  url?: string | null
  hostname?: string | null
  port?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
Example response from schema
{
  "listening": false,
  "url": "",
  "hostname": "",
  "port": 0
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.host.lan.start
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.host.lan.start({
  ...
})
Try it

Schemas

The 16 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.

MobileAuthTokenCreateInput
{
  name?: string
  expiresInDays?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
MobileAuthTokenPublic
{
  id: string
  name: string
  createdAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  lastUsedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  expiresAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  scope?: string | null
}
MobileBootstrap
{
  version: string
  auth: {
    bearerEnabled: boolean
    currentToken?: MobileAuthTokenPublic | null
  }
  currentProject: MobileProject
  projects: MobileProject[]
  execution: {
    container: {
      available: boolean
      runtime?: "docker" | "podman" | null
      image: string
    }
  }
  github: {
    connected: boolean
    tokenAvailable?: boolean | null
    reconnectRequired?: boolean | null
    oauthDeviceEnabled: boolean
    oauthDeviceConfigured?: boolean | null
    oauthClientSource?: "flag" | "config" | "env" | null
    user?: 
      | {
      login: string
      name?: string | null | null
      avatar_url?: string | null
    }
      | null
  }
  expo: {
    available: boolean
    easAvailable: boolean
    details: string[]
  }
  mobileProject?: 
    | {
    detected: boolean
    platforms?: string[] | null
    primaryPlatform?: string | null
    method?: string | null
    root?: string | null
  }
    | null
}
MobileCommand
{
  name: string
  description?: string | null
  agent?: string | null
  model?: string | null
  mcp?: boolean | null
  skill?: boolean | null
  subtask?: boolean | null
  hints: string[]
}
MobileHostLan
{
  listening: boolean
  url?: string | null
  hostname?: string | null
  port?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
MobileHostLanStartInput
{
  mdns?: boolean
}
MobileMemorySearchHit
{
  id: string
  sessionID: string
  sessionTitle: string
  messageID: string
  role: "user" | "assistant"
  createdAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  preview: string
}
MobileNotFound
{
  name: "NotFoundError"
  error: string
}
MobileProject
{
  id: string
  worktree: string
  canonical: string
  vcs?: "git" | null
  name?: string | null
  icon?: 
    | {
    url?: string | null
    override?: string | null
    color?: string | null
  }
    | null
  commands?: 
    | {
    start?: string | null
  }
    | null
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    initialized?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  sandboxes: string[]
  current: boolean
}
MobilePromptHistoryEntry
{
  id: string
  input: string
  mode?: "normal" | "shell" | null
  partsCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
MobilePromptStashEntry
{
  id: string
  input: string
  timestamp: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  partsCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
MobileSuccess
{
  success: true
}
MobileWorktreeCreateInput
{
  name?: string | null
  branch?: string | null
  branchPrefix?: string | null
  baseBranch?: string | null
  remote?: string | null
  startCommand?: string | null
  detached?: boolean | null
  sourceDirectory?: string | null
  root?: string | null
}
MobileWorktreeRemoveInput
{
  directory: string
  force?: boolean | null
}
MobileWorktreeResetInput
{
  directory: string
}
Worktree_2
{
  name: string
  branch?: string | null
  directory: string
}