# FPF + Archcore

> Connect FPF + Archcore so each document your agent writes, from ADRs to plans and specs, says how to verify it and when to revisit it.

Instruction revision: 0d6f75d93f7845fe6199153c8b60aba3b08dc64a10ed7a514d5fadc7af143900
Instruction text: https://archcore.ai/integrations/fpf/cooperation.md
Source: https://github.com/archcore-ai/landing — src/recipes/fpf/cooperation.md (unpublished)

## Tools

- Archcore — Keeps the project's decisions, plans and specs [in Git](https://docs.archcore.ai/), so the agent checks them first and saves every new document as a draft.
- FPF — Serves the [First Principles Framework](https://github.com/ailev/FPF) library by Anatoly Levenchuk over a [read-only MCP server](https://fpf.tools/connect): a pattern for each kind of document and for making a choice.

## How FPF + Archcore work together

FPF + Archcore lets your agent write project documents that a later reader can
check. Archcore keeps the project's decisions, plans and specs in Git and shows
the agent what is already settled. FPF, the First Principles Framework, gives
the agent a pattern for each kind of document, read from the public FPF library
over MCP.

Say you ask for an ADR. The template covers what was decided. The FPF pattern
adds how to verify it and when to revisit it, and the agent writes those
sections in plain words. The [benchmark note](/integration-evidence/2026-10-22-fpf.md)
says what was measured.

FPF is published by Anatoly Levenchuk under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). The agent cites
pattern IDs and does not copy FPF text into your documents. This recipe is not
endorsed by the FPF author. See [FPF Library](https://fpf.tools/connect) and the
[FPF repository](https://github.com/ailev/FPF).

## From a request to a document you can check later

The instructions ask your agent to:

1. **Check what is already decided.** Before it chooses or writes, the agent reads the Archcore records on the same subject. An accepted record limits the options.
2. **Read the FPF pattern.** The agent reads the FPF pattern for the choice or the document type, such as C.32.ADR for an ADR. If an unknown input could reverse a choice, it defers or asks instead of guessing.
3. **Save a draft with the missing parts.** The agent adds what the template misses, such as How to verify or When to revisit, and saves a draft in .archcore/ with the pattern IDs. You accept it in review.

Both Archcore and the FPF MCP server must already be set up; the recipe also works inside /archcore:plan and /archcore:document.


## Example

Request: “German and French partners start ordering next quarter. Legal answers how VAT applies to partner quotes in six weeks. Decide what to do in the quotation library now, keep the tests passing, and record the decision.”

1. **Archcore:** The agent searches Archcore and finds the integer-cents rule and no record about VAT.
2. **FPF:** Pattern C.38 tells the agent that an unknown input which could reverse the choice is a reason to defer.
3. **Agent:** The agent defers, keeps quote() as it is and runs the tests.
4. **FPF:** Pattern C.32.ADR lists what a later reader must be able to recover from the record.
5. **Archcore:** The agent writes a draft ADR with How to verify, When to revisit and Open questions, linked to the integer-cents rule.
6. **Agent:** When Legal answers, a later session finds the draft ADR and picks the decision up from When to revisit.

This is what the instructions ask for, not a recorded run. This request passed 2 of 2 benchmark runs with claude-sonnet-5; the later-session step was not run.


## Benefits & limits

### Documents a later reader can check.

With these instructions, 24 of 33 documents covered every graded item. With Archcore alone, 6 of 34 did.

### The effect comes from the FPF library

The same instructions without the FPF server passed 9 of 34 documents, close to Archcore alone.

Plans and market analyses failed in every setup.

### A choice made before an answer arrives

Asked about VAT before Legal answered, no run hard-coded a rate, and with FPF both records named the open input and when to revisit it.

Every setup waited in code, so FPF changed the record more than the choice.

### Limits

Two runs per setup on 17 requests with claude-sonnet-5 on one small Python project: enough to see a pattern, not to judge a single document type.


## Known limits

- Measured with Claude Code 2.1.306, claude-sonnet-5, Archcore CLI v0.13.1 and one FPF library snapshot. The library cannot be pinned, so a later snapshot can change a pattern.
- FPF is a remote service that receives each call's arguments; in these runs, only pattern IDs.
- Nothing enforces the instructions. Review each draft before you accept it.
