RFC: AI conventions - #23
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new RFC proposing standard conventions for FilOne AI tooling setup and agent guidance across repositories, aiming to make machine bootstrap, agent context, and generated prose consistent across engineers and repos.
Changes:
- Introduces a standardized bootstrap flow via the
workspace-setupscript. - Proposes adopting the “FilOne Standard” as the default output style for generated prose.
- Proposes standardizing repository agent guidance with
AGENTS.mdplus a one-lineCLAUDE.mdimport.
Suppressed comments (1)
rfcs/2026-08-ai-conventions.md:27
- In this sentence, filenames like AGENTS.md/CLAUDE.md are not formatted as code, but elsewhere in the RFC they are (e.g.
AGENTS.md,CLAUDE.md). Using backticks consistently makes the filenames easier to scan.
You get a workspace directory that symlinks to your fil-forge and fil-one clone trees, clones the shared knowledge base, and writes the AGENTS.md, CLAUDE.md, and Claude Code settings that tie it together. It asks before installing the optional ai-dev process module; declining is fine. It will not disturb the checkouts you already have: clones stay wherever you keep them, and the workspace reaches them through symlinks. Mine still points at `~/projects/go/src/github.com` — nothing moved, and I work from a much simpler path than the full Go tree.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
|
||
| We lean hard on AI tools now, and each of us wired them up alone. I propose we standardize three things: | ||
|
|
||
| 1. **One bootstrap.** Everyone sets up their machine with the [workspace-setup](https://github.com/fil-one/workspace-setup) script. |
There was a problem hiding this comment.
I am hesitant to dictate a single workspace setup.
- AFAICT, the proposed setup does not support Claude Code sessions running in the cloud.
- The models and coding agents are constantly evolving at a very fast pace. A setup that worked two weeks ago will almost certainly become suboptimal in one or two months.
I prefer a workspace setup that
- is as lightweight as possible,
- is based on existing conventions and practices,
- and supports different working styles (Claude Code in terminal, Claude Code running in the cloud VMs orchestrated via Claude Desktop, Claude Code running via GitHub Actions, etc.)
My impression of workspace-setup/DESIGN.md is that it's building bespoke structures for things we can get for free if we adopt a monorepo.
There was a problem hiding this comment.
I agree with Miro on this one. This works well for terminal sessions, but not so much for the remote sessions.
| We lean hard on AI tools now, and each of us wired them up alone. I propose we standardize three things: | ||
|
|
||
| 1. **One bootstrap.** Everyone sets up their machine with the [workspace-setup](https://github.com/fil-one/workspace-setup) script. | ||
| 2. **One writing standard.** Generated prose follows the FilOne Standard, which the workspace makes Claude Code's default output style. |
There was a problem hiding this comment.
On one hand, I agree we need a higher writing standard than Claude's current default output style.
On the other hand, I am not sure if it's a good idea to force everyone to write in the same style - isn't that removing our personalities from our writing?
The more I reflect on my experience with LLM-produced prose, the more I am leaning towards the opinion that we should write more prose ourselves:
- Writing is an act of thinking; it helps the writer to clarify their thought.
- Even with custom instructions in place, LLMs tend to generate text that's too verbose and requires more effort to read. Producing such texts is IMO disrespectful to readers.
I don't yet have a fully formed opinion on this. What I think is a good start:
- Agree that we all configure our LLMs to use the FilOne Standard.
- Leave everyone the freedom to personalise those instructions as long as they preserve the spirit of the FilOne Standard.
There was a problem hiding this comment.
I would say this:
- Yes, writing is thinking. It's not the only way to clarify thinking but I lean on it a lot as well.
- Nothing in adopting a writing style changes that, we already have a standard unless everyone is already changing the default claude output style. My impression is that several people are not doing this.
- There is a lot of writing that just doesn't need each that level of intention, people are already using claude code to generate it, and for all of that I want the version used to be better than Claude's default which is abysmal.
Broadly I don't want to prevent people from customizing, but I do want folks to use SOMETHING and for every dev who cares about writing prose enough to customize their writing output style there is a dev who's always preferred coding to writing in the first place and thinks Claude is now here to rescue them from prose entirely. For that dev, I want them to use this. (there's an extreme here where I wouldn't want such a dev on our team, but I've certainly witnessed sizable variation among the folks here)
|
|
||
| ## Generated writing sounds like us | ||
|
|
||
| [knowledge-base/writing-style.md](https://github.com/fil-one/knowledge-base/blob/main/writing-style.md) is the FilOne Standard: the writing rules for anything reader-facing, because reading overly-AI-flavored prose is getting to be significant cognitive overhead at work, and costs us credibility for anything external. AGENTS.md imports the rules into every session started from the workspace, and setup.sh also installs them as the FilOne Standard output style, so commit messages, PR descriptions, docs, and plain terminal replies follow them too. On a new workspace the style is the default; if you already have a `.claude/settings.local.json`, the script leaves it alone and prints the line to add. Rule changes go to knowledge-base by PR; pull your clone and re-run setup.sh to pick them up. |
There was a problem hiding this comment.
Rule changes go to knowledge-base by PR; pull your clone and re-run setup.sh to pick them up.
How will the process of distributing updates look in practice?
- Miro opens a PR against the knowledge-base
- Hannah approves it and one of them lands the PR.
- How will Srdjan learn that they need to "pull their clone and re-run setup.sh"?
Can we find a distribution mechanism that's natively supported by coding agents, e.g. plugins or skills?
I think this is another argument in favour of a monorepo. With monorepo, knowledge-base changes are interleaved with code changes. A single git pull fetches everything together; we don't need to remember to pull the knowledge base.
There was a problem hiding this comment.
I agree with monorepo. Monorepo is a long path -- I welcome a proposal to get us there fast.
There was a problem hiding this comment.
We might want to instruct agents via AGENTS.md to periodically check for potential knowledge base updates.
|
|
||
| ## AGENTS.md in every repo | ||
|
|
||
| Write agent guidance once and every tool reads it. `AGENTS.md` is the cross-tool convention: Codex, Cursor, Copilot, and most other coding agents read it natively. Claude Code is the exception (it reads `CLAUDE.md`), and the one-line `@AGENTS.md` import is what closes that gap. The ask is that every repo carries the pair, starting with new ones. |
There was a problem hiding this comment.
How do we want to handle (de)duplication of instructions that we want to share in more than one repository?
Example to consider:
We want to have the same short section in piri & ingot AGENTS.md with instructions related to how these two services are deployed as part of the FilOne Appliance. E.g. "read all sensitive configuration options via env vars, never via CLI flags or from config files".
How can we achieve that in the proposed setup?
There was a problem hiding this comment.
I think there's no obvious way around that other than monorepo
|
|
||
| ## Rollout | ||
|
|
||
| 1. Run the script this week. It takes a few minutes; if it fights your setup, tell me and I'll fix the script rather than your machine. |
| ## Rollout | ||
|
|
||
| 1. Run the script this week. It takes a few minutes; if it fights your setup, tell me and I'll fix the script rather than your machine. | ||
| 2. Existing workspace: add the `outputStyle` line yourself — the script never edits a settings file you already have. |
There was a problem hiding this comment.
See https://code.claude.com/docs/en/output-styles#create-a-custom-output-style
I am wondering if we should distribute the output style as a managed policy? ( .claude/output-styles inside the managed settings directory)
I think the missing step in this document is explaining where to put the output style definition file (User: ~/.claude/output-styles; Project: .claude/output-styles).
There was a problem hiding this comment.
I am trialling the following setup:
- Put the writing style to
~/.claude/output-styles/filone-writing-style.md - In Claude Code >>
/settings>> Output Style, select filone-writing-style.
| ## Decisions needed | ||
|
|
||
| - **Default-on output style.** The style shapes how Claude talks in every session, including casual ones. I propose default-on with personal opt-out (delete the `outputStyle` line). | ||
| - **Backfill.** Six repos keep real guidance in a `CLAUDE.md` no other tool will find. Convert them in one sweep now, or as we touch them? I lean as-touched — the sweep is an hour of agent work if anyone feels strongly. |
There was a problem hiding this comment.
What are the six repos affected?
|
|
||
| We lean hard on AI tools now, and each of us wired them up alone. I propose we standardize three things: | ||
|
|
||
| 1. **One bootstrap.** Everyone sets up their machine with the [workspace-setup](https://github.com/fil-one/workspace-setup) script. |
There was a problem hiding this comment.
I'm worried that https://github.com/fil-one/knowledge-base contains a LOT of old and now defunct information about Storacha era (and earlier) will confuse agents (also humans!).
It's also not referencing the newly updated UCAN protocol specs or any of the RFCs we have been writing.
There was a problem hiding this comment.
UCAN protocol specs addressed in https://github.com/fil-one/knowledge-base/pull/1
|
|
||
| 1. **One bootstrap.** Everyone sets up their machine with the [workspace-setup](https://github.com/fil-one/workspace-setup) script. | ||
| 2. **One writing standard.** Generated prose follows the FilOne Standard, which the workspace makes Claude Code's default output style. | ||
| 3. **One home for agent guidance.** Every repo carries an `AGENTS.md`, and `CLAUDE.md` is the one-line import `@AGENTS.md`. |
| ./workspace-setup/setup.sh ~/projects/filecoin | ||
| ``` | ||
|
|
||
| You get a workspace directory that symlinks to your fil-forge and fil-one clone trees, clones the shared knowledge base, and writes the AGENTS.md, CLAUDE.md, and Claude Code settings that tie it together. It asks before installing the optional ai-dev process module; declining is fine. It will not disturb the checkouts you already have: clones stay wherever you keep them, and the workspace reaches them through symlinks. Mine still points at `~/projects/go/src/github.com` — nothing moved, and I work from a much simpler path than the full Go tree. |
There was a problem hiding this comment.
We might potentially want to account for git worktree workflows.
|
|
||
| We lean hard on AI tools now, and each of us wired them up alone. I propose we standardize three things: | ||
|
|
||
| 1. **One bootstrap.** Everyone sets up their machine with the [workspace-setup](https://github.com/fil-one/workspace-setup) script. |
There was a problem hiding this comment.
I agree with Miro on this one. This works well for terminal sessions, but not so much for the remote sessions.
|
|
||
| ## Generated writing sounds like us | ||
|
|
||
| [knowledge-base/writing-style.md](https://github.com/fil-one/knowledge-base/blob/main/writing-style.md) is the FilOne Standard: the writing rules for anything reader-facing, because reading overly-AI-flavored prose is getting to be significant cognitive overhead at work, and costs us credibility for anything external. AGENTS.md imports the rules into every session started from the workspace, and setup.sh also installs them as the FilOne Standard output style, so commit messages, PR descriptions, docs, and plain terminal replies follow them too. On a new workspace the style is the default; if you already have a `.claude/settings.local.json`, the script leaves it alone and prints the line to add. Rule changes go to knowledge-base by PR; pull your clone and re-run setup.sh to pick them up. |
There was a problem hiding this comment.
We might want to instruct agents via AGENTS.md to periodically check for potential knowledge base updates.
…accountability; required install waits for monorepo Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4
…d PRs Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4
Absorbs and supersedes dedicated review time and stacked PRs (norms move here; that doc keeps the evidence and tooling evaluation, with a forward pointer). Adds the stacked-PR default with the same adoption rules as the writing standard, keeps the review hour required, and introduces the accelerated AI development workflow: spec-first human review, self-merge when confident, human review always on request, adversarial Codex review recommended with verified setup steps. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4
…n start Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4
|
A meta comment on how I've responded to your suggestions:
|
| 2. **Readable prose is the author's job.** If a teammate ships you clearly unintelligible AI-generated text, you are fully empowered to hold them accountable. | ||
| 3. **One home for agent guidance.** Every repo carries an `AGENTS.md`, and `CLAUDE.md` is the one-line import `@AGENTS.md`. | ||
| 4. **Stacked PRs are the default for big work.** Anything bigger than about an hour of review ships as a stack of small dependent PRs. Tooling adoption works like the writing standard: however you like, workspace-setup recommended. | ||
| 5. **Every developer dedicates time every day to review** Minimum one hour a day, held on the calendar. |
There was a problem hiding this comment.
+1 to dedicate at least one hour per day for PR reviews.
held on the calendar
Can we give developers more flexibility in how they achieve the target?
For example, I prefer to start my day with deep implementation work and review PRs in the afternoon. (I do admit that I need more discipline there, because sometimes my focused session overruns. At the same time, a block on the calendar would not solve that for me, I need to find a different mechanism.)
Per fil-one/RFC#23, to move faster, not every pull request needs to be reviewed by a human peer. With CODEOWNERS in place, every pull request requests review for all owners, even if the author is not asking for it. If you want to be notified about all pull requests in this repository, then configure repository watching (Watch >> Custom >> Pull requests). Signed-off-by: Miroslav Bajtoš <oss@bajtos.net>

This RFC sets the conventions for how we work with AI. It absorbs and supersedes dedicated review time and stacked PRs: the norms live here, that document keeps the evidence and the tooling evaluation, and this PR adds the supersession pointer to it.
The asks:
gh stack.Branch protections already match the accelerated workflow: no repo in fil-forge or fil-one requires an approving review any more (PR-before-merge and status checks were left untouched).
Read the docs rendered:
🤖 Generated with Claude Code
https://claude.ai/code/session_0123NvBGzdiqJwgqx4Chs3R4