Mobile · Git & GitHub
The git toolbar behind the mobile review panel — status, diff, commits, branches, stage, commit, push and pull — plus the GitHub side: repos, branches, imports, Actions runs and the device OAuth flow.
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
27 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.
Repos
mobile.github.repos | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
unknown[]
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
[]
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.mobile.github.repos({
...
}) Try it
mobile.github.branches | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
({ name: string protected?: boolean | null commit: { sha: string } })[]
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
[
{
"name": "",
"protected": false,
"commit": {
"sha": ""
}
}
] 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.mobile.github.branches({
...
}) Try it
mobile.github.actions.workflows | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
({ id: | number | "Infinity" | "-Infinity" | "NaN" name: string path: string state: string htmlUrl?: string | null })[]
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
[
{
"id": 0,
"name": "",
"path": "",
"state": "",
"htmlUrl": ""
}
] 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.mobile.github.actions.workflows({
...
}) Try it
mobile.github.actions.runs | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| branch | query | string | null | optional |
| limit | query | string | null | optional |
| directory | query | string | optional |
| workspace | query | string | optional |
{ runs: MobileGithubWorkflowRun[] totalCount: | number | "Infinity" | "-Infinity" | "NaN" configured: boolean }
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
{
"runs": [
{
"id": 0,
"name": "",
"workflowID": 0,
"runNumber": 0,
"attempt": 0,
"status": "",
"conclusion": "",
"event": "",
"branch": "",
"sha": "",
"title": "",
"actor": {
"login": null,
"avatarUrl": null
},
"htmlUrl": "",
"createdAt": 0,
"updatedAt": 0,
"startedAt": 0,
"durationMs": 0
}
],
"totalCount": 0,
"configured": 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.mobile.github.actions.runs({
...
}) Try it
mobile.github.actions.run.jobs | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| runID | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
({ id: | number | "Infinity" | "-Infinity" | "NaN" name: string status: string conclusion?: string | null htmlUrl?: string | null startedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null completedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null durationMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null steps: MobileGithubWorkflowStep[] })[]
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
[
{
"id": 0,
"name": "",
"status": "",
"conclusion": "",
"htmlUrl": "",
"startedAt": 0,
"completedAt": 0,
"durationMs": 0,
"steps": [
{
"name": null,
"number": null,
"status": null,
"conclusion": null,
"startedAt": null,
"completedAt": null
}
]
}
] 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.mobile.github.actions.run.jobs({
...
}) Try it
mobile.github.actions.run.rerun | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| runID | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
{ failedOnly?: boolean | null }
{ success: true }
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
{
"success": true
} 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.mobile.github.actions.run.rerun({
...
}) Try it
mobile.github.actions.run.cancel | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| runID | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
{ success: true }
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
{
"success": true
} 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.mobile.github.actions.run.cancel({
...
}) Try it
mobile.github.actions.workflow.dispatch | Name | In | Type | Required |
|---|---|---|---|
| owner | path | string | required |
| repo | path | string | required |
| workflowID | path | string | required |
| directory | query | string | optional |
| workspace | query | string | optional |
{ ref: string inputs?: | { [key: string]: string } | null }
{ success: true }
{ name: "BadRequest" error: string }
{ name: "Unauthorized" error: string }
Example response from schema
{
"success": true
} 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.mobile.github.actions.workflow.dispatch({
...
}) Try it
Imports
mobile.github.imports | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
({ owner: string repo: string fullName: string directory: string cloneUrl: string defaultBranch: string private: boolean importedAt: | number | "Infinity" | "-Infinity" | "NaN" updatedAt: | number | "Infinity" | "-Infinity" | "NaN" projectID?: string | null })[]
Example response from schema
[
{
"owner": "",
"repo": "",
"fullName": "",
"directory": "",
"cloneUrl": "",
"defaultBranch": "",
"private": false,
"importedAt": 0,
"updatedAt": 0,
"projectID": ""
}
] 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.mobile.github.imports({
...
}) Try it
Oauth
mobile.github.oauth.clientId.set | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ clientId: string }
{ $schema?: string | null theme?: string | null locale?: | { language?: string | null region?: string | null locale?: string | null timezone?: string | null currency?: string | null autoDetect?: boolean | null replyLanguage?: boolean | string | null } | null keybinds?: KeybindsConfig_1 | null logLevel?: LogLevel_1 | null tui?: | { scroll_speed?: | | number | "Infinity" | "-Infinity" | "NaN" | null scroll_acceleration?: | { enabled: boolean } | null diff_style?: "auto" | "stacked" | null mouse?: boolean | null sound?: boolean | null bg_pulse?: boolean | null turn_tokens?: boolean | null } | null ads?: AdsConfig_1 | null server?: ServerConfig_1 | null remote?: RemoteConfig_1 | null teleport?: TeleportConfig_1 | null command?: | { [key: string]: { template?: string | null description?: string | null agent?: string | null model?: string | null subtask?: boolean | null aliases?: string[] | null } } | null reference?: | { [key: string]: ReferenceConfig_1 } | null watcher?: | { ignore?: string[] | null } | null plugin?: string[] | null snapshot?: boolean | null sync?: | { url?: string | null token?: string | null autostart?: boolean | null } | null analytics?: | { share?: boolean | null endpoint?: string | null } | null share?: "manual" | "auto" | "disabled" | null autoshare?: boolean | null autoupdate?: boolean | "notify" | null disabled_providers?: string[] | null enabled_providers?: string[] | null model?: string | null small_model?: string | null default_agent?: string | null username?: string | null mode?: | { [key: string]: AgentConfig_1 | null } | null agent?: | { [key: string]: AgentConfig_1 | null } | null provider?: | { [key: string]: ProviderConfig_1 } | null mcp?: | { [key: string]: | McpLocalConfig_1 | McpRemoteConfig_1 | { enabled: boolean } } | null connectors?: | { [key: string]: | | ConnectorFigma_1 | ConnectorSlack_1 | ConnectorGithub_1 | ConnectorLovable_1 | ConnectorDiscord_1 | ConnectorTeams_1 | ConnectorGChat_1 | ConnectorLinear_1 | { enabled: boolean } } | null formatter?: | | false | true | { [key: string]: { disabled?: boolean | null command?: string[] | null environment?: | { [key: string]: string } | null extensions?: string[] | null } } | null websearch?: | { provider?: "exa" | "parallel" | "mcp" | null apiKey?: string | null url?: string | null tool?: string | null } | null lsp?: | | false | { [key: string]: | { disabled: true } | { command: string[] extensions?: string[] | null disabled?: boolean | null env?: | { [key: string]: string } | null initialization?: { [key: string]: unknown } | null min_severity?: | | number | "Infinity" | "-Infinity" | "NaN" | null } } | null instructions?: string[] | null layout?: LayoutConfig_1 | null permission?: PermissionConfig | null permission_mode?: PermissionModeConfig_1 | null auto_mode?: AutoModeConfig_1 | null tools?: | { [key: string]: boolean } | null tool?: | { allow?: string[] | null pin?: | { [key: string]: string } | null eager?: string[] | null } | null enterprise?: | { url?: string | null } | null compaction?: | { auto?: boolean | null prune?: boolean | null reserved?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null experimental?: | { policies?: PolicyStatementConfig_1[] | null hook?: | { file_edited?: | { [key: string]: ({ command: string[] environment?: | { [key: string]: string } | null })[] } | null session_completed?: | ({ command: string[] environment?: | { [key: string]: string } | null })[] | null } | null queued_message_wrap?: | | { header: string footer: string } | "default" | boolean | null | null chatMaxRetries?: | | number | "Infinity" | "-Infinity" | "NaN" | null disable_paste_summary?: boolean | null batch_tool?: boolean | null openTelemetry?: boolean | null primary_tools?: string[] | null continue_loop_on_deny?: boolean | null brain?: boolean | null brainMinHours?: | | number | "Infinity" | "-Infinity" | "NaN" | null brainMinSessions?: | | number | "Infinity" | "-Infinity" | "NaN" | null brainModel?: string | null memory?: boolean | null mcp_timeout?: | | number | "Infinity" | "-Infinity" | "NaN" | null tool_timeout?: | | | number | "Infinity" | "-Infinity" | "NaN" | false | null task_timeout?: | | | number | "Infinity" | "-Infinity" | "NaN" | false | null nativeLlm?: boolean | null tui?: | { cacheEviction?: boolean | null messageVirtualization?: boolean | null explorationGrouping?: boolean | null } | null requests?: | { latestOnlyLspRefresh?: boolean | null } | null events?: | { schemaEncoding?: boolean | null } | null } | null rag?: RagConfig_1 | null image?: ImageConfig_1 | null browser?: unknown | null computer?: ComputerConfig_1 | null attachment?: AttachmentConfig_1 | null speak?: SpeakConfig_1 | null notifications?: | { todo?: | { enabled?: boolean | null macos?: boolean | null slack?: | { enabled?: boolean | null connector?: string | null channel?: string | null } | null discord?: | { enabled?: boolean | null webhook?: string | null } | null } | null icon?: | { url?: string | null alt?: string | null } | null notify?: | { enabled?: boolean | null macos?: boolean | null slack?: | { enabled?: boolean | null connector?: string | null channel?: string | null } | null discord?: | { enabled?: boolean | null webhook?: string | null } | null events?: | { sessionIdle?: boolean | null sessionError?: boolean | null permissionAsked?: boolean | null questionAsked?: boolean | null } | null idleMinMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null rateLimit?: | { windowMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null maxPerWindow?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null retry?: | { attempts?: | | number | "Infinity" | "-Infinity" | "NaN" | null delay?: | | number | "Infinity" | "-Infinity" | "NaN" | null factor?: | | number | "Infinity" | "-Infinity" | "NaN" | null maxDelay?: | | number | "Infinity" | "-Infinity" | "NaN" | null timeoutMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null breaker?: | { failures?: | | number | "Infinity" | "-Infinity" | "NaN" | null cooldownMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null quietHours?: | { enabled?: boolean | null start?: string | null end?: string | null suppress?: | ("macos" | "slack" | "discord")[] | null } | null } | null } | null mobile?: | { tophat?: | { enabled?: boolean | null cliPath?: string | null defaultPlatform?: "ios" | "android" | null defaultDestination?: | "device" | "simulator" | "emulator" | null autoDetect?: boolean | null } | null } | null }
Example response from schema
{
"$schema": "",
"theme": "",
"locale": {
"language": "",
"region": "",
"locale": "",
"timezone": "",
"currency": "",
"autoDetect": false,
"replyLanguage": false
},
"keybinds": {
"leader": "",
"app_exit": "",
"editor_open": "",
"theme_list": "",
"sidebar_toggle": "",
"scrollbar_toggle": "",
"username_toggle": "",
"status_view": "",
"sync_view": "",
"session_export": "",
"session_new": "",
"session_list": "",
"session_timeline": "",
"session_fork": "",
"session_rename": "",
"session_delete": "",
"session_pin_toggle": "",
"session_scope_toggle": "",
"session_tab_back": "",
"session_tab_forward": "",
"session_quick_switch_1": "",
"session_quick_switch_2": "",
"session_quick_switch_3": "",
"session_quick_switch_4": "",
"session_quick_switch_5": "",
"session_quick_switch_6": "",
"session_quick_switch_7": "",
"session_quick_switch_8": "",
"session_quick_switch_9": "",
"stash_delete": "",
"model_provider_list": "",
"model_favorite_toggle": "",
"session_share": "",
"session_unshare": "",
"session_interrupt": "",
"session_codebro_open": "",
"subtask_background": "",
"subtask_picker": "",
"session_compact": "",
"messages_page_up": "",
"messages_page_down": "",
"messages_line_up": "",
"messages_line_down": "",
"messages_half_page_up": "",
"messages_half_page_down": "",
"messages_first": "",
"messages_last": "",
"messages_next": "",
"messages_previous": "",
"messages_last_user": "",
"messages_copy": "",
"messages_undo": "",
"messages_redo": "",
"messages_toggle_conceal": "",
"tool_details": "",
"model_list": "",
"model_cycle_recent": "",
"model_cycle_recent_reverse": "",
"model_cycle_favorite": "",
"model_cycle_favorite_reverse": "",
"command_list": "",
"agent_list": "",
"agent_cycle": "",
"agent_cycle_reverse": "",
"permission_mode": "",
"variant_cycle": "",
"input_clear": "",
"input_paste": "",
"input_submit": "",
"input_newline": "",
"input_move_left": "",
"input_move_right": "",
"input_move_up": "",
"input_move_down": "",
"input_select_left": "",
"input_select_right": "",
"input_select_up": "",
"input_select_down": "",
"input_line_home": "",
"input_line_end": "",
"input_select_line_home": "",
"input_select_line_end": "",
"input_visual_line_home": "",
"input_visual_line_end": "",
"input_select_visual_line_home": "",
"input_select_visual_line_end": "",
"input_buffer_home": "",
"input_buffer_end": "",
"input_select_buffer_home": "",
"input_select_buffer_end": "",
"input_delete_line": "",
"input_delete_to_line_end": "",
"input_delete_to_line_start": "",
"input_backspace": "",
"input_delete": "",
"input_undo": "",
"input_redo": "",
"input_word_forward": "",
"input_word_backward": "",
"input_select_word_forward": "",
"input_select_word_backward": "",
"input_delete_word_forward": "",
"input_delete_word_backward": "",
"history_previous": "",
"history_next": "",
"session_child_cycle": "",
"session_child_cycle_reverse": "",
"session_parent": "",
"session_child_close": "",
"terminal_suspend": "",
"terminal_title_toggle": "",
"tips_toggle": "",
"voice_record": "",
"app_support": ""
},
"logLevel": "DEBUG",
"tui": {
"scroll_speed": 0,
"scroll_acceleration": {
"enabled": false
},
"diff_style": "auto",
"mouse": false,
"sound": false,
"bg_pulse": false,
"turn_tokens": false
},
"ads": {
"enabled": false,
"ratio": 0,
"items": [
{
"id": null,
"text": null,
"url": null,
"enabled": null
}
]
},
"server": {
"port": 0,
"hostname": "",
"mdns": false,
"cors": [
""
]
},
"remote": {
"enabled": false,
"enableTunnel": false,
"provider": "localtunnel",
"askOnExistingSession": false
},
"teleport": {
"url": "",
"token": ""
},
"command": {},
"reference": {},
"watcher": {
"ignore": [
""
]
},
"plugin": [
""
],
"snapshot": false,
"sync": {
"url": "",
"token": "",
"autostart": false
},
"analytics": {
"share": false,
"endpoint": ""
},
"share": "manual",
"autoshare": false,
"autoupdate": false,
"disabled_providers": [
""
],
"enabled_providers": [
""
],
"model": "",
"small_model": "",
"default_agent": "",
"username": "",
"mode": {},
"agent": {},
"provider": {},
"mcp": {},
"connectors": {},
"formatter": false,
"websearch": {
"provider": "exa",
"apiKey": "",
"url": "",
"tool": ""
},
"lsp": false,
"instructions": [
""
],
"layout": "auto",
"permission": {},
"permission_mode": "default",
"auto_mode": {
"environment": [
""
],
"allow": [
""
],
"soft_deny": [
""
],
"hard_deny": [
""
],
"classify_all_shell": false,
"model": "",
"disable": false
},
"tools": {},
"tool": {
"allow": [
""
],
"pin": {},
"eager": [
""
]
},
"enterprise": {
"url": ""
},
"compaction": {
"auto": false,
"prune": false,
"reserved": 0
},
"experimental": {
"policies": [
{
"effect": null,
"action": null,
"resource": null
}
],
"hook": {
"file_edited": {},
"session_completed": []
},
"queued_message_wrap": {
"header": "",
"footer": ""
},
"chatMaxRetries": 0,
"disable_paste_summary": false,
"batch_tool": false,
"openTelemetry": false,
"primary_tools": [
""
],
"continue_loop_on_deny": false,
"brain": false,
"brainMinHours": 0,
"brainMinSessions": 0,
"brainModel": "",
"memory": false,
"mcp_timeout": 0,
"tool_timeout": 0,
"task_timeout": 0,
"nativeLlm": false,
"tui": {
"cacheEviction": false,
"messageVirtualization": false,
"explorationGrouping": false
},
"requests": {
"latestOnlyLspRefresh": false
},
"events": {
"schemaEncoding": false
}
},
"rag": {
"model": "",
"provider": ""
},
"image": {
"model": "",
"provider": ""
},
"browser": null,
"computer": {
"mode": "sandbox",
"width": 0,
"height": 0
},
"attachment": {
"image": {
"auto_resize": false,
"max_width": 0,
"max_height": 0,
"max_base64_bytes": 0
}
},
"speak": {
"provider": "",
"model": "",
"modelId": "",
"outputFormat": ""
},
"notifications": {
"todo": {
"enabled": false,
"macos": false,
"slack": {
"enabled": null,
"connector": null,
"channel": null
},
"discord": {
"enabled": null,
"webhook": null
}
},
"icon": {
"url": "",
"alt": ""
},
"notify": {
"enabled": false,
"macos": false,
"slack": {
"enabled": null,
"connector": null,
"channel": null
},
"discord": {
"enabled": null,
"webhook": null
},
"events": {
"sessionIdle": null,
"sessionError": null,
"permissionAsked": null,
"questionAsked": null
},
"idleMinMs": 0,
"rateLimit": {
"windowMs": null,
"maxPerWindow": null
},
"retry": {
"attempts": null,
"delay": null,
"factor": null,
"maxDelay": null,
"timeoutMs": null
},
"breaker": {
"failures": null,
"cooldownMs": null
},
"quietHours": {
"enabled": null,
"start": null,
"end": null,
"suppress": null
}
}
},
"mobile": {
"tophat": {
"enabled": false,
"cliPath": "",
"defaultPlatform": "ios",
"defaultDestination": "device",
"autoDetect": 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.mobile.github.oauth.clientId.set({
...
}) Try it
mobile.github.oauth.device.start | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ deviceCode: string userCode: string verificationUri: string verificationUriComplete?: string | null expiresAt: | number | "Infinity" | "-Infinity" | "NaN" interval: | number | "Infinity" | "-Infinity" | "NaN" }
{ name: "BadRequest" error: string }
Example response from schema
{
"deviceCode": "",
"userCode": "",
"verificationUri": "",
"verificationUriComplete": "",
"expiresAt": 0,
"interval": 0
} 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.mobile.github.oauth.device.start({
...
}) Try it
mobile.github.oauth.device.poll | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ deviceCode: string }
{ status: | "pending" | "approved" | "denied" | "expired" interval?: | | number | "Infinity" | "-Infinity" | "NaN" | null user?: | { login: string name?: string | null | null avatar_url?: string | null } | null }
{ name: "BadRequest" error: string }
Example response from schema
{
"status": "pending",
"interval": 0,
"user": {
"login": "",
"name": "",
"avatar_url": ""
}
} 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.mobile.github.oauth.device.poll({
...
}) Try it
Auth
mobile.github.auth.set | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ token: string }
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.github.auth.set({
...
}) Try it
mobile.github.auth.remove | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.github.auth.remove({
...
}) Try it
This changes or removes server state, against whatever base URL is set above.
Import
mobile.github.import | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ owner: string repo: string cloneUrl: string defaultBranch: string private?: boolean | null }
{ import: { owner: string repo: string fullName: string directory: string cloneUrl: string defaultBranch: string private: boolean importedAt: | number | "Infinity" | "-Infinity" | "NaN" updatedAt: | number | "Infinity" | "-Infinity" | "NaN" projectID?: string | null } project: { 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[] } }
{ name: "Unauthorized" error: string }
Example response from schema
{
"import": {
"owner": "",
"repo": "",
"fullName": "",
"directory": "",
"cloneUrl": "",
"defaultBranch": "",
"private": false,
"importedAt": 0,
"updatedAt": 0,
"projectID": ""
},
"project": {
"id": "",
"worktree": "",
"canonical": "",
"vcs": "git",
"name": "",
"icon": {
"url": "",
"override": "",
"color": ""
},
"commands": {
"start": ""
},
"time": {
"created": 0,
"updated": 0,
"initialized": 0
},
"sandboxes": [
""
]
}
} 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.mobile.github.import({
...
}) Try it
Session
mobile.github.session.create | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ owner: string repo: string cloneUrl: string htmlUrl?: string | null defaultBranch: string baseBranch: string private?: boolean | null title?: string | null executionTarget?: MobileExecutionTarget | null }
{ session: Session worktree: Worktree_1 project: Project_1 workspace?: Workspace | null }
{ name: "Unauthorized" error: string }
Example response from schema
{
"session": {
"id": "",
"slug": "",
"projectID": "",
"directory": "",
"parentID": "",
"workspaceID": "",
"summary": {
"additions": 0,
"deletions": 0,
"files": 0,
"diffs": []
},
"share": {
"url": ""
},
"github": {
"owner": "",
"repo": "",
"fullName": "",
"baseBranch": "",
"headBranch": "",
"repositoryDirectory": "",
"cloneUrl": "",
"htmlUrl": "",
"private": false,
"worktree": {
"name": null,
"branch": null,
"directory": null,
"repositoryDirectory": null,
"cleanedAt": null
},
"pullRequest": {
"number": null,
"url": null,
"title": null
},
"lastCommitSha": "",
"publishedAt": 0,
"publishError": ""
},
"worktree": {
"name": "",
"branch": "",
"directory": "",
"repositoryDirectory": "",
"cleanedAt": 0
},
"mobile": {
"platforms": [],
"primaryPlatform": "",
"method": "",
"detectedAt": 0,
"buildStatus": "unknown",
"lastBuildAt": 0,
"artifacts": []
},
"title": "",
"activeCommand": "",
"version": "",
"time": {
"created": 0,
"updated": 0,
"compacting": 0,
"archived": 0
},
"permission": [
{
"permission": null,
"pattern": null,
"action": null
}
],
"skills": [
""
],
"disabledInstructions": [
""
],
"disabledTools": {},
"revert": {
"messageID": "",
"partID": "",
"snapshot": "",
"diff": ""
},
"lastModel": {
"providerID": "",
"modelID": ""
}
},
"worktree": {
"name": "",
"branch": "",
"directory": ""
},
"project": {
"id": "",
"worktree": "",
"canonical": "",
"vcs": "git",
"name": "",
"icon": {
"url": "",
"override": "",
"color": ""
},
"commands": {
"start": ""
},
"time": {
"created": 0,
"updated": 0,
"initialized": 0
},
"sandboxes": [
""
]
},
"workspace": {
"id": "",
"name": "",
"timeUsed": 0,
"branch": "",
"projectID": "",
"config": {
"directory": "",
"type": "worktree",
"name": "",
"strategy": "git",
"eventLimit": 0
}
}
} 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.mobile.github.session.create({
...
}) Try it
Status
mobile.git.status | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ branch: string staged: MobileGitChange[] unstaged: MobileGitChange[] untracked: string[] commitsAhead: | number | "Infinity" | "-Infinity" | "NaN" commitsBehind: | number | "Infinity" | "-Infinity" | "NaN" lastCommit?: | { sha: string message: string author: string timestamp: | number | "Infinity" | "-Infinity" | "NaN" } | null }
Example response from schema
{
"branch": "",
"staged": [
{
"status": "added",
"path": "",
"additions": 0,
"deletions": 0,
"oldPath": ""
}
],
"unstaged": [
{
"status": "added",
"path": "",
"additions": 0,
"deletions": 0,
"oldPath": ""
}
],
"untracked": [
""
],
"commitsAhead": 0,
"commitsBehind": 0,
"lastCommit": {
"sha": "",
"message": "",
"author": "",
"timestamp": 0
}
} 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.mobile.git.status({
...
}) Try it
Diff
mobile.git.diff | Name | In | Type | Required |
|---|---|---|---|
| file | query | string | null | optional |
| staged | query | "true" | "false" | null | optional |
| directory | query | string | optional |
| workspace | query | string | optional |
({ file: string oldPath?: string | null hunks: ({ header: { oldStart: | number | "Infinity" | "-Infinity" | "NaN" oldLines: | number | "Infinity" | "-Infinity" | "NaN" newStart: | number | "Infinity" | "-Infinity" | "NaN" newLines: | number | "Infinity" | "-Infinity" | "NaN" } lines: ({ type: "add" | "remove" | "context" text: string oldLineNumber?: | | number | "Infinity" | "-Infinity" | "NaN" | null newLineNumber?: | | number | "Infinity" | "-Infinity" | "NaN" | null })[] })[] isBinary: boolean additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" })[]
Example response from schema
[
{
"file": "",
"oldPath": "",
"hunks": [
{
"header": null,
"lines": null
}
],
"isBinary": false,
"additions": 0,
"deletions": 0
}
] 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.mobile.git.diff({
...
}) Try it
Commits
mobile.git.commits | Name | In | Type | Required |
|---|---|---|---|
| limit | query | string | null | optional |
| directory | query | string | optional |
| workspace | query | string | optional |
({ sha: string message: string author: { name: string email: string } timestamp: | number | "Infinity" | "-Infinity" | "NaN" filesCount: | number | "Infinity" | "-Infinity" | "NaN" additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" })[]
Example response from schema
[
{
"sha": "",
"message": "",
"author": {
"name": "",
"email": ""
},
"timestamp": 0,
"filesCount": 0,
"additions": 0,
"deletions": 0
}
] 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.mobile.git.commits({
...
}) Try it
Branches
mobile.git.branches | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
({ name: string isCurrent: boolean isProtected: boolean aheadBy: | number | "Infinity" | "-Infinity" | "NaN" behindBy: | number | "Infinity" | "-Infinity" | "NaN" })[]
Example response from schema
[
{
"name": "",
"isCurrent": false,
"isProtected": false,
"aheadBy": 0,
"behindBy": 0
}
] 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.mobile.git.branches({
...
}) Try it
Commit
mobile.git.commit | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ message: string files?: string[] | null amend?: boolean | null stagedOnly?: boolean | null }
{ sha: string message: string }
{ name: "BadRequest" error: string }
Example response from schema
{
"sha": "",
"message": ""
} 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.mobile.git.commit({
...
}) Try it
Checkout
mobile.git.checkout | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ branch: string create?: boolean | null }
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.git.checkout({
...
}) Try it
Stage
mobile.git.stage | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ files: string[] }
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.git.stage({
...
}) Try it
Unstage
mobile.git.unstage | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ files: string[] }
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.git.unstage({
...
}) Try it
Discard
mobile.git.discard | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ files: string[] }
{ success: true }
Example response from schema
{
"success": true
} 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.mobile.git.discard({
...
}) Try it
Push
mobile.git.push | Name | In | Type | Required |
|---|---|---|---|
| upstream | query | string | null | optional |
| directory | query | string | optional |
| workspace | query | string | optional |
{ success: true pushed: boolean }
Example response from schema
{
"success": true,
"pushed": 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.mobile.git.push({
...
}) Try it
Pull
mobile.git.pull | Name | In | Type | Required |
|---|---|---|---|
| directory | query | string | optional |
| workspace | query | string | optional |
{ success: true pulled: boolean conflicts?: string[] | null }
Example response from schema
{
"success": true,
"pulled": false,
"conflicts": [
""
]
} 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.mobile.git.pull({
...
}) Try it
Schemas
The 71 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.
{ enabled?: boolean | null ratio?: | | number | "Infinity" | "-Infinity" | "NaN" | null items?: AdsItemConfig_1[] | null }
{ id: string text: string url?: string | null enabled?: boolean | null }
{ [key: string]: unknown | null }
{ image?: | { auto_resize?: boolean | null max_width?: | | number | "Infinity" | "-Infinity" | "NaN" | null max_height?: | | number | "Infinity" | "-Infinity" | "NaN" | null max_base64_bytes?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null }
{ environment?: string[] | null allow?: string[] | null soft_deny?: string[] | null hard_deny?: string[] | null classify_all_shell?: boolean | null model?: string | null disable?: boolean | null }
{ mode?: "sandbox" | "host" | null width?: | | number | "Infinity" | "-Infinity" | "NaN" | null height?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ type: "discord" botToken?: string | null enabled?: boolean | null }
{ type: "figma" token?: string | null enabled?: boolean | null }
{ type: "gchat" botToken?: string | null enabled?: boolean | null }
{ type: "github" token?: string | null oauthClientId?: string | null clientId?: string | null enabled?: boolean | null }
{ type: "linear" botToken?: string | null enabled?: boolean | null }
{ type: "lovable" token?: string | null apiKey?: string | null enabled?: boolean | null }
{ type: "slack" botToken?: string | null teamId?: string | null enabled?: boolean | null }
{ type: "teams" botToken?: string | null enabled?: boolean | null }
{ file: string patch: string additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" status?: | "added" | "deleted" | "modified" | null before: string after: string }
{ model?: string | null provider?: string | null }
{ leader?: string | null app_exit?: string | null editor_open?: string | null theme_list?: string | null sidebar_toggle?: string | null scrollbar_toggle?: string | null username_toggle?: string | null status_view?: string | null sync_view?: string | null session_export?: string | null session_new?: string | null session_list?: string | null session_timeline?: string | null session_fork?: string | null session_rename?: string | null session_delete?: string | null session_pin_toggle?: string | null session_scope_toggle?: string | null session_tab_back?: string | null session_tab_forward?: string | null session_quick_switch_1?: string | null session_quick_switch_2?: string | null session_quick_switch_3?: string | null session_quick_switch_4?: string | null session_quick_switch_5?: string | null session_quick_switch_6?: string | null session_quick_switch_7?: string | null session_quick_switch_8?: string | null session_quick_switch_9?: string | null stash_delete?: string | null model_provider_list?: string | null model_favorite_toggle?: string | null session_share?: string | null session_unshare?: string | null session_interrupt?: string | null session_codebro_open?: string | null subtask_background?: string | null subtask_picker?: string | null session_compact?: string | null messages_page_up?: string | null messages_page_down?: string | null messages_line_up?: string | null messages_line_down?: string | null messages_half_page_up?: string | null messages_half_page_down?: string | null messages_first?: string | null messages_last?: string | null messages_next?: string | null messages_previous?: string | null messages_last_user?: string | null messages_copy?: string | null messages_undo?: string | null messages_redo?: string | null messages_toggle_conceal?: string | null tool_details?: string | null model_list?: string | null model_cycle_recent?: string | null model_cycle_recent_reverse?: string | null model_cycle_favorite?: string | null model_cycle_favorite_reverse?: string | null command_list?: string | null agent_list?: string | null agent_cycle?: string | null agent_cycle_reverse?: string | null permission_mode?: string | null variant_cycle?: string | null input_clear?: string | null input_paste?: string | null input_submit?: string | null input_newline?: string | null input_move_left?: string | null input_move_right?: string | null input_move_up?: string | null input_move_down?: string | null input_select_left?: string | null input_select_right?: string | null input_select_up?: string | null input_select_down?: string | null input_line_home?: string | null input_line_end?: string | null input_select_line_home?: string | null input_select_line_end?: string | null input_visual_line_home?: string | null input_visual_line_end?: string | null input_select_visual_line_home?: string | null input_select_visual_line_end?: string | null input_buffer_home?: string | null input_buffer_end?: string | null input_select_buffer_home?: string | null input_select_buffer_end?: string | null input_delete_line?: string | null input_delete_to_line_end?: string | null input_delete_to_line_start?: string | null input_backspace?: string | null input_delete?: string | null input_undo?: string | null input_redo?: string | null input_word_forward?: string | null input_word_backward?: string | null input_select_word_forward?: string | null input_select_word_backward?: string | null input_delete_word_forward?: string | null input_delete_word_backward?: string | null history_previous?: string | null history_next?: string | null session_child_cycle?: string | null session_child_cycle_reverse?: string | null session_parent?: string | null session_child_close?: string | null terminal_suspend?: string | null terminal_title_toggle?: string | null tips_toggle?: string | null voice_record?: string | null app_support?: string | null }
"auto" | "stretch"
| "DEBUG" | "INFO" | "WARN" | "ERROR"
{ type: "local" command: string[] environment?: | { [key: string]: string } | null enabled?: boolean | null timeout?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ clientId?: string | null clientSecret?: string | null scope?: string | null }
{ type: "remote" url: string enabled?: boolean | null headers?: | { [key: string]: string } | null oauth?: McpOAuthConfig_1 | false | null timeout?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ name: "BadRequest" error: string }
{ $schema?: string | null theme?: string | null locale?: | { language?: string | null region?: string | null locale?: string | null timezone?: string | null currency?: string | null autoDetect?: boolean | null replyLanguage?: boolean | string | null } | null keybinds?: KeybindsConfig_1 | null logLevel?: LogLevel_1 | null tui?: | { scroll_speed?: | | number | "Infinity" | "-Infinity" | "NaN" | null scroll_acceleration?: | { enabled: boolean } | null diff_style?: "auto" | "stacked" | null mouse?: boolean | null sound?: boolean | null bg_pulse?: boolean | null turn_tokens?: boolean | null } | null ads?: AdsConfig_1 | null server?: ServerConfig_1 | null remote?: RemoteConfig_1 | null teleport?: TeleportConfig_1 | null command?: | { [key: string]: { template?: string | null description?: string | null agent?: string | null model?: string | null subtask?: boolean | null aliases?: string[] | null } } | null reference?: | { [key: string]: ReferenceConfig_1 } | null watcher?: | { ignore?: string[] | null } | null plugin?: string[] | null snapshot?: boolean | null sync?: | { url?: string | null token?: string | null autostart?: boolean | null } | null analytics?: | { share?: boolean | null endpoint?: string | null } | null share?: "manual" | "auto" | "disabled" | null autoshare?: boolean | null autoupdate?: boolean | "notify" | null disabled_providers?: string[] | null enabled_providers?: string[] | null model?: string | null small_model?: string | null default_agent?: string | null username?: string | null mode?: | { [key: string]: AgentConfig_1 | null } | null agent?: | { [key: string]: AgentConfig_1 | null } | null provider?: | { [key: string]: ProviderConfig_1 } | null mcp?: | { [key: string]: | McpLocalConfig_1 | McpRemoteConfig_1 | { enabled: boolean } } | null connectors?: | { [key: string]: | | ConnectorFigma_1 | ConnectorSlack_1 | ConnectorGithub_1 | ConnectorLovable_1 | ConnectorDiscord_1 | ConnectorTeams_1 | ConnectorGChat_1 | ConnectorLinear_1 | { enabled: boolean } } | null formatter?: | | false | true | { [key: string]: { disabled?: boolean | null command?: string[] | null environment?: | { [key: string]: string } | null extensions?: string[] | null } } | null websearch?: | { provider?: "exa" | "parallel" | "mcp" | null apiKey?: string | null url?: string | null tool?: string | null } | null lsp?: | | false | { [key: string]: | { disabled: true } | { command: string[] extensions?: string[] | null disabled?: boolean | null env?: | { [key: string]: string } | null initialization?: { [key: string]: unknown } | null min_severity?: | | number | "Infinity" | "-Infinity" | "NaN" | null } } | null instructions?: string[] | null layout?: LayoutConfig_1 | null permission?: PermissionConfig | null permission_mode?: PermissionModeConfig_1 | null auto_mode?: AutoModeConfig_1 | null tools?: | { [key: string]: boolean } | null tool?: | { allow?: string[] | null pin?: | { [key: string]: string } | null eager?: string[] | null } | null enterprise?: | { url?: string | null } | null compaction?: | { auto?: boolean | null prune?: boolean | null reserved?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null experimental?: | { policies?: PolicyStatementConfig_1[] | null hook?: | { file_edited?: | { [key: string]: ({ command: string[] environment?: | { [key: string]: string } | null })[] } | null session_completed?: | ({ command: string[] environment?: | { [key: string]: string } | null })[] | null } | null queued_message_wrap?: | | { header: string footer: string } | "default" | boolean | null | null chatMaxRetries?: | | number | "Infinity" | "-Infinity" | "NaN" | null disable_paste_summary?: boolean | null batch_tool?: boolean | null openTelemetry?: boolean | null primary_tools?: string[] | null continue_loop_on_deny?: boolean | null brain?: boolean | null brainMinHours?: | | number | "Infinity" | "-Infinity" | "NaN" | null brainMinSessions?: | | number | "Infinity" | "-Infinity" | "NaN" | null brainModel?: string | null memory?: boolean | null mcp_timeout?: | | number | "Infinity" | "-Infinity" | "NaN" | null tool_timeout?: | | | number | "Infinity" | "-Infinity" | "NaN" | false | null task_timeout?: | | | number | "Infinity" | "-Infinity" | "NaN" | false | null nativeLlm?: boolean | null tui?: | { cacheEviction?: boolean | null messageVirtualization?: boolean | null explorationGrouping?: boolean | null } | null requests?: | { latestOnlyLspRefresh?: boolean | null } | null events?: | { schemaEncoding?: boolean | null } | null } | null rag?: RagConfig_1 | null image?: ImageConfig_1 | null browser?: unknown | null computer?: ComputerConfig_1 | null attachment?: AttachmentConfig_1 | null speak?: SpeakConfig_1 | null notifications?: | { todo?: | { enabled?: boolean | null macos?: boolean | null slack?: | { enabled?: boolean | null connector?: string | null channel?: string | null } | null discord?: | { enabled?: boolean | null webhook?: string | null } | null } | null icon?: | { url?: string | null alt?: string | null } | null notify?: | { enabled?: boolean | null macos?: boolean | null slack?: | { enabled?: boolean | null connector?: string | null channel?: string | null } | null discord?: | { enabled?: boolean | null webhook?: string | null } | null events?: | { sessionIdle?: boolean | null sessionError?: boolean | null permissionAsked?: boolean | null questionAsked?: boolean | null } | null idleMinMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null rateLimit?: | { windowMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null maxPerWindow?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null retry?: | { attempts?: | | number | "Infinity" | "-Infinity" | "NaN" | null delay?: | | number | "Infinity" | "-Infinity" | "NaN" | null factor?: | | number | "Infinity" | "-Infinity" | "NaN" | null maxDelay?: | | number | "Infinity" | "-Infinity" | "NaN" | null timeoutMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null breaker?: | { failures?: | | number | "Infinity" | "-Infinity" | "NaN" | null cooldownMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null quietHours?: | { enabled?: boolean | null start?: string | null end?: string | null suppress?: | ("macos" | "slack" | "discord")[] | null } | null } | null } | null mobile?: | { tophat?: | { enabled?: boolean | null cliPath?: string | null defaultPlatform?: "ios" | "android" | null defaultDestination?: | "device" | "simulator" | "emulator" | null autoDetect?: boolean | null } | null } | null }
"local" | "container"
{ name: string isCurrent: boolean isProtected: boolean aheadBy: | number | "Infinity" | "-Infinity" | "NaN" behindBy: | number | "Infinity" | "-Infinity" | "NaN" }
{ status: | "added" | "modified" | "deleted" | "renamed" path: string additions?: | | number | "Infinity" | "-Infinity" | "NaN" | null deletions?: | | number | "Infinity" | "-Infinity" | "NaN" | null oldPath?: string | null }
{ sha: string message: string author: { name: string email: string } timestamp: | number | "Infinity" | "-Infinity" | "NaN" filesCount: | number | "Infinity" | "-Infinity" | "NaN" additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" }
{ file: string oldPath?: string | null hunks: ({ header: { oldStart: | number | "Infinity" | "-Infinity" | "NaN" oldLines: | number | "Infinity" | "-Infinity" | "NaN" newStart: | number | "Infinity" | "-Infinity" | "NaN" newLines: | number | "Infinity" | "-Infinity" | "NaN" } lines: ({ type: "add" | "remove" | "context" text: string oldLineNumber?: | | number | "Infinity" | "-Infinity" | "NaN" | null newLineNumber?: | | number | "Infinity" | "-Infinity" | "NaN" | null })[] })[] isBinary: boolean additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" }
{ name: string protected?: boolean | null commit: { sha: string } }
{ status: | "pending" | "approved" | "denied" | "expired" interval?: | | number | "Infinity" | "-Infinity" | "NaN" | null user?: | { login: string name?: string | null | null avatar_url?: string | null } | null }
{ deviceCode: string userCode: string verificationUri: string verificationUriComplete?: string | null expiresAt: | number | "Infinity" | "-Infinity" | "NaN" interval: | number | "Infinity" | "-Infinity" | "NaN" }
{ owner: string repo: string fullName: string directory: string cloneUrl: string defaultBranch: string private: boolean importedAt: | number | "Infinity" | "-Infinity" | "NaN" updatedAt: | number | "Infinity" | "-Infinity" | "NaN" projectID?: string | null }
{ owner: string repo: string cloneUrl: string defaultBranch: string private?: boolean | null }
{ failedOnly?: boolean | null }
{ owner: string repo: string cloneUrl: string htmlUrl?: string | null defaultBranch: string baseBranch: string private?: boolean | null title?: string | null executionTarget?: MobileExecutionTarget | null }
{ session: Session worktree: Worktree_1 project: Project_1 workspace?: Workspace | null }
{ id: | number | "Infinity" | "-Infinity" | "NaN" name: string path: string state: string htmlUrl?: string | null }
{ ref: string inputs?: | { [key: string]: string } | null }
{ id: | number | "Infinity" | "-Infinity" | "NaN" name: string status: string conclusion?: string | null htmlUrl?: string | null startedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null completedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null durationMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null steps: MobileGithubWorkflowStep[] }
{ id: | number | "Infinity" | "-Infinity" | "NaN" name: string workflowID?: | | number | "Infinity" | "-Infinity" | "NaN" | null runNumber: | number | "Infinity" | "-Infinity" | "NaN" attempt?: | | number | "Infinity" | "-Infinity" | "NaN" | null status: string conclusion?: string | null event: string branch: string sha: string title: string actor?: | { login: string avatarUrl?: string | null } | null htmlUrl: string createdAt: | number | "Infinity" | "-Infinity" | "NaN" updatedAt: | number | "Infinity" | "-Infinity" | "NaN" startedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null durationMs?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ runs: MobileGithubWorkflowRun[] totalCount: | number | "Infinity" | "-Infinity" | "NaN" configured: boolean }
{ name: string number: | number | "Infinity" | "-Infinity" | "NaN" status: string conclusion?: string | null startedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null completedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ branch: string staged: MobileGitChange[] unstaged: MobileGitChange[] untracked: string[] commitsAhead: | number | "Infinity" | "-Infinity" | "NaN" commitsBehind: | number | "Infinity" | "-Infinity" | "NaN" lastCommit?: | { sha: string message: string author: string timestamp: | number | "Infinity" | "-Infinity" | "NaN" } | null }
{ success: true }
"allow" | "deny" | "ask"
"ask" | "allow" | "deny"
{ [key: string]: PermissionRuleConfig | null }
"default" | "auto"
{ [key: string]: PermissionActionConfig }
{ permission: string pattern: string action: PermissionAction }
PermissionActionConfig | PermissionObjectConfig
PermissionRule[]
{ effect: "allow" | "deny" action: string resource: string }
{ 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[] }
{ 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[] }
{ api?: string | null name?: string | null env?: string[] | null id?: string | null npm?: string | null models?: | { [key: string]: { id?: string | null name?: string | null family?: string | null release_date?: string | null attachment?: boolean | null reasoning?: boolean | null temperature?: boolean | null tool_call?: boolean | null interleaved?: | | true | { field: "reasoning_content" | "reasoning_details" } | null cost?: | { input: | number | "Infinity" | "-Infinity" | "NaN" output: | number | "Infinity" | "-Infinity" | "NaN" cache_read?: | | number | "Infinity" | "-Infinity" | "NaN" | null cache_write?: | | number | "Infinity" | "-Infinity" | "NaN" | null context_over_200k?: | { input: | number | "Infinity" | "-Infinity" | "NaN" output: | number | "Infinity" | "-Infinity" | "NaN" cache_read?: | | number | "Infinity" | "-Infinity" | "NaN" | null cache_write?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | null } | null limit?: | { context: | number | "Infinity" | "-Infinity" | "NaN" input?: | | number | "Infinity" | "-Infinity" | "NaN" | null output: | number | "Infinity" | "-Infinity" | "NaN" } | null modalities?: | { input: ( | "text" | "audio" | "image" | "video" | "pdf")[] output: ( | "text" | "audio" | "image" | "video" | "pdf")[] } | null experimental?: boolean | null status?: "alpha" | "beta" | "deprecated" | null options?: { [key: string]: unknown } | null headers?: | { [key: string]: string } | null provider?: | { npm: string api: string } | null reasoning_options?: | ( | { type: "effort" values: (string | null)[] } | { type: "toggle" } | { type: "budget_tokens" min?: | | number | "Infinity" | "-Infinity" | "NaN" | null max?: | | number | "Infinity" | "-Infinity" | "NaN" | null })[] | null variants?: | { [key: string]: { [key: string]: unknown | null } } | null disabled?: boolean | null } } | null auth_provider?: string | null whitelist?: string[] | null blacklist?: string[] | null options?: | { [key: string]: unknown | null } | null }
{ model?: string | null provider?: string | null }
| { type: "git" repository: string branch?: string | null description?: string | null } | { type: "local" path: string description?: string | null }
{ enabled?: boolean | null enableTunnel?: boolean | null provider?: | | "localtunnel" | "cloudflared" | "ngrok" | "remotosh" | "none" | null askOnExistingSession?: boolean | null }
{ port?: | | number | "Infinity" | "-Infinity" | "NaN" | null hostname?: string | null mdns?: boolean | null cors?: string[] | null }
{ id: string slug: string projectID: string directory: string parentID?: string | null workspaceID?: string | null summary?: | { additions: | number | "Infinity" | "-Infinity" | "NaN" deletions: | number | "Infinity" | "-Infinity" | "NaN" files: | number | "Infinity" | "-Infinity" | "NaN" diffs?: FileDiff[] | null } | null share?: | { url: string } | null github?: SessionGithub | null worktree?: SessionWorktree_1 | null mobile?: SessionMobile | null title: string activeCommand?: string | null version: string time: { created: | number | "Infinity" | "-Infinity" | "NaN" updated: | number | "Infinity" | "-Infinity" | "NaN" compacting?: | | number | "Infinity" | "-Infinity" | "NaN" | null archived?: | | number | "Infinity" | "-Infinity" | "NaN" | null } permission?: PermissionRuleset | null skills?: string[] | null disabledInstructions?: string[] | null disabledTools?: | { [key: string]: boolean } | null revert?: | { messageID: string partID?: string | null snapshot?: string | null diff?: string | null } | null lastModel?: | { providerID: string modelID: string } | null }
{ owner: string repo: string fullName: string baseBranch: string headBranch: string repositoryDirectory?: string | null cloneUrl?: string | null htmlUrl?: string | null private?: boolean | null worktree: SessionWorktree pullRequest?: | { number: | number | "Infinity" | "-Infinity" | "NaN" url: string title: string } | null lastCommitSha?: string | null publishedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null publishError?: string | null }
{ platforms: ( | "ios" | "android" | "expo" | "flutter" | "react-native")[] primaryPlatform: string method: string detectedAt: | number | "Infinity" | "-Infinity" | "NaN" buildStatus?: | | "unknown" | "building" | "succeeded" | "failed" | null lastBuildAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null artifacts?: | ({ platform: string path: string size?: | | number | "Infinity" | "-Infinity" | "NaN" | null createdAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null })[] | null }
{ name: string branch: string directory: string repositoryDirectory?: string | null cleanedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ name: string branch: string directory: string repositoryDirectory?: string | null cleanedAt?: | | number | "Infinity" | "-Infinity" | "NaN" | null }
{ provider?: string | null model?: string | null modelId?: string | null outputFormat?: string | null }
{ url?: string | null token?: string | null }
{ id: string name: string timeUsed: | number | "Infinity" | "-Infinity" | "NaN" branch: string | null projectID: string config: | { directory: string type: "worktree" name?: string | null strategy?: "git" | "cow" | null eventLimit?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | { directory: string type: "container" runtime: "docker" | "podman" image: string containerName: string port: | number | "Infinity" | "-Infinity" | "NaN" serverUrl: string eventLimit?: | | number | "Infinity" | "-Infinity" | "NaN" | null } | { directory: string type: "branch" branch?: string | null eventLimit?: | | number | "Infinity" | "-Infinity" | "NaN" | null } }
{ name: string branch?: string | null directory: string }