Official client release · v1.0.0
Standalone CLI Client Guide
Run ComputeFirst tools from your shell or scripts, reading inputs from local files. No key and no sign-up needed, like the rest of ComputeFirst.
Download cli.mjs (13,554 bytes) · SHA256 checksum · Release manifest
1. Overview and prerequisites
The CLI is one standalone ES module (cli.mjs) with no dependencies beyond Node.js built-in modules.
| Property | Value |
|---|---|
| Current version | 1.0.0 |
| Runtime | Node.js >= 22.18.0 |
| Dependencies | None: Node.js only |
| Download | https://computefirst.net/clients/cli/1.0.0/cli.mjs |
| Checksum file | https://computefirst.net/clients/cli/1.0.0/SHA256SUMS |
| SHA256 | ae25c0c178b81bbaa5f389683eab61369ec6d4b8a6747b0e5f36e2ef03422ce5 |
| File size | 13,554 bytes |
| Release manifest | https://computefirst.net/clients/cli/latest.json |
2. Download and verify
Download the client to a file and check its SHA256 before running it. The checksum comes from the same website: it detects changed or incomplete bytes, but it is not an independent signature.
Windows (PowerShell)
# Download the client and its checksum file
Invoke-WebRequest -Uri "https://computefirst.net/clients/cli/1.0.0/cli.mjs" -OutFile "cli.mjs"
Invoke-WebRequest -Uri "https://computefirst.net/clients/cli/1.0.0/SHA256SUMS" -OutFile "SHA256SUMS"
# Verify the SHA256 checksum
$expected = (Get-Content SHA256SUMS | Select-String "cli.mjs").Line.Split(" ")[0]
$actual = (Get-FileHash -Algorithm SHA256 cli.mjs).Hash.ToLowerInvariant()
if ($actual -ne $expected) { throw "Integrity check failed: checksum mismatch!" }
Write-Host "Integrity verified: $actual"
Linux and macOS (curl)
# Download the client and its checksum file
curl -fsSL -O https://computefirst.net/clients/cli/1.0.0/cli.mjs
curl -fsSL -O https://computefirst.net/clients/cli/1.0.0/SHA256SUMS
# Verify the SHA256 checksum
if command -v sha256sum >/dev/null 2>&1; then
sha256sum -c SHA256SUMS
else
shasum -a 256 -c SHA256SUMS
fi
3. Quick start and help
node cli.mjs --help
Find a tool for a task
Search accepts exact tool IDs, operation phrases or short English task descriptions. Exact matches come first; other results use English text ranking. A candidate may cover only part of your task, so read its versioned contract before sending data to it.
node cli.mjs search "Please convert CSV into JSON" --base-url https://computefirst.net
node cli.mjs describe csv-to-json 1.0.0 --base-url https://computefirst.net
The CLI returns at most one candidate. For up to five, use GET /v1/tools/search?q=YOUR_ENCODED_QUERY&limit=5. Queries are limited to 256 UTF-8 bytes and 40 distinct terms, and an empty result is a valid answer. Once a tool fits, reuse its ID and version directly.
4. No key needed (an optional key)
Search, contracts and execution all work without a key, within the free daily limits for your network. The CLI sends a key only when the COMPUTEFIRST_API_TOKEN environment variable is set. An optional key gives your own daily allowance, saved tools and history: get one with an email (the MCP tool sign_in or POST /v1/accounts/email, details) or from a passkey profile.
If you use a key, keep it out of typed commands and shell history. Automated agents should use their host's secret configuration.
# PowerShell: enter the key at a masked prompt
$env:COMPUTEFIRST_API_TOKEN = [System.Net.NetworkCredential]::new('', (Read-Host 'Agent key' -AsSecureString)).Password
# Bash: enter the key at a hidden prompt
read -r -s -p "Agent key: " COMPUTEFIRST_API_TOKEN
printf '\n'
export COMPUTEFIRST_API_TOKEN
# zsh: enter the key at a hidden prompt
read -r -s 'COMPUTEFIRST_API_TOKEN?Agent key: '
printf '\n'
export COMPUTEFIRST_API_TOKEN
5. Run tools with input files
The CLI defaults to http://127.0.0.1:8787 for local development. For the hosted service, always pass --base-url https://computefirst.net.
--input-file FIELD=PATH reads raw UTF-8 text into a named top-level input field, with no JSON escaping. --output FILE saves the complete result and prints a compact receipt.
Runnable example
Create these small sample files in a new folder. Their contents are sent to ComputeFirst when you run the command.
# PowerShell
Set-Content -Path "left.csv" -Value "id,name,role`n1,Ada,Lead`n2,Lin,Developer" -NoNewline
Set-Content -Path "right.csv" -Value "id,name,role`n1,Ada,Lead`n2,Lin,Senior Developer" -NoNewline
Set-Content -Path "parameters.json" -Value '{"keys":["id"]}'
node cli.mjs run csv-reconcile 1.0.0 --base-url https://computefirst.net `
--input parameters.json `
--input-file left=left.csv `
--input-file right=right.csv `
--output receipt.json
# Bash or zsh
printf 'id,name,role\n1,Ada,Lead\n2,Lin,Developer\n' > left.csv
printf 'id,name,role\n1,Ada,Lead\n2,Lin,Senior Developer\n' > right.csv
printf '{"keys":["id"]}\n' > parameters.json
node cli.mjs run csv-reconcile 1.0.0 --base-url https://computefirst.net \
--input parameters.json \
--input-file left=left.csv \
--input-file right=right.csv \
--output receipt.json
Output and receipt
The console prints a compact JSON receipt with output_file (the absolute path) and bytes (the saved size), and execution_ref from the service. With --savings, the receipt also shows the savings status. This example compares two rows on each side: one unchanged and one changed.
6. Limits and privacy
- Payload limits: each input file, the combined input and the JSON request are capped at 256 KiB (262,144 bytes), and each tool has its own limits. For
csv-reconcile, each CSV is limited to 100 KiB, 5,000 data rows and 128 columns. Read the selected version's contract for all bounds. - Text only:
--input-fileneeds valid UTF-8 and keeps line endings and any byte-order mark. It does not convert binary files or spreadsheets; export a workbook as CSV first. - Privacy: your files stay local, but their contents are sent in the request. Without a key, the content of calls is not stored; each call's metadata and your search text are kept for 180 days. Calls made with a passkey-profile key are content-recorded. The privacy policy has every detail. Never send passwords, private keys or sensitive personal data.
- Savings: ordinary executions are unmeasured;
--savingsshows that status without inventing a comparison.