diff --git a/docs/agents/index.md b/docs/agents/index.md index 86b0f3e..ea08392 100644 --- a/docs/agents/index.md +++ b/docs/agents/index.md @@ -34,7 +34,7 @@ Run these in order. On any non-zero exit, stop and report the failing command an ```bash ff-cli setup ``` - Interactive. An LLM API key is only required for `ff-cli chat` — skip it if the user just wants to play URLs or wallets. + Interactive, and quick — ff-cli needs no LLM API key. Setup just configures the signing key and the user's Art Computer. 4. **Add the user's Art Computer:** ```bash diff --git a/docs/changelog.md b/docs/changelog.md index 2156360..e842533 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,31 @@ # Change logs +## June 18 2026 + +### ff-cli 2.0.0 — Deterministic CLI, no API key + +**Chat is gone — your coding agent is the chat now** + +ff-cli no longer ships a built-in `chat` command or any LLM integration. Natural language belongs in a coding agent — Claude Code, Codex, Cursor — which drives ff-cli's commands directly through the `ff-control` skill. `ff-cli setup` no longer asks for an Anthropic / OpenAI / Grok / Gemini API key, and none is required to find, build, sign, play, or publish. + +This is a breaking change: the `chat` command and the `defaultModel` / `models` config block are removed. Existing `config.json` files keep working — the now-unused keys are simply ignored. + +**Interactive web art plays open-ended** + +`ff-cli play ` for an interactive or generative web page now renders the live page and leaves it running, instead of cutting and restarting it every few seconds. ff-cli previously misclassified unknown URLs as static images and stamped a fixed display duration; HTML and other web pages now play with no forced duration, so a conformant player parks on them indefinitely. + +**`play` points you to `find` for marketplace links** + +Hand `ff-cli play` a marketplace URL, on-chain coordinates, or a wallet address and it now points you to `ff-cli find --play`, which resolves the artwork through the indexer — rather than trying to cast the web page itself. `play` stays the exact-source command (playlist files, hosted playlists, direct media/web URLs); `find` stays the discovery command. + +**Install** + +```bash +npm install -g @feralfile/cli +``` + +--- + ## Jun 9 2026 ### Feral File Mobile App 1.2.0 — Discover tab, easier Art Computer setup, and richer work details diff --git a/docs/ff-cli/index.md b/docs/ff-cli/index.md index 73bc1fc..78afcbb 100644 --- a/docs/ff-cli/index.md +++ b/docs/ff-cli/index.md @@ -1,11 +1,11 @@ # ff-cli: Start Here -ff-cli is a command-line tool that builds DP-1 playlists from NFT and feed data. +ff-cli is a command-line tool that builds DP-1 playlists from NFT and feed data and plays them on an Art Computer. -Use it when you want the shortest path from a prompt to visible playback on an Art Computer. +Use it when you want the shortest path from a URL, wallet, or set of tokens to visible playback on an Art Computer. -- What this is: the primary command workflow for building and sending playlists. -- Why use it: fastest route from prompt to play on the Art Computer. +- What this is: the primary command workflow for building, signing, and playing playlists. +- Why use it: fastest route from a link to play on the Art Computer. No LLM API key required. - What to do next: run the first success flow below. ## Version note @@ -25,8 +25,8 @@ npm i -g @feralfile/cli # 2) Run guided setup ff-cli setup -# 3) Build one playlist -ff-cli chat "Get 3 works from reas.eth" -o playlist.json +# 3) Build one playlist from a URL (or wallet, or on-chain coords) +ff-cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak -o playlist.json # 4) Play on your Art Computer ff-cli play playlist.json @@ -34,16 +34,13 @@ ff-cli play playlist.json You are successful when the playlist builds and plays on your configured Art Computer. -`ff-cli chat` already performs playlist validation during the build flow, so a separate `validate` command is optional for this first run. - -**Already have a URL or address?** Skip the LLM setup and use `ff-cli find` instead: +`ff-cli find` validates the playlist as part of the build, so a separate `validate` command is optional for this first run. To build and play in one step, add `--play`: ```bash -ff-cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak -o playlist.json -ff-cli play playlist.json +ff-cli find https://objkt.com/tokens/hicetnunc/111068 --play ``` -See [Find from a URL or address](#find-from-a-url-or-address) below for the full input list. +**Want natural language?** ff-cli has no built-in chat. Drive it conversationally from a coding agent — Claude Code, Codex, or Cursor — using the `ff-control` skill; the agent translates your request into `ff-cli` commands. See [Agents](../agents/index.md). ## Install options @@ -63,7 +60,7 @@ curl -fsSL https://feralfile.com/ff-cli-install | bash ```bash npx @feralfile/cli setup -npx @feralfile/cli chat +npx @feralfile/cli find https://www.artblocks.io/collection/ringers-by-dmitri-cherniak --play ``` ### Manual configuration path (advanced) @@ -77,7 +74,6 @@ ff-cli config validate ## Commands by job -- Build playlist from natural language: `ff-cli chat [content]` - Build playlist from a URL, on-chain coords, or wallet address: `ff-cli find ` - Build playlist from deterministic params: `ff-cli build [params.json]` - Validate a playlist file or URL: `ff-cli validate ` @@ -92,14 +88,6 @@ ff-cli config validate ## Copy-paste examples -### Build from natural language - -```bash -ff-cli chat "Get 3 works from reas.eth" -o playlist.json -ff-cli chat "Get 3 works from einstein-rosen.tez" -o playlist.json -ff-cli chat "Get tokens 52932,52457 from Ethereum contract 0xb932a70A57673d89f4acfFBE830E8ed7f75Fb9e0" -o playlist.json -``` - ### Find from a URL or address `ff-cli find` takes a marketplace URL, raw on-chain coordinates, or a wallet address and builds a playlist directly. No LLM API key required. @@ -119,30 +107,44 @@ ff-cli find 0xf3860788d1597cecf938424baabe976fac87dc26 -o playlist.json ff-cli find tz1fQTvvcCy5PTt8HcUSQTu64dH9mJjjDudi -o playlist.json ``` -Supported sources: Objkt, fxhash (`/gentk/...`, `/iteration/{slug}`, `/project/{slug}`, `/generative/{slug}`), Art Blocks, OpenSea, SuperRare, Feral File, Neort, plus raw `ethereum:` / `tezos:` coords and `0x…` / `tz1.../tz2.../tz3...` addresses. +Supported sources: Objkt, fxhash (`/gentk/...`, `/iteration/{slug}`, `/project/{slug}`, `/generative/{slug}`), Art Blocks, OpenSea, SuperRare, Feral File, Neort, Verse, Raster, plus raw `ethereum:` / `tezos:` coords and `0x…` / `tz1.../tz2.../tz3...` addresses. Combine with `--play`, `--publish`, or `--output` to skip straight to delivery; see `ff-cli find --help` for the full flag set. -### Build from Feral File feed playlists +### Build from structured params -Legacy reference (archived `feral-file/dp1-feed`): use exhibition titles from: - - -The current open-source feed implementation is [`display-protocol/dp1-feed-v2`](https://github.com/display-protocol/dp1-feed-v2); see its [Quick Start](https://github.com/display-protocol/dp1-feed-v2#quick-start) to run your own. +`ff-cli build` takes a JSON parameters file (or stdin) and builds a playlist deterministically — no network guessing, no LLM. ```bash -ff-cli chat "Get 3 from Unsupervised" -o playlist.json -ff-cli chat "Get 3 from Unsupervised and 2 from reas.eth" -o playlist.json +ff-cli build ./params.json -o playlist.json +``` + +A minimal `params.json` for specific tokens from a contract: + +```json +{ + "requirements": [ + { + "type": "build_playlist", + "blockchain": "ethereum", + "contractAddress": "0xb932a70A57673d89f4acfFBE830E8ed7f75Fb9e0", + "tokenIds": ["52932", "52457"] + } + ] +} ``` -Feed playlist requests depend on configured feed servers and network reachability. +### Build from Feral File feed playlists -### Build without AI +Feed playlists are fetched by name via a `fetch_feed` requirement. Pipe params straight to `ff-cli build`: ```bash -ff-cli build ./params.json -o playlist.json +echo '{"requirements":[{"type":"fetch_feed","playlistName":"Unsupervised","quantity":3}]}' \ + | ff-cli build -o playlist.json ``` +Feed playlist requests depend on configured feed servers and network reachability. The current open-source feed implementation is [`display-protocol/dp1-feed-v2`](https://github.com/display-protocol/dp1-feed-v2); see its [Quick Start](https://github.com/display-protocol/dp1-feed-v2#quick-start) to run your own. + ### Play on your configured Art Computer ```bash @@ -158,8 +160,7 @@ ff-cli play "https://example.com/video.mp4" --skip-verify ## Common failure points -- `config validate` fails: run `ff-cli config show`, fix model settings, then re-run validation. An LLM API key is optional and only required for `ff-cli chat`. -- `chat` fails with provider/auth errors: confirm provider API key env vars or `config.json` values. +- `config validate` fails: run `ff-cli config show`, fix the reported values, then re-run validation. - `play` cannot find device: check device host/name in config and make sure the Art Computer is reachable on your network. - `play` version error: FF1 OS is below minimum supported version for that command; update FF1 OS and retry. - Signature shape across the ecosystem: ff-cli emits the spec-current `signatures[]`, but some other tools still emit the legacy top-level `signature`. If you integrate with multiple tools, verify both forms validate as expected. @@ -168,9 +169,7 @@ ff-cli play "https://example.com/video.mp4" --skip-verify - Full usage and workflow docs: - Configuration reference: -- Function-calling details: - More examples: -- OpenClaw skill prompt: +- Agent skill prompt (`ff-control`): - DP-1 protocol spec: - DP-1 CLI (**public beta**; validate, sign, verify, publish): — **dp1-cli** is the **actively maintained** successor to the legacy **dp1-validator** tag line in that **same repository** (legacy tags are frozen). -