-
Notifications
You must be signed in to change notification settings - Fork 7
Add CLI generator overview page (pre-release) #5292
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
fern-api
wants to merge
6
commits into
main
Choose a base branch
from
fern/cli-generator-page
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+56
−1
Open
Changes from 3 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
15c95c7
Add CLI generator overview page (pre-release)
fern-api[bot] f6bf504
Condense CLI generator page and add development callout
fern-api[bot] 6a672c4
Reframe CLI generator page based on blog post — agents + humans
fern-api[bot] a48af3c
condense and clarify
devalog 3fa256c
change to beta/early access
devalog 31cb0da
new product
devalog File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| --- | ||
| title: CLI generator | ||
| description: Generate a production CLI from your API definition — for AI agents and human developers alike. | ||
| --- | ||
|
|
||
| <Note title="In Development"> | ||
| The CLI generator is in active development. [Contact us](https://buildwithfern.com/contact) to learn more or request early access. | ||
| </Note> | ||
|
|
||
| Fern's CLI generator produces a fully functional command-line tool from the same API spec you already use for SDKs. It ships as a single binary with no runtime dependencies — built for both AI agents that need deterministic, introspectable interfaces and human developers who want to script, debug, and explore. | ||
|
|
||
| ## Why a CLI and why now | ||
|
|
||
| CLIs are how AI agents reach APIs in production. Agents invoke the command line because it gives them deterministic output, schemas they can introspect at runtime, and no interpreter or dependency tree to install. | ||
|
|
||
| Human developers want CLIs too — for scripting, CI, debugging, and exploring an API before committing to an SDK integration. Both audiences are well-served by a single binary. | ||
|
|
||
| Most API companies don't ship one because building a good CLI is a multi-quarter project: commands, auth, pagination, retries, output formatting, cross-platform builds, shell completions, and keeping it all in sync as the API evolves. The CLI generator handles all of that automatically. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 [vale] reported by reviewdog 🐶 |
||
|
|
||
| ## How it works | ||
|
|
||
| The CLI generator plugs into the same Fern workflow as your SDK generators. On every spec change, Fern regenerates the CLI source and opens a PR against your repo. You merge, tag a release, and your build pipeline ships binaries to npm, Homebrew, and GitHub Releases. | ||
|
|
||
| The output is a single statically linked Rust binary. Users drop it onto their PATH and run it — no language runtime, no dependencies. | ||
|
|
||
| ## Designed for agents | ||
|
|
||
| **Self-describing at runtime.** Agents can ask what a command accepts instead of carrying that context in their window. Schema introspection and structured JSON help output let agents discover capabilities on the fly. | ||
|
|
||
| **Hardened against agent failure modes.** The CLI validates inputs — checking for path traversal, URL encoding issues, and malformed resource names — before any byte hits the network. It's the last enforcement point between an agent's output and your production API. | ||
|
|
||
| **CLI and MCP server in one.** Run the binary with `serve` and the same engine exposes MCP over stdio. The CLI and MCP server are generated from the same spec, so the two interfaces never drift apart. | ||
|
|
||
| ## Built for humans too | ||
|
|
||
| The same binary produces colored help, tabular output, shell completions, and `--dry-run` previews when a person runs it interactively. It works offline, starts instantly, and each version maps to a specific API version for deterministic behavior. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[FernStyles.Current] Avoid time-relative terms like 'now' that become outdated