Skip to content

RFC: AI conventions - #23

Open
hannahhoward wants to merge 9 commits into
mainfrom
rfc/ai-conventions
Open

RFC: AI conventions#23
hannahhoward wants to merge 9 commits into
mainfrom
rfc/ai-conventions

Conversation

@hannahhoward

@hannahhoward hannahhoward commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

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:

  1. FilOne Standard as the base of everyone's writing style, wired however you like; workspace-setup is the recommended path (it now auto-updates at session start, installs the output style, and installs the stacked-PR tooling).
  2. Readable prose is the author's job — "this is unintelligible, revise so I can review" is a reasonable response to a PR.
  3. AGENTS.md + one-line CLAUDE.md in every repo.
  4. Stacked PRs are the default for big work, on GitHub native stacks via gh stack.
  5. Dedicated review time stays: minimum an hour a day, first response within one business day.
  6. An accelerated workflow for AI-built work: spec first with human review from a colleague, then self-review and merge the stack if you are confident; human review always on request; adversarial Codex review recommended, with setup steps for automatic reviews.

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

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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-setup script.
  • Proposes adopting the “FilOne Standard” as the default output style for generated prose.
  • Proposes standardizing repository agent guidance with AGENTS.md plus a one-line CLAUDE.md import.
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.

Comment thread rfcs/2026-08-ai-conventions.md Outdated
Comment thread rfcs/2026-08-ai-conventions.md Outdated
Comment thread rfcs/2026-08-ai-conventions.md Outdated
hannahhoward and others added 3 commits August 15, 2026 12:22
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>
Comment thread rfcs/2026-08-ai-conventions.md Outdated

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am hesitant to dictate a single workspace setup.

  1. AFAICT, the proposed setup does not support Claude Code sessions running in the cloud.
  2. 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I agree with Miro on this one. This works well for terminal sessions, but not so much for the remote sessions.

Comment thread rfcs/2026-08-ai-conventions.md Outdated
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

@hannahhoward hannahhoward Aug 17, 2026

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.

I would say this:

  1. Yes, writing is thinking. It's not the only way to clarify thinking but I lean on it a lot as well.
  2. 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.
  3. 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)

Comment thread rfcs/2026-08-ai-conventions.md Outdated

## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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?

  1. Miro opens a PR against the knowledge-base
  2. Hannah approves it and one of them lands the PR.
  3. 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.

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.

I agree with monorepo. Monorepo is a long path -- I welcome a proposal to get us there fast.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We might want to instruct agents via AGENTS.md to periodically check for potential knowledge base updates.

Comment thread rfcs/2026-08-ai-conventions.md Outdated

## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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?

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.

I think there's no obvious way around that other than monorepo

Comment thread rfcs/2026-08-ai-conventions.md Outdated

## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

How can we set up this workflow to work with Claude Code running in the cloud & controlled via the Claude Desktop app?

Image

Comment thread rfcs/2026-08-ai-conventions.md Outdated
## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Comment thread rfcs/2026-08-ai-conventions.md Outdated
## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What are the six repos affected?

Comment thread rfcs/2026-08-ai-conventions.md Outdated

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.

@alanshaw alanshaw Aug 17, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👌

Comment thread rfcs/2026-08-ai-conventions.md Outdated
./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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We might potentially want to account for git worktree workflows.

Comment thread rfcs/2026-08-ai-conventions.md Outdated

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I agree with Miro on this one. This works well for terminal sessions, but not so much for the remote sessions.

Comment thread rfcs/2026-08-ai-conventions.md Outdated

## 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We might want to instruct agents via AGENTS.md to periodically check for potential knowledge base updates.

hannahhoward and others added 5 commits August 19, 2026 07:35
…accountability; required install waits for monorepo

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
@hannahhoward

Copy link
Copy Markdown
Contributor Author

@bajtos @pyropy

A meta comment on how I've responded to your suggestions:

  1. I've changed the ask significantly around writing style -- in short, I just want everyone to start from the writing style and customize it as you like, but understand you'll be accountable to writing being terrible.
  2. The terminal setup remains as an easy path for those who want it, but not required, and I've updated to address concerns about staying up to date. Moreover, the settings and skills will be perfect for when we have a monorepo
  3. The only clean way to address in all environments including remote sessions is to do a monorepo, which seems outside the scope of this RFC. I welcome such an RFC -- it feels important, but also, hard to imagine exactly how we scope it -- or alternative ways to set things up, though I'd push back on a setup where we keep updating every repo to stay in line.

@hannahhoward
hannahhoward requested a review from bajtos August 19, 2026 19:19
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

+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.)

Comment thread rfcs/2026-08-ai-conventions.md
pyropy pushed a commit to fil-one/fil-one that referenced this pull request Aug 20, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants