xcode-mcli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +92 -0
  2. package/bin/xcode-mcli.ts +16 -0
  3. package/config/mcporter.json +11 -0
  4. package/package.json +57 -0
  5. package/skill/SKILL.md +70 -0
  6. package/skill/agents/openai.yaml +4 -0
  7. package/skill/references/api-reference.md +409 -0
  8. package/skill/references/apple-xcode-26.3.surface.json +1466 -0
  9. package/skill/references/compatibility.md +91 -0
  10. package/skill/references/setup.md +120 -0
  11. package/skill/references/troubleshooting.md +160 -0
  12. package/src/commands/daemon-restart.ts +22 -0
  13. package/src/commands/daemon-start.ts +22 -0
  14. package/src/commands/daemon-status.ts +29 -0
  15. package/src/commands/daemon-stop.ts +22 -0
  16. package/src/commands/index.ts +26 -0
  17. package/src/commands/project-build.ts +50 -0
  18. package/src/commands/setup.ts +26 -0
  19. package/src/commands/surface-snapshot.ts +45 -0
  20. package/src/commands/surface-verify.ts +46 -0
  21. package/src/commands/tool-command.ts +150 -0
  22. package/src/commands/windows-list.ts +43 -0
  23. package/src/commands/windows-use.ts +30 -0
  24. package/src/commands/xcode-tool-commands.ts +460 -0
  25. package/src/constants.ts +3 -0
  26. package/src/core/command-definition.ts +131 -0
  27. package/src/core/command-dispatch.ts +97 -0
  28. package/src/core/contracts.ts +25 -0
  29. package/src/core/errors.ts +52 -0
  30. package/src/core/package-version.ts +30 -0
  31. package/src/runtime/daemon-host-entry.ts +8 -0
  32. package/src/runtime/daemon-host.ts +455 -0
  33. package/src/runtime/daemon-state.ts +75 -0
  34. package/src/runtime/env.ts +37 -0
  35. package/src/runtime/mcp-jsonrpc.ts +114 -0
  36. package/src/runtime/output.ts +128 -0
  37. package/src/runtime/tab-resolver.ts +44 -0
  38. package/src/runtime/xcode-client.ts +192 -0
  39. package/src/runtime/xcode-surface.ts +166 -0
  40. package/src/runtime/xcode-tool-definition.ts +14 -0
  41. package/src/runtime/xcode-windows.ts +65 -0
  42. package/src/runtime/xcrun.ts +39 -0
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # xcode-mcli
2
+
3
+ `xcode-mcli` is a macOS CLI for Apple's Xcode MCP bridge exposed through `xcrun mcpbridge`.
4
+
5
+ It gives you a daemon-backed terminal interface to the current Xcode MCP tool surface without registering Xcode MCP inside Codex or another MCP client.
6
+
7
+ ## Requirements
8
+
9
+ - macOS
10
+ - Xcode with `Xcode Tools` enabled in `Settings > Intelligence`
11
+ - Node.js 25+
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ npm install
17
+ ```
18
+
19
+ For a global install:
20
+
21
+ ```bash
22
+ npm install -g xcode-mcli
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ ```bash
28
+ xcode-mcli setup
29
+ xcode-mcli windows list
30
+ xcode-mcli windows use --tab-identifier windowtab1
31
+ xcode-mcli files read --tab-identifier windowtab1 --file-path Path/To/File.swift
32
+ xcode-mcli project build --tab-identifier windowtab1
33
+ ```
34
+
35
+ The daemon auto-starts on the first daemon-backed command.
36
+
37
+ ## Output Modes
38
+
39
+ - Default output is concise text.
40
+ - `--json` prints a stable wrapper envelope.
41
+ - `--verbose` prints the exact Xcode MCP tool name to `stderr` for tool-backed commands.
42
+
43
+ Example:
44
+
45
+ ```bash
46
+ xcode-mcli --json --verbose windows list
47
+ ```
48
+
49
+ `--json`, `--verbose`, and `--tab-identifier <id>` can be passed either before the command path or after the specific command.
50
+
51
+ ## Command Groups
52
+
53
+ - `setup`
54
+ - `daemon`
55
+ - `windows`
56
+ - `project`
57
+ - `docs`
58
+ - `snippet`
59
+ - `build`
60
+ - `issues`
61
+ - `tests`
62
+ - `preview`
63
+ - `files`
64
+
65
+ ## Docs
66
+
67
+ - [docs/api-reference.md](docs/api-reference.md)
68
+ - [docs/compatibility.md](docs/compatibility.md)
69
+ - [docs/setup.md](docs/setup.md)
70
+ - [docs/troubleshooting.md](docs/troubleshooting.md)
71
+
72
+ ## Compatibility
73
+
74
+ Pin and verify the Xcode MCP surface with:
75
+
76
+ ```bash
77
+ npm run compat:xcode-mcp:verify
78
+ ```
79
+
80
+ The pinned Apple Xcode 26.3 baseline lives at:
81
+
82
+ ```text
83
+ skill/references/apple-xcode-26.3.surface.json
84
+ ```
85
+
86
+ ## Development
87
+
88
+ ```bash
89
+ npm test
90
+ make lint
91
+ make verify
92
+ ```
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { runXcodeMcliFromProcess } from "../src/core/command-dispatch.ts";
4
+ import { toTemplateError } from "../src/core/errors.ts";
5
+ import { printCommandError } from "../src/runtime/output.ts";
6
+
7
+ try {
8
+ await runXcodeMcliFromProcess();
9
+ } catch (error) {
10
+ const wrapped = toTemplateError(error);
11
+ printCommandError({
12
+ argv: process.argv.slice(2),
13
+ error: wrapped,
14
+ });
15
+ process.exit(wrapped.exitCode);
16
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/steipete/mcporter/main/mcporter.schema.json",
3
+ "mcpServers": {
4
+ "xcode": {
5
+ "description": "Apple Xcode MCP via xcrun mcpbridge",
6
+ "command": "xcrun",
7
+ "args": ["mcpbridge"],
8
+ "lifecycle": "keep-alive"
9
+ }
10
+ }
11
+ }
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "xcode-mcli",
3
+ "version": "0.1.0",
4
+ "description": "Stable macOS CLI wrapper for Apple's Xcode MCP bridge.",
5
+ "type": "module",
6
+ "private": false,
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/pyronaur/xcode-mcli.git"
10
+ },
11
+ "homepage": "https://github.com/pyronaur/xcode-mcli#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/pyronaur/xcode-mcli/issues"
14
+ },
15
+ "files": [
16
+ "bin",
17
+ "config",
18
+ "skill",
19
+ "src"
20
+ ],
21
+ "bin": {
22
+ "xcode-mcli": "./bin/xcode-mcli.ts"
23
+ },
24
+ "engines": {
25
+ "node": ">=25"
26
+ },
27
+ "scripts": {
28
+ "compat:xcode-mcp:pin-26.3": "node ./bin/xcode-mcli.ts surface snapshot --output-file skill/references/apple-xcode-26.3.surface.json",
29
+ "compat:xcode-mcp:snapshot": "node ./bin/xcode-mcli.ts surface snapshot",
30
+ "compat:xcode-mcp:verify": "node ./bin/xcode-mcli.ts surface verify --baseline-file skill/references/apple-xcode-26.3.surface.json",
31
+ "lint": "npm run lint:dprint:fix && npm run lint:oxlint:fix && npm run typecheck && npm run jscpd && npm run knip",
32
+ "lint-dry": "npm run lint:dprint && npm run lint:oxlint && npm run typecheck && npm run jscpd && npm run knip",
33
+ "lint:dprint": "dprint check",
34
+ "lint:oxlint": "oxlint --type-aware --tsconfig tsconfig.json .",
35
+ "lint:dprint:fix": "dprint fmt",
36
+ "lint:oxlint:fix": "oxlint --type-aware --tsconfig tsconfig.json --fix .",
37
+ "typecheck": "tsc -p tsconfig.json --noEmit",
38
+ "jscpd": "jscpd --config .jscpd.json",
39
+ "knip": "knip",
40
+ "test": "vitest run --maxWorkers 1 --fileParallelism false"
41
+ },
42
+ "dependencies": {
43
+ "commander": "^14.0.1",
44
+ "zod": "^4.1.8"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^24.5.2",
48
+ "dprint": "^0.52.0",
49
+ "jscpd": "^4.0.8",
50
+ "knip": "^5.85.0",
51
+ "oxlint": "^1.50.0",
52
+ "oxlint-plugin-inhuman": "^0.1.7",
53
+ "oxlint-tsgolint": "^0.15.0",
54
+ "typescript": "^5",
55
+ "vitest": "^3.2.4"
56
+ }
57
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: xcode
3
+ description: Drive Apple Xcode through the local `xcode-mcli` CLI instead of attaching the Xcode MCP server. Use when Codex needs Xcode MCP-equivalent capabilities from the terminal, including window discovery, tab selection, project builds, documentation search, test listing or execution, preview rendering, snippet execution, issue inspection, file reads or mutations, or compatibility verification against pinned Xcode MCP snapshots.
4
+ ---
5
+
6
+ # Xcode
7
+
8
+ ## Overview
9
+
10
+ Use `xcode-mcli` as the terminal wrapper for Apple's Xcode MCP bridge.
11
+
12
+ Prefer this skill when the task needs Xcode access but the Xcode MCP server should stay detached from the agent context.
13
+
14
+ ## Locate The CLI
15
+
16
+ Use one of these paths:
17
+
18
+ - Global install: `xcode-mcli`
19
+ - Repo checkout: `node ./bin/xcode-mcli.ts`
20
+
21
+ When working from the repo checkout, use the `xcode-mcli` repository root as the default project root unless the user says otherwise.
22
+
23
+ ## Start Here
24
+
25
+ 1. Run `xcode-mcli setup`.
26
+ 2. If the first live Xcode call triggers a macOS approval dialog, wait for the user to click `Allow`.
27
+ 3. Run `xcode-mcli windows list`.
28
+ 4. If needed, pin the active tab with `xcode-mcli windows use --tab-identifier <id>`.
29
+ 5. Run the tool-backed command you need.
30
+
31
+ ## Working Rules
32
+
33
+ - Prefer `--json` when the result will be parsed or inspected programmatically.
34
+ - Use `--verbose` when you need the exact Xcode MCP tool name printed to `stderr`.
35
+ - Pass `--tab-identifier <id>` explicitly when multiple Xcode windows are open.
36
+ - Treat `files rm`, `files update`, `files write`, and `files mv --overwrite-existing` as destructive because they require `--yes`.
37
+ - Assume test execution uses the active Xcode destination from the current Xcode window.
38
+ - If a live Xcode command appears stalled, account for the user possibly needing to approve Xcode access before treating it as a failure.
39
+
40
+ ## Read The Right Reference
41
+
42
+ - Read `references/setup.md` for install, first-run, daemon, and state-root behavior.
43
+ - Read `references/api-reference.md` for every CLI command, flag, JSON contract, and CLI-to-tool mapping.
44
+ - Read `references/troubleshooting.md` for approval prompts, tab resolution issues, daemon recovery, mutating command caveats, and test-destination behavior.
45
+ - Read `references/compatibility.md` when validating a new Xcode release or checking CLI parity against the pinned MCP baseline.
46
+ - Read `references/apple-xcode-26.3.surface.json` when you need the exact verbatim Xcode MCP tool descriptions, `inputSchema`, `outputSchema`, or top-level surface shape copied from live Xcode 26.3.
47
+
48
+ ## Searching The Verbatim Surface Snapshot
49
+
50
+ The snapshot file is large. Search it by tool name first.
51
+
52
+ Useful patterns:
53
+
54
+ - `BuildProject`
55
+ - `DocumentationSearch`
56
+ - `RunSomeTests`
57
+ - `XcodeRead`
58
+ - `XcodeWrite`
59
+ - `XcodeListWindows`
60
+
61
+ When exact parameter or output details matter, trust the JSON snapshot over memory.
62
+
63
+ ## Compatibility Workflow
64
+
65
+ When Xcode changes:
66
+
67
+ 1. Run `npm run compat:xcode-mcp:verify` from the `xcode-mcli` repository root.
68
+ 2. If it fails, read `references/compatibility.md`.
69
+ 3. Inspect the exact live-vs-baseline diff with `xcode-mcli surface verify --baseline-file skill/references/apple-xcode-26.3.surface.json --json`.
70
+ 4. Use `references/apple-xcode-26.3.surface.json` as the pinned baseline reference.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Xcode CLI"
3
+ short_description: "Use xcode-mcli for Xcode MCP parity"
4
+ default_prompt: "Use $xcode to drive Apple Xcode through the local xcode-mcli CLI instead of attaching the Xcode MCP server."
@@ -0,0 +1,409 @@
1
+ # API Reference
2
+
3
+ ## Overview
4
+
5
+ `xcode-mcli` exposes Xcode MCP through command groups that map to the current Xcode MCP tool surface.
6
+
7
+ Text mode is the default.
8
+
9
+ `--json` returns a stable wrapper envelope:
10
+
11
+ ```json
12
+ {
13
+ "ok": true,
14
+ "command": "windows list",
15
+ "tool": "XcodeListWindows",
16
+ "data": {
17
+ "windows": []
18
+ }
19
+ }
20
+ ```
21
+
22
+ Failure shape:
23
+
24
+ ```json
25
+ {
26
+ "ok": false,
27
+ "command": "files read",
28
+ "tool": "XcodeRead",
29
+ "error": {
30
+ "kind": "runtime",
31
+ "message": "...",
32
+ "details": {}
33
+ }
34
+ }
35
+ ```
36
+
37
+ For tool-backed commands, `--verbose` prints `Xcode MCP tool: <ToolName>` to `stderr`.
38
+
39
+ ## Shared Flags
40
+
41
+ - `--json`
42
+ Prints the stable JSON wrapper envelope.
43
+ - `--verbose`
44
+ Prints the exact Xcode MCP tool name to `stderr` for tool-backed commands.
45
+ - `--tab-identifier <id>`
46
+ Provides the active Xcode tab identifier for tab-aware commands.
47
+
48
+ Shared flags can be passed before the command path or after the specific command.
49
+
50
+ ## Setup
51
+
52
+ ### `xcode-mcli setup`
53
+
54
+ Prepares the local state root and verifies `xcrun mcpbridge`.
55
+
56
+ Flags:
57
+
58
+ - `--json`
59
+ - `--verbose`
60
+
61
+ ## Surface
62
+
63
+ ### `xcode-mcli surface snapshot [--output-file <path>]`
64
+
65
+ Discovers the live Xcode MCP surface through `initialize`, `tools/list`, `prompts/list`, and `resources/list`.
66
+
67
+ Flags:
68
+
69
+ - `--output-file <path>` optional
70
+ - `--json`
71
+ - `--verbose`
72
+
73
+ Without `--output-file`, text mode prints the canonical snapshot JSON.
74
+
75
+ With `--output-file`, the command writes the normalized snapshot to disk and prints the resolved path.
76
+
77
+ ### `xcode-mcli surface verify --baseline-file <path>`
78
+
79
+ Compares the live discovered Xcode MCP surface against a baseline snapshot file.
80
+
81
+ Flags:
82
+
83
+ - `--baseline-file <path>` required
84
+ - `--json`
85
+ - `--verbose`
86
+
87
+ Success data includes:
88
+
89
+ - `baselineFile`
90
+ - `compatible`
91
+ - `diff`
92
+
93
+ Failure JSON includes categorized diff details in `error.details`.
94
+
95
+ ## Daemon
96
+
97
+ ### `xcode-mcli daemon start`
98
+
99
+ Starts the daemon.
100
+
101
+ ### `xcode-mcli daemon status`
102
+
103
+ Shows whether the daemon is running and prints its PID when available.
104
+
105
+ ### `xcode-mcli daemon stop`
106
+
107
+ Stops the daemon.
108
+
109
+ ### `xcode-mcli daemon restart`
110
+
111
+ Restarts the daemon.
112
+
113
+ Daemon commands support:
114
+
115
+ - `--json`
116
+ - `--verbose`
117
+
118
+ ## Windows
119
+
120
+ ### `xcode-mcli windows list`
121
+
122
+ Calls `XcodeListWindows`.
123
+
124
+ Flags:
125
+
126
+ - `--json`
127
+ - `--verbose`
128
+
129
+ ### `xcode-mcli windows use --tab-identifier <id>`
130
+
131
+ Stores the active tab identifier in daemon state.
132
+
133
+ Flags:
134
+
135
+ - `--tab-identifier <id>` required
136
+ - `--json`
137
+ - `--verbose`
138
+
139
+ ## Project
140
+
141
+ ### `xcode-mcli project build`
142
+
143
+ Calls `BuildProject`.
144
+
145
+ Flags:
146
+
147
+ - `--tab-identifier <id>` optional
148
+ - `--json`
149
+ - `--verbose`
150
+
151
+ If `--tab-identifier` is omitted, the CLI resolves it from the cached active tab or a single open Xcode window.
152
+
153
+ ## Docs
154
+
155
+ ### `xcode-mcli docs search --query <text> [--framework <name> ...]`
156
+
157
+ Calls `DocumentationSearch`.
158
+
159
+ Flags:
160
+
161
+ - `--query <text>` required
162
+ - `--framework <name>` repeatable
163
+ - `--tab-identifier <id>` optional and ignored by the v1 resolver
164
+ - `--json`
165
+ - `--verbose`
166
+
167
+ ## Snippet
168
+
169
+ ### `xcode-mcli snippet execute --code-snippet <swift> --source-file-path <path> [--timeout <seconds>] [--tab-identifier <id>]`
170
+
171
+ Calls `ExecuteSnippet`.
172
+
173
+ Flags:
174
+
175
+ - `--code-snippet <swift>` required
176
+ - `--source-file-path <path>` required
177
+ - `--timeout <seconds>` optional
178
+ - `--tab-identifier <id>` optional
179
+ - `--json`
180
+ - `--verbose`
181
+
182
+ ## Build
183
+
184
+ ### `xcode-mcli build log [--glob <glob>] [--pattern <regex>] [--severity <level>] [--tab-identifier <id>]`
185
+
186
+ Calls `GetBuildLog`.
187
+
188
+ Flags:
189
+
190
+ - `--glob <glob>` optional
191
+ - `--pattern <regex>` optional
192
+ - `--severity <level>` optional
193
+ Allowed values: `error`, `warning`, `remark`
194
+ - `--tab-identifier <id>` optional
195
+ - `--json`
196
+ - `--verbose`
197
+
198
+ ## Issues
199
+
200
+ ### `xcode-mcli issues list [--glob <glob>] [--pattern <regex>] [--severity <level>] [--tab-identifier <id>]`
201
+
202
+ Calls `XcodeListNavigatorIssues`.
203
+
204
+ Flags:
205
+
206
+ - `--glob <glob>` optional
207
+ - `--pattern <regex>` optional
208
+ - `--severity <level>` optional
209
+ Allowed values: `error`, `warning`, `remark`
210
+ - `--tab-identifier <id>` optional
211
+ - `--json`
212
+ - `--verbose`
213
+
214
+ ### `xcode-mcli issues file --file-path <path> [--tab-identifier <id>]`
215
+
216
+ Calls `XcodeRefreshCodeIssuesInFile`.
217
+
218
+ Flags:
219
+
220
+ - `--file-path <path>` required
221
+ - `--tab-identifier <id>` optional
222
+ - `--json`
223
+ - `--verbose`
224
+
225
+ ## Tests
226
+
227
+ ### `xcode-mcli tests list [--tab-identifier <id>]`
228
+
229
+ Calls `GetTestList`.
230
+
231
+ Flags:
232
+
233
+ - `--tab-identifier <id>` optional
234
+ - `--json`
235
+ - `--verbose`
236
+
237
+ ### `xcode-mcli tests run-all [--tab-identifier <id>]`
238
+
239
+ Calls `RunAllTests`.
240
+
241
+ Flags:
242
+
243
+ - `--tab-identifier <id>` optional
244
+ - `--json`
245
+ - `--verbose`
246
+
247
+ ### `xcode-mcli tests run-some --test <key=value> --test <key=value> [--tab-identifier <id>]`
248
+
249
+ Calls `RunSomeTests`.
250
+
251
+ Each selected test needs both fields:
252
+
253
+ - `targetName=<target>`
254
+ - `testIdentifier=<identifier>`
255
+
256
+ Flags:
257
+
258
+ - `--test <key=value>` repeatable
259
+ - `--tab-identifier <id>` optional
260
+ - `--json`
261
+ - `--verbose`
262
+
263
+ ## Preview
264
+
265
+ ### `xcode-mcli preview render --source-file-path <path> [--preview-definition-index-in-file <n>] [--timeout <seconds>] [--tab-identifier <id>]`
266
+
267
+ Calls `RenderPreview`.
268
+
269
+ Flags:
270
+
271
+ - `--source-file-path <path>` required
272
+ - `--preview-definition-index-in-file <n>` optional
273
+ - `--timeout <seconds>` optional
274
+ - `--tab-identifier <id>` optional
275
+ - `--json`
276
+ - `--verbose`
277
+
278
+ ## Files
279
+
280
+ ### `xcode-mcli files glob [--path <path>] [--pattern <glob>] [--tab-identifier <id>]`
281
+
282
+ Calls `XcodeGlob`.
283
+
284
+ Flags:
285
+
286
+ - `--path <path>` optional
287
+ - `--pattern <glob>` optional
288
+ - `--tab-identifier <id>` optional
289
+ - `--json`
290
+ - `--verbose`
291
+
292
+ ### `xcode-mcli files grep --pattern <regex> [--glob <glob>] [--head-limit <n>] [--ignore-case] [--lines-after <n>] [--lines-before <n>] [--lines-context <n>] [--multiline] [--output-mode <mode>] [--path <path>] [--show-line-numbers] [--type <type>] [--tab-identifier <id>]`
293
+
294
+ Calls `XcodeGrep`.
295
+
296
+ Flags:
297
+
298
+ - `--pattern <regex>` required
299
+ - `--glob <glob>` optional
300
+ - `--head-limit <n>` optional
301
+ - `--ignore-case` optional
302
+ - `--lines-after <n>` optional
303
+ - `--lines-before <n>` optional
304
+ - `--lines-context <n>` optional
305
+ - `--multiline` optional
306
+ - `--output-mode <mode>` optional
307
+ Allowed values: `content`, `files_with_matches`, `count`
308
+ - `--path <path>` optional
309
+ - `--show-line-numbers` optional
310
+ - `--type <type>` optional
311
+ - `--tab-identifier <id>` optional
312
+ - `--json`
313
+ - `--verbose`
314
+
315
+ ### `xcode-mcli files ls --path <path> [--ignore <pattern> ...] [--recursive] [--tab-identifier <id>]`
316
+
317
+ Calls `XcodeLS`.
318
+
319
+ Flags:
320
+
321
+ - `--path <path>` required
322
+ - `--ignore <pattern>` repeatable
323
+ - `--recursive` optional
324
+ - `--tab-identifier <id>` optional
325
+ - `--json`
326
+ - `--verbose`
327
+
328
+ ### `xcode-mcli files mv --source-path <path> --destination-path <path> [--operation <operation>] [--overwrite-existing] [--yes] [--tab-identifier <id>]`
329
+
330
+ Calls `XcodeMV`.
331
+
332
+ Flags:
333
+
334
+ - `--source-path <path>` required
335
+ - `--destination-path <path>` required
336
+ - `--operation <operation>` optional
337
+ - `--overwrite-existing` optional
338
+ - `--yes` required when `--overwrite-existing` is set
339
+ - `--tab-identifier <id>` optional
340
+ - `--json`
341
+ - `--verbose`
342
+
343
+ ### `xcode-mcli files mkdir --directory-path <path> [--tab-identifier <id>]`
344
+
345
+ Calls `XcodeMakeDir`.
346
+
347
+ Flags:
348
+
349
+ - `--directory-path <path>` required
350
+ - `--tab-identifier <id>` optional
351
+ - `--json`
352
+ - `--verbose`
353
+
354
+ ### `xcode-mcli files rm --path <path> [--delete-files] [--recursive] --yes [--tab-identifier <id>]`
355
+
356
+ Calls `XcodeRM`.
357
+
358
+ Flags:
359
+
360
+ - `--path <path>` required
361
+ - `--delete-files` optional
362
+ - `--recursive` optional
363
+ - `--yes` required
364
+ - `--tab-identifier <id>` optional
365
+ - `--json`
366
+ - `--verbose`
367
+
368
+ ### `xcode-mcli files read --file-path <path> [--offset <line>] [--limit <n>] [--tab-identifier <id>]`
369
+
370
+ Calls `XcodeRead`.
371
+
372
+ Flags:
373
+
374
+ - `--file-path <path>` required
375
+ - `--offset <line>` optional
376
+ - `--limit <n>` optional
377
+ - `--tab-identifier <id>` optional
378
+ - `--json`
379
+ - `--verbose`
380
+
381
+ ### `xcode-mcli files update --file-path <path> --old-string <text> --new-string <text> [--replace-all] --yes [--tab-identifier <id>]`
382
+
383
+ Calls `XcodeUpdate`.
384
+
385
+ Flags:
386
+
387
+ - `--file-path <path>` required
388
+ - `--old-string <text>` required
389
+ - `--new-string <text>` required
390
+ - `--replace-all` optional
391
+ - `--yes` required
392
+ - `--tab-identifier <id>` optional
393
+ - `--json`
394
+ - `--verbose`
395
+
396
+ ### `xcode-mcli files write --file-path <path> (--content <text> | --content-file <path>) --yes [--tab-identifier <id>]`
397
+
398
+ Calls `XcodeWrite`.
399
+
400
+ Flags:
401
+
402
+ - `--file-path <path>` required
403
+ - `--content <text>` optional
404
+ - `--content-file <path>` optional
405
+ - one of `--content` or `--content-file` is required
406
+ - `--yes` required
407
+ - `--tab-identifier <id>` optional
408
+ - `--json`
409
+ - `--verbose`