@eidren/fde-cli
v0.2.1
Published
Project tools for agents and people
Readme
Eidren FDE CLI
Node.js 22+. The installed CLI does not require Bun, this repository, or an agent SDK. Sign in through the account center in your browser, or use an API Key.
Install
The npm package is @eidren/fde-cli; its command is fde-cli.
npm install -g @eidren/fde-cli
fde-cli --helpConfigure
fde-cli profile add spark --url https://10.42.0.1:31080 -k
fde-cli auth login
fde-cli project use <project-id>auth login opens the account center and waits for your browser to return to the CLI.
Use --no-browser to open the printed URL yourself on the same computer.
The login wait is five minutes; --timeout <ms> changes it.
fde-cli auth login --api-key # enter a Key without echoing it
fde-cli auth status
fde-cli auth logoutAutomation can set EIDREN_API_KEY or pipe a Key into fde-cli auth login --stdin.
The environment Key takes priority over saved login. Don't put keys in command arguments.
Browser tokens refresh automatically and remain separate for each profile. Logging out
revokes the browser token and clears local credentials; API Key logout only removes the
saved Key. EIDREN_API_KEY remains active until you unset it.
Browser login requires the server's CLI client configuration. For SSH/headless use, choose
API Key login; --no-browser is not a device-code login.
TLS verification is on by default. Use NODE_EXTRA_CA_CERTS for a private CA, or
explicitly skip certificate checks for a self-signed, expired or mismatched certificate:
fde-cli profile add spark --url https://10.42.0.1:31080 -k
fde-cli material list --insecure # also accepts -k
EIDREN_INSECURE=1 fde-cli +statusprofile add ... -k saves the setting for that profile; later calls can omit -k.
TLS precedence is command flag, EIDREN_INSECURE, then profile. EIDREN_INSECURE accepts
1/true and 0/false. --insecure=false restores verification for one invocation.
EIDREN_URL overrides do not inherit the profile's TLS setting.
The option covers API calls, uploads, downloads
and account login/refresh requests; it does not change system or browser certificate settings. Use it only for a server
you trust, since its identity will not be verified.
Project precedence:
--project/--project-id(conflicting explicit body value is rejected).- An explicit
projectIdin--dataor--params. EIDREN_PROJECT_ID.- Nearest
.eidren.jsonfor the selected profile. - Profile default set by
fde-cli profile project <id>.
--no-project disables defaults. It doesn't bypass a required project.
Defaults only apply to APIs that declare projectId. Other APIs use the resource's scope.
All new workflow runs, quality suites and evaluations require a project.
Profiles have separate URLs, credentials and default projects. Select one with --profile or
EIDREN_PROFILE. EIDREN_URL overrides the URL and requires an environment Key; it
never forwards saved profile credentials to a different URL. EIDREN_CONFIG_DIR relocates
configuration; by default it is ~/.config/eidren.
The command rename preserves existing EIDREN_* variables and .eidren.json bindings.
Discover and call
fde-cli --help
fde-cli loop --help
fde-cli schema loop.material.list
fde-cli loop material list --limit 20
fde-cli loop material list --project <other-id> --page-all --page-limit 10
fde-cli ticket case result submit --data @result.json --dry-run
fde-cli loop source content --id <source-id> --output ./original.pptx
fde-cli dev repository download --product-id <product-id> --revision-id <revision-id> --output ./code.zipUnique service-less aliases work (material list). Ambiguous aliases list the explicit
commands. Nested objects/arrays accept JSON flags or --data @file; --data - reads
stdin. --params supplies path/query/header parameters. Typed flags override raw fields.
A business field colliding with a global flag uses a prefix, e.g. --body-data or
--query-format. See schema for exact flags. --project-id is the shared exception.
--page-all only applies to declared cursor reads. Results include complete and
nextCursor; reaching the page limit does not imply that all records were fetched.
JSON is default. --fields id,name, --format ndjson, and --format table reduce output.
--output writes a new file and refuses to overwrite an existing file. Downloads return
file metadata; streams can be saved with the same flag. --timeout 0 removes the HTTP
time limit. Ctrl-C or a client timeout does not cancel a server-side run.
Read operations can use POST. Permission labels come from service policies, not verbs.
Manage/delete/archive commands require --yes; there is no extra approval on ordinary
writes or explicit execution. No background model calls. No automatic write retries.
Server-required idempotency keys are generated if omitted; dry-run and failed write
output expose the chosen key so an uncertain operation can be investigated/retried.
For Ticket milestones and project-homepage management, read fde-cli skills read cases
or the Case guide. It covers independent milestone
and homepage flags, project/personal filters, pagination, manual ordering and revision
conflicts. Check fde-cli schema ticket.case.update and ticket.case.overview.move
for the installed catalog's fields. If missing, import matching server OpenAPI definitions;
rebuilding or upgrading the CLI is needed to replace its bundled guide.
Raw escape hatch (no automatic project injection):
fde-cli api POST /api/loop/api/project/list --data '{}'Work with an external agent
fde-cli +ingest --file ./meeting.md
fde-cli +context --case <case-id> --output ./context --originals
# Work with your own agent and tools.
fde-cli +publish --product <id> --file ./report.md --base <revision-id> --context ./context
fde-cli ticket case result submit --data @result.jsonFor the first revision use --base null. Publication replaces the primary artifact of
an existing document, presentation, diagram or media product; use revision commit for
multi-file or code manifests. A concurrent update returns a conflict. Publication writes
a local journal and supports +publish --resume <journal> after interruption. Resume
uses the same artifact/revision IDs and request; it does not switch to the newest base.
It records external context metadata without claiming a platform generation or acceptance.
+context returns the case/product input, pinned product/material versions and currently
applicable decision summaries. Export reads full decision statements and text artifacts;
--originals adds original binaries. Decisions include pagination completeness. Captured
product basis is retained separately from current decisions. Files are named by ID;
context.json contains the source-to-file mapping. Export goes into a new directory.
+status aggregates one bounded page of materials, products, cases and runs. +changes,
+trace and +impact query recorded product input relationships; they do not infer a
whole-project source-code dependency graph. +impact --source <id> or
+impact --decision-version <id> finds current product revisions with that recorded
dependency, with bounded pagination and an explicit completeness marker. +wait --run <id> follows an existing run.
Read the bundled skill with fde-cli skills read. To save the complete skill:
mkdir -p ./eidren/references
fde-cli skills read > ./eidren/SKILL.md
for name in materials products cases; do
fde-cli skills read "$name" > "./eidren/references/$name.md"
doneCopy that folder into your agent's skill directory. The CLI never edits agent configuration itself.
Regenerate
At the repository root:
bun run cli:generate
bun run cli:build
bun run cli:checkBun exports server routes and builds the single-file CLI. The OpenAPI-to-CLI generator and the installed CLI run on Node 22:
node apps/cli/scripts/generate.mjs --input ./openapi --output ./catalog.jsonThe exporter registers all nine services offline without invoking business functions.
Request schemas come from Zod. JSON response schemas come from actual handler argument
types at build time. Multipart/binary metadata is curated in api-docs; pagination is
inferred only when request and response fields agree. No response-validation gate is
added to production. any/unknown business fields remain open schemas rather than
invented structures. Regenerate after changing route contracts.
Use fde-cli catalog import ./openapi for new server definitions without rebuilding.
The release includes a generated catalog; normal commands do not download schemas.
See ../../docs/agent-cli.md for the generation contract.
