Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/check-llms-txt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Check llms.txt is current

# llms.txt is generated from the docs.json nav by scripts/generate-llms-txt.sh
# and committed, because Mintlify serves it from the repo rather than building
# it. Fail PRs where the committed file no longer matches what the generator
# produces — otherwise adding a page silently leaves it out of the index.
on:
Comment thread
billlevine marked this conversation as resolved.
pull_request:
paths:
# '**.mdx', not '**/*.mdx' — '**' matches any character including '/',
# so the '/' in '**/*.mdx' is literal and the root-level nav pages
# (index.mdx, flox-5-minutes.mdx) would not match. Both feed llms.txt.
- '**.mdx'
- 'docs.json'
- 'llms.txt'
- 'llms.txt.header'
- 'scripts/generate-llms-txt.sh'
workflow_dispatch:

jobs:
check-llms-txt:
runs-on: ubuntu-latest
steps:
- name: Checkout docs
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3

- name: Regenerate llms.txt
run: ./scripts/generate-llms-txt.sh

# Stage before diffing, and diff the index. A PR that DELETES llms.txt
# would otherwise pass: the step above recreates the file as untracked,
# and `git diff` cannot see untracked files, so the drift comes back
# empty and the one outcome this workflow exists to prevent — handing
# /docs/llms.txt back to Mintlify's generated version — merges green.
- name: Check for drift
run: |
git add llms.txt
if ! git diff --cached --exit-code --stat llms.txt; then
echo "::error::llms.txt is out of date. Run ./scripts/generate-llms-txt.sh and commit the result."
git diff --cached llms.txt
exit 1
fi
12 changes: 11 additions & 1 deletion .github/workflows/sync-man-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,29 @@ jobs:
run: |
flox activate -- ./scripts/sync-man-pages.sh "$GITHUB_WORKSPACE/flox-src" ./man

# llms.txt takes each man page's description from its `## NAME` line, so
# a reworded NAME upstream puts the committed file out of date. Regenerate
# here rather than let check-llms-txt.yml fail this PR: the job that
# causes the drift is the one that can fix it without a human.
# Deliberately outside `flox activate` — this environment ships node,
# vale and pandoc, and the generator needs python3 from the runner.
- name: Regenerate llms.txt

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

blocking: The next time a command is retired upstream, the daily man-page sync will stop producing PRs altogether instead of surfacing the retirement. sync-man-pages.sh:33 deletes man/*.mdx before regenerating, so a retired command leaves the hand-maintained docs.json pointing at nothing; this step then exits 1 at generate-llms-txt.sh:146-150 with no continue-on-error, before create-pull-request ever runs. This is not hypothetical — 14de796 did exactly that on 2026-07-29, and 28a1a9a ("catch dangling entries in CI") is a human cleaning it up a week later, which is the workflow this replaces.

Suggested: add continue-on-error: true to this step, so a nav that has gone dangling degrades to a red check on a PR a human can fix rather than to no PR at all. Note the remedy cannot be "let the bot fix the nav": add-paths is man + llms.txt and does not include docs.json. The neighbouring sync-man-pages.sh:94-96 already makes the same call the other way, invoking check-man-nav.sh with || echo warning.

(Peer panel: all four seats converged; the strongest finding on the panel.)

run: ./scripts/generate-llms-txt.sh

- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8
with:
token: "${{ secrets.MANAGED_FLOXBOT_GITHUB_ACCESS_TOKEN_REPO_SCOPE }}"
add-paths: |
man
llms.txt
commit-message: "chore(man): sync man pages from flox/flox"
committer: "FloxBot <bot@flox.dev>"
author: "FloxBot <bot@flox.dev>"
branch: "chore-sync-man-pages"
delete-branch: true
title: "chore(man): sync man pages from flox/flox"
body: "This PR was automatically created by the [Sync man pages workflow](https://github.com/flox/docs/actions/workflows/sync-man-pages.yml). `man/*.mdx` is generated from flox/flox `cli/flox/doc` — please spot-check the rendered pages before merging."
body: "This PR was automatically created by the [Sync man pages workflow](https://github.com/flox/docs/actions/workflows/sync-man-pages.yml). `man/*.mdx` is generated from flox/flox `cli/flox/doc` — please spot-check the rendered pages before merging. `llms.txt` is regenerated in the same job, so any change to it here follows from an added, removed, renamed or reworded man page — spot-check it alongside the pages themselves."
# Routing is via the label, matching the sibling
# update-flox-version.yml workflow.
labels: "team-developer-support"
3 changes: 3 additions & 0 deletions .mintignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@
# Draft content
drafts/
*.draft.mdx

# Build input for llms.txt, not a page (see scripts/generate-llms-txt.sh)
llms.txt.header
23 changes: 23 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,29 @@ Everything under `man/` is generated from the man page sources in the
`man/` or `docs.json`); pages deliberately left out of the sidebar go
in that script's `ALLOWLIST`.

## `llms.txt` is generated — do not edit directly

`llms.txt` is the index AI agents read. It is generated from the `docs.json`
navigation tree by `scripts/generate-llms-txt.sh` and committed, because
Mintlify serves it from the repo rather than building it.

- **Do not edit `llms.txt` directly** — the whole file, preamble included, is
overwritten by the next generator run.
- Edit the hand-written preamble in `llms.txt.header`; everything below the
first `##` heading comes from the nav and from each page's frontmatter
`title` and `description` (falling back to a man page's `## NAME` line).
- After changing `docs.json`, `llms.txt.header`, or any page's `title` or
`description`, regenerate and commit the result:

```bash
./scripts/generate-llms-txt.sh
```

The script requires `python3`.
- `.github/workflows/check-llms-txt.yml` fails PRs where the committed file
no longer matches what the generator produces. The daily man-page sync
regenerates it too, so bot PRs arrive correct.

## Content boundaries

This is a **public repository**. Keep that in mind when adding or editing content:
Expand Down
2 changes: 1 addition & 1 deletion concepts/compatibility.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Compatibility policy"
description: "Compatibility policy"
description: "Manifest schema versions, what counts as a backwards incompatible change, and how the CLI migrates environments for you"
---

Flox is a rapidly evolving tool, but you should still be able to rely on _some_ things being stable from release to release.
Expand Down
1 change: 1 addition & 0 deletions concepts/flox-vs-containers.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
title: "Flox vs. container workflows"
description: "Where Flox environments and container workflows differ, and how teams combine them"
---

Containers are everywhere these days.
Expand Down
1 change: 1 addition & 0 deletions concepts/organizations.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
title: "Understanding Organizations in FloxHub"
description: "Roles, access control, and shared ownership of environments across a team"
---

<Tip>
Expand Down
2 changes: 1 addition & 1 deletion customer/known-issues.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Known issues"
description: "Known issues"
description: "Known Flox limitations and their workarounds, including false-positive build dependencies"
---

## Build
Expand Down
61 changes: 27 additions & 34 deletions install-flox/ide-extensions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,41 @@
---

<Tabs>
<Tab title="Skills and MCP">
<Tab title="Agent skills">

[Flox Agentic](https://github.com/flox/flox-agentic) provides a skill library and MCP server
that give AI coding agents expert knowledge of Flox environments,
builds, services, containers, publishing, and CUDA.
[Flox Skills](https://github.com/flox/flox-skills) teaches AI coding
agents how to use Flox properly: building reproducible environments,
onboarding existing repositories, and wiring up services, builds,

Check warning on line 11 in install-flox/ide-extensions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (flox) - vale-spellcheck

install-flox/ide-extensions.mdx#L11

Did you really mean 'onboarding'?
containers, and package publishing.

**Skills included:** `flox-environments`, `flox-services`,
`flox-builds`, `flox-containers`, `flox-publish`,
`flox-sharing`, `flox-cuda`
**Skills included:**

- `flox` — create and manage environments. Installs packages and pins
toolchains, sets up services and databases, builds and containerizes
applications, publishes to FloxHub, and composes environments across
teams.
- `floxify` — onboard an existing repository. Detects your runtimes,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flox-skills ships three skills, not two. flox-plugin/skills/ also holds flox-debug, which covers catalog resolution: a package that won't resolve, flox install picking an old build after you published a new one, "constraints too tight" after adding one package. Worth listing here and in the llms.txt preamble.

services, and build tools, then writes `.flox/env/manifest.toml` so
`flox activate` becomes the only setup command a new developer needs.

## Claude Code

The Flox plugin for Claude Code installs both the skill library
and MCP server in one step:
```
claude plugin marketplace add flox/flox-skills
```

```
claude plugin marketplace add flox/flox-agentic
claude plugin install flox@flox-skills
```

## Codex

```bash
codex plugin marketplace add flox/flox-skills

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't match the install steps in flox-skills' own README, which says to run it from a clone:

codex plugin marketplace add .   # in the repo's top-level directory
codex plugin add flox@flox-skills

Codex's marketplace add takes a local path rather than an owner/repo shorthand, and there's no .codex-plugin/marketplace.json at the repo root for it to resolve against anyway. Can you run it before merge? If the owner/repo form does work, then flox-skills' README is the file that needs fixing.

```
claude plugin install flox@flox-agentic

```bash
codex plugin add flox@flox-skills
```

## Other agents (skills.sh)
Expand All @@ -34,7 +48,7 @@
ecosystem:

```
npx skills add flox/flox-agentic
npx skills add flox/flox-skills
```

<Note>
Expand All @@ -43,32 +57,11 @@
skills.sh is not maintained by Flox. It requires Node.js.
See [skills.sh](https://skills.sh) for supported agents and docs.
</Note>
## MCP server

For agents that support the
[Model Context Protocol](https://modelcontextprotocol.io) directly, install the MCP server:

```
flox install flox/flox-mcp-server
```

Then point your client at the `flox-mcp` command using stdio
transport. For Cursor, add to `~/.cursor/mcp.json`:

```
{
"mcpServers": {
"flox": {
"command": "flox-mcp"
}
}
}
```

## Learn more

Full documentation and source code:
[github.com/flox/flox-agentic](https://github.com/flox/flox-agentic)
[github.com/flox/flox-skills](https://github.com/flox/flox-skills)

</Tab>
<Tab title="VS Code">
Expand Down
Loading