Docs / Fydell CLI

Fydell CLI

Run simulations from your own editor and terminal and add repositories to your Engineering Passport, reviewing exactly what would be sent before anything leaves your computer.

Preview what would be sent, then submit a pinned snapshot from your machine.

Download the CLI

Get the single-file binary from the download page: fydell.cjs plus fydell.cjs.sha256. Needs Node 20+. Run node fydell.cjs doctor, then node fydell.cjs login. For timed simulations, use the desktop app or enter an assignment code in the top bar of the desktop app (FYD-XXXX-XXXX)

Requirements

  • Node 20 or newer. Check with node --version.
  • Windows. Your session is encrypted with Windows DPAPI for your user account. On macOS the CLI uses the login Keychain, which has not been tested yet. Other systems are refused at sign-in (exit code 7).
  • A Fydell account. Sign up free if you do not have one.

Quick start

The same steps print with fydell quickstart. Inside a task folder, simulation run and simulation submit find the task themselves. Inside a repository selected with fydell init, inspect, evidence and report find it themselves; elsewhere, name the folder.

Terminal
# check your setup (never prints tokens)
fydell doctor

# sign in: your browser opens; click Allow
fydell login

# see your invitations and tasks
fydell tasks

# accept, then set up and start (asks before the timer starts)
fydell task accept <invitationId>
fydell simulation init <attemptId>

# work in your editor; run your own tests from the task folder
fydell simulation run -- npm test

# write the handoff, then submit
fydell task show <attemptId> --handoff-template > handoff.md
fydell simulation submit --handoff handoff.md

# Engineering Passport: from inside your repository, select it, look, approve, then upload
fydell init
fydell inspect
fydell evidence review
fydell evidence submit
fydell report

Signing in

fydell login opens Fydell in your browser. Sign in if asked, then click Allow on the “Allow the Fydell command line” page. The terminal waits until you click Allow; it does not finish on its own. If you did not start a sign-in, close the page and nothing is sent. fydell auth login is the older name and does the same thing.

Commands

fydell help <topic> explains one area in the terminal. Topics: quickstart, login, init, inspect, evidence, report, import, connections, simulation, tasks, capture, transcripts, privacy, exit-codes.

Getting started

CommandWhat it does
fydell quickstartThe shortest path from sign-in to a submitted simulation or a Builder Report.
fydell help [topic]Help on one topic: quickstart, login, init, inspect, evidence, report, simulation, tasks, capture, transcripts, privacy, exit-codes.

Account

CommandWhat it does
fydell loginOpens Fydell in your browser; sign in if asked, then click Allow. The session is stored encrypted, never in plaintext.
fydell auth statusShows which account you are signed in as and where the session is stored. Never prints tokens.
fydell auth logoutDeletes the stored credential from this computer and revokes it on the server when the server can be reached.
fydell doctorChecks Node, the encrypted credential store, the state folder, the server and your sign-in. Output is redacted: tokens are never printed.
fydell data exportDownloads this account's data from GET /api/account/export and writes a JSON file. --json prints the path and section names, not the file contents.
fydell disconnectRevokes the GitHub App connection on Fydell (DELETE /api/integrations/github/connection/:id) after confirmation. Does not remove the CLI sign-in unless --local is passed.

Engineering Passport

CommandWhat it does
fydell project connectShows GitHub App connection and grant status from GET /api/integrations/github/status and opens the install URL from that response (--no-browser prints it).
fydell import preview <owner/name|gitlab:group/project>Previews a repository you shared from GitHub or GitLab (POST /api/passport/imports/preview): revision, files, languages, exclusions. Nothing is imported. Prints a preview ID for submit.
fydell import submit <owner/name|preview-id>Asks, then enqueues the previewed revision (POST /api/passport/imports). Follow the job with fydell jobs <id>.
fydell init [dir]Selects the repository you are in (or the folder you name) for Fydell and checks that it can be collected. Nothing is uploaded.
fydell inspect [dir]Local preview of what Fydell would collect: file counts, what is left out and why, and credentials kept back. Nothing is sent.
fydell evidence review [dir]Lists every file that would upload, every exclusion with its reason and possible sensitive information, then records that list as the evidence you approved. Nothing is sent.
fydell evidence submit [dir]Asks, then uploads exactly the evidence you approved. Refuses if the folder changed since the review. Analysis happens on Fydell's servers after upload.
fydell project init|inspect|sync [dir]The same steps under one name: init selects the folder, inspect reviews and records exactly what would be sent (evidence review), sync uploads what you reviewed (evidence submit). --dry-run on sync reviews without sending.
fydell analysis status [dir]Same as fydell status [dir].
fydell report [dir]Shows the Builder Report status for the last submitted evidence and opens it in your browser (--print prints the link only).
fydell status [dir]What was last inspected, reviewed and submitted for a repository, and how to resume an unfinished submit.
fydell jobs <id>State of one upload (receipt ID) or GitHub import (job ID) in your account: analysis version, report link, failure reason and what was collected. Exits 0 once it has finished, 1 while it is still running.
fydell open <id> | --report <projectId>Opens the Builder Report for a job, or for a project version, in your browser (--print prints the link only).

Simulations

CommandWhat it does
fydell simulation init <attemptId> [dir]Accepts the terms, finishes setup, writes the task files to a new folder, then starts the timer after you confirm.
fydell simulation start <attemptId> [dir]Same as fydell simulation init (the authored attempt setup/start client used by fydell task start).
fydell simulation status [attemptId]Attempt state, deadline, folder, public-test count and analysis status from GET /api/eng/attempts/:id/authored.
fydell simulation run [attemptId] -- <command>Runs only the command you pass after -- (for example npm test) in the task folder, on this computer, and records the result locally.
fydell simulation submit [attemptId] --handoff <file>Freezes the folder on this computer, shows what will be sent, then submits it once. Safe to retry.

Engineering tasks

CommandWhat it does
fydell tasksInvitations and tasks for your account.
fydell task accept <invitationId>Accepts an invitation. Nothing starts.
fydell task show <attemptId>Brief, deliverables, limits, AI policy, what is recorded and the deadline (--handoff-template prints a handoff file).
fydell task start <attemptId> [dir]Same as fydell simulation init.
fydell task test <attemptId>Runs the public tests on Fydell's test runner against the folder; results are labelled as Fydell sandbox results, or as not isolated when the runner is not a sandbox.
fydell task sync <attemptId>Backs the folder up to Fydell as the working copy the hiring team can see. Not a submission.
fydell task submit <attemptId> --handoff <file>Same as fydell simulation submit.
fydell task receipt <attemptId>The submission receipt: ID, scenario and version, server time, SHA-256, files, analysis status and link.

AI-session capture

CommandWhat it does
fydell session start [dir]Shows what is recorded, asks separately about AI-session content and project file references, then records AI tool hooks for that folder only (--ai-content yes|no, --file-paths yes|no). --attempt <id> links it to an engineering attempt you have started, so that attempt's employer sees its analysed events.
fydell session stop [dir]Stops recording at once, sends what is waiting and records the stop.
fydell session pause [dir]Pauses recording locally. Hooks write nothing; the outbox is kept. The server session stays active (there is no pause route).
fydell session resume [dir]Resumes a paused local session so hooks record again.
fydell session status [dir]What is being recorded, what waits to be sent and what was left out and why.
fydell session inspect [dir]Local outbox categories plus the owned session summary from GET /api/capture/sessions/:id. Event contents are not printed.
fydell session cards [dir]Session cards Fydell built from this session's uploaded events (what was built, how the AI was directed, verification, corrections, risks left open), each sentence citing events. No model runs; no scores.
fydell session syncSends waiting events now. Safe to repeat: Fydell stores each event once.
fydell session upload [dir]Sends this session's outbox now (same path as session sync, one session).
fydell integrations list [dir]Supported AI tools, tested versions, captured events and what is installed in this folder.
fydell integrations install|remove|doctor <tool> [dir]Adds, removes or checks Fydell's hooks for claude-code or cursor in that folder's own tool settings, keeping your other settings. Codex: unsupported until tested.
fydell hook <tool>Run by an installed hook, not by you. Records only inside a running session and never blocks the tool.

Older commands

CommandWhat it does
fydell auth loginSame as fydell login.
fydell collect <dir>Same as fydell inspect <dir>.
fydell report open [dir]Same as fydell report [dir].
fydell preview <dir>Deprecated; still works. Asks, then sends the files to Fydell, whose servers analyze them in memory and store nothing. To see what would be sent without sending anything, use fydell evidence review.
fydell upload <dir>Deprecated; still works. Asks, then uploads the folder as it is now, without a separate review. Use fydell evidence review, then fydell evidence submit.

Options

OptionWhat it does
--yes, -yAnswers yes to confirmations. Required when there is no terminal to ask in. What would be sent is still printed.
--jsonPrints one JSON object on stdout; progress goes to stderr.
--name <name>evidence submit (and the older preview and upload): project name. Defaults to the folder name.
--forceevidence submit (and the older upload): confirm with the server even if these exact files were already submitted. data export: replace the output file if it exists.
--printreport: print the report link only. Opens nothing and asks the server nothing.
--no-browserlogin and project connect: print the link instead of opening your browser.
--out <file>data export: where to write the JSON. Defaults to fydell-account-YYYY-MM-DD.json in the current folder.
--connection <id>disconnect: revoke one GitHub App connection. Without it, every live connection is revoked after confirmation.
--localdisconnect: also delete the stored CLI sign-in from this computer (same as fydell auth logout).
--revision <ref>import preview and submit: git revision (branch, tag or SHA).
--contribution <text>import submit: short contribution note sent with the job.
--with-tokenlogin: read a session JSON from stdin, for automation. Never accepted as an argument.
--dir <folder>simulation and task commands: the task folder, if you moved it.
--handoff <file>simulation submit and task submit: Markdown with one "## <question>" heading per handoff question and an optional "## AI use" section. Keep it outside the task folder.
--ai-use <text>simulation submit and task submit: your AI-use note.
--ai-content yes|nosession start: whether prompt text, response summaries and commands are recorded. Asked interactively if omitted.
--file-paths yes|nosession start: whether project file paths are recorded. Asked interactively if omitted.
--base-url <url>The Fydell server. Defaults to fydell.com; the FYDELL_BASE_URL environment variable also sets it.
-h, --help / --versionShows help or the version.

Simulations from your terminal

  • simulation init accepts the terms, finishes setup and writes the task files to a new folder (by default under Documents\Fydell; a folder that already has other files is refused). It asks before starting the timer, which runs on Fydell's server.
  • run executes only the command you pass after --, for example fydell simulation run -- npm test, in the task folder on your computer. Its exit code and the last 64 KB of output, redacted, are recorded on your computer only. Results from Fydell's sandbox come from fydell task test and are labeled as such.
  • submit shows what will be sent, asks, then freezes the exact bytes on your computer before sending. A retry after a crash or a dropped connection sends the same bytes with the same submission ID, and Fydell records one submission. The receipt shows the submission ID, scenario and version, server time, SHA-256, files, analysis status and a link.

Repositories on GitHub

The CLI imports only repositories you shared through the read-only Fydell GitHub app, public or private. It never accepts a typed URL or someone else's repository. Share repositories in Fydell under Connections, or run fydell project connect, which lists what is shared and opens the install page.

Terminal
# See which repositories are shared
fydell project connect

# Revision, files, languages and exclusions. Nothing is imported.
fydell import preview your-name/your-repo

# Asks, then queues that exact commit for analysis
fydell import submit pv-<id>

# Follow the analysis
fydell jobs <job-id>
  • Every source file is read. There is no file count limit. Dependencies, build output, lockfiles, binaries and files that look like credentials are skipped, files over 512 KB are left out, and each analysis lists every exclusion with its reason.
  • Imports need your confirmed GitHub account. Fydell refuses to analyze a repository shared from GitHub until you have signed in with GitHub on the Connections page. A finding counts as your work only where blame at the analyzed commit shows your verified account wrote the cited lines.
  • Reports start private. A new report waits for your approval in Fydell before any share link, profile or application can show it.

Projects on GitLab

Sign in with GitLab under Connections and choose the projects Fydell may read. Fydell asks GitLab only for read_user and read_api, which cannot change anything on GitLab, and stores the sign-in encrypted. Then name a project with its gitlab: prefix.

Terminal
# Same preview and submit as GitHub
fydell import preview gitlab:your-group/your-project
fydell import submit pv-<id>
  • Only projects you chose, and only ones you can still open. Fydell lists projects where your GitLab account is at least a Reporter and re-checks your access before and during every analysis.
  • Lines are credited by email. GitLab blame names authors by email address, so Fydell credits a line to you only when its commit uses an address GitLab has confirmed for your account, or your GitLab private commit address. Someone else committing under one of your addresses would also match; each report says so.
  • Disconnecting revokes access. Disconnecting GitLab in Fydell revokes the sign-in at GitLab and stops all sharing. Your existing reports are unchanged.

What is collected, and what is not

The CLI reads only the repository you select with fydell init or name on the command line; pass . for the current folder. It never scans your computer, and a home folder or the top of a drive is refused. init, inspect and evidence review never use the network.

  • Source files only. Dependency, build and editor folders stay on your computer, as do binaries, generated files and lockfiles.
  • Credentials stay behind. Environment and credential files, and any file containing text that looks like a credential, are left out and listed so you can see what was kept back.
  • You approve it before it is sent. inspect and evidence review send nothing. evidence review lists every file that would upload, every exclusion with its reason and possible sensitive information, and records that list as the evidence you approved. evidence submit uploads only that evidence, asks first, and refuses if the folder changed since the review. simulation submit also prints what would be sent and asks first. Nothing is analyzed on your computer: analysis happens on Fydell's servers after upload.
  • Nothing in your folder runs. Collecting never executes package scripts, builds or git: commit and branch details are read from the files in .git directly. The only command the CLI ever runs is the one you pass to simulation run after --.
  • Agent transcripts are separate. Transcripts and chat history from AI coding agents (.cursor, .claude, .specstory, .aider files and similar) are never collected. Sharing editor history is a separate opt-in in your Engineering Passport.
  • No surprises from links. Symbolic links and junctions are never followed, and nothing outside the folder is read.
  • Limits. Up to 300 files and 5 MB packed for folders you upload; task folders follow the task's own limits. Repositories imported through the GitHub app have no file count limit.

Interrupted uploads

If fydell evidence submit stops partway (network, Ctrl+C, a server error), run it again. While the folder still matches your review it resumes with the same files instead of starting over. Identical files are never stored twice. fydell status shows whether a submit is waiting to be resumed. An interrupted simulation submit works the same way.

Where it keeps things

  • Selected repositories, collection and review records, frozen submissions, run logs and the encrypted session live in %LOCALAPPDATA%\Fydell\cli, never inside your project. Set FYDELL_CLI_HOME to use another folder.
  • Tokens are never written in plaintext, never put in a config file or log, and never printed. The session is encrypted with Windows DPAPI for your user account and passed to the encryption step over stdin, never on a command line.
  • fydell doctor checks the state folder for plaintext tokens and redacts its own output. fydell auth logout deletes the stored credential and revokes the session on the server.

Exit codes

Scripts can rely on these. With --json, failures also print { "ok": false, "error": { "code", "message", "exitCode" } }.

CodeMeaning
0Success. jobs: the job has finished, whether it succeeded, failed or was cancelled (read the state to tell which). open: the report was opened, or printed with --print.
1Error, including a failed doctor check. jobs: the job is still queued, running or waiting to retry, so a script can repeat jobs until it exits 0; also any other failure, including network and server errors, which jobs and open report as 1 rather than 5 or 6. open: the job has no Builder Report yet.
2Usage: an unknown command or option, a missing value or folder, a confirmation that needs --yes because there is no terminal to ask in, evidence submit with nothing reviewed, or a folder that changed since evidence review (review again). jobs and open: the ID is missing or is not a job or project ID.
3Not signed in, or the server refused the sign-in. Also for jobs and open.
4Folder refused: missing or a link, a home folder or the top of a drive, too many entries, no source files, over the size limit, or a task folder that cannot be sent as it is. jobs and open: no such job or project in your account.
5The server rejected the request. Not used by jobs or open.
6Network error, the server is unavailable, or try again later. For an interrupted evidence submit or simulation submit, run the same command again to resume. Not used by jobs or open.
7Unsupported platform: no secure session storage.
8task test: the public tests did not all pass or did not finish in time. simulation run: the command you ran exited non-zero.
9task sync: the copy saved on Fydell changed separately from your folder. Nothing was overwritten.
130Cancelled with Ctrl+C, or a confirmation was declined.

After uploading

Each submit is a new version of the project in your Engineering Passport; earlier versions stay. fydell report shows the Builder Report's status and opens it, and you choose which projects and versions anyone sees when you share or apply. Read Trust and security for who can read what.