File path portability check across Windows, macOS and Linux
Checks up to 500 relative file paths for names that break or collide on Windows, macOS or Linux: Windows reserved device names (CON.txt, NUL.tar.gz, COM¹), reserved characters, trailing dots and spaces, component and total length limits, and distinct paths that become one file through case folding or NFC/NFD normalization. For an agent that writes files from an archive, a generated tree or a repo before it touches a disk. It does not read the filesystem, expand 8.3 short names or environment long-path settings, and it models macOS as a case- and normalization-insensitive volume (the APFS flags), not as the user's actual volume.
What you get
A file named CON.txt, a trailing-dot name or two paths that differ only by case silently overwrite or fail on the other OS. One call checks the whole tree.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/path-portability. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/path-portability \
-H 'content-type: application/json' \
-d '{"paths":["src/readme.md","src/README.md","docs/CON.txt","café.txt","café.txt","build/out."],"targets":["windows","macos","linux"]}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
paths | array<string; length 1..4096>; max 500 items | yes | Relative paths with "/" separators. At most 200000 characters in total. |
targets | array<string; one of "windows", "macos", "linux">; max 3 items | no | Default: windows, macos and linux. |
destinationRoot | string; length 0..1024 | no | Directory the paths will be created under; counted towards the total path length. |
Example request body
{
"paths": [
"src/readme.md",
"src/README.md",
"docs/CON.txt",
"café.txt",
"café.txt",
"build/out."
],
"targets": [
"windows",
"macos",
"linux"
]
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
status | string; one of "pass", "fail", "unknown", "unsupported" | no | pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass. |
checked | integer | no | |
targets | array<string> | no | |
findings | array<object> | no | Per-target problems, capped at 100; errors make the status fail, warnings do not. |
findingCount | integer | no | |
collisions | array<object> | no | |
witnesses | array<object> | no | |
versions | object | no | Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile). |
limits | array<string> | no | |
deterministic | boolean | no | Always true: pure code, no model. |
Pay and connect
Available through: x402 (USDC on Base), MCP. MCP clients reach it through the infra-preflight-kit package.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent