Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
77ab553
Add LLM coding-agent REPL and goal-printing flags
strub May 26, 2026
e1105f2
[llm] add LOAD ... -trace for before/after sentence inspection
strub May 27, 2026
169d0e8
[llm] relax +strict_bullets in REPL, add TREE and focus tag
strub May 30, 2026
e6c1db3
[llm] add FOCUS N and NEXT for explicit goal selection
strub May 30, 2026
378bd15
[llm] add COMMIT to emit a +strict_bullets-friendly proof body
strub May 30, 2026
1265c20
[llm] extract REPL into a dedicated EcLlm module
strub May 30, 2026
6f30a45
[llm] split REPL dispatcher into Parse and Dispatch submodules
strub May 30, 2026
f254ef9
[llm] diagnose missing-argument REPL commands at parse time
strub May 31, 2026
fcf763c
[llm] nested TREE and dotted-path FOCUS
strub May 31, 2026
60b6807
[llm] update CLAUDE.md with current workflow status
strub May 31, 2026
fd1cad8
[llm] add -eval STR for scripted one-shot invocations
strub Jul 15, 2026
c49ea49
[llm] use apply_pragma_option for loader pragmas (align with ec.ml co…
strub Jul 15, 2026
fa55c5c
Add -stdlib DIR flag to override the built-in standard library
strub Jul 17, 2026
5934dea
[llm] scripted -eval runs exit nonzero when any command errors
strub Jul 23, 2026
e816fc9
[llm] LOAD applies the easycrypt.project of the loaded file
strub Jul 23, 2026
e6e2c6d
[llm] add golden-output regression harness for the REPL
strub Aug 21, 2026
c9d76f1
[llm] COMMIT keeps bullets when run after qed
strub Aug 21, 2026
2585340
[llm] COMMIT respects the LOAD prefix's open bullet frames
strub Aug 21, 2026
965a60a
[llm] LOAD reports a missing file instead of an anomaly
strub Aug 21, 2026
818d3e0
[llm] queries no longer pollute the COMMIT transcript
strub Aug 21, 2026
0639da0
[llm] tag GOALS / TREE / COMMIT replies with the focus indicator
strub Aug 21, 2026
d66e1fc
[llm] a -trace LOAD that cannot trace keeps the prefix state
strub Aug 21, 2026
4016b61
[llm] split ecLlm into an engine core and a text front-end
strub Aug 21, 2026
73352a5
[llm] core: TRY semantics via EcLlmCore.try_step
strub Aug 21, 2026
24057d7
[llm] add `easycrypt mcp`: an MCP server front-end over EcLlmCore
strub Aug 21, 2026
9dfdad0
[llm] step runs every sentence of its input, not just the first
strub Aug 21, 2026
6a90159
[llm] queries no longer spend a uuid
strub Aug 21, 2026
95876b5
[llm] core computes `changed' for failures too
strub Aug 21, 2026
858a226
[llm] a golden harness for the MCP front-end
strub Aug 21, 2026
b06b090
[llm] parity check: two front-ends, one core
strub Aug 21, 2026
6be6f4b
[llm] real-client verification of `easycrypt mcp'
strub Aug 21, 2026
0213ddb
[llm] mcp: repeat the reply text inside structuredContent
strub Aug 21, 2026
032d238
[llm] document the MCP front-end
strub Aug 21, 2026
d2221b1
[llm] wire the llm/mcp golden harnesses into check and CI
strub Aug 21, 2026
7beda91
[llm] SEARCH takes a pattern, not a command stream
strub Aug 21, 2026
bafab43
[llm] COMMIT emits sibling subtrees in DAG order, not typing order
strub Aug 22, 2026
a4eeaff
[llm] escape envelope-shaped lines in REPL reply bodies
strub Aug 22, 2026
3c765f6
[llm] `print' renders inside the reply, not around it
strub Aug 22, 2026
0af0e8d
[mcp] repair non-UTF-8 bytes before they reach the wire
strub Aug 22, 2026
ee09c21
[llm] LOAD rewinds the include path instead of growing it
strub Aug 22, 2026
ae61384
[llm] ec_try restores the exact pre-call state, forward included
strub Aug 22, 2026
119d7c2
[llm] correct the documented meaning of FOCUS and NEXT
strub Aug 22, 2026
b4bf5a9
[llm] COMMIT renders each proof of a session on its own
strub Aug 22, 2026
36580cc
[llm] QUIT and `exit.` no longer defeat the -eval exit status
strub Aug 22, 2026
af0e5a3
[llm] LOAD honours `upto` for every sentence kind, not just commands
strub Aug 22, 2026
cb17f79
[llm] drop the -upto/-lastgoals machinery the batch llm mode left behind
strub Aug 22, 2026
ab2bb94
[llm] cover ec_load's nosmt and trace options on the MCP side
strub Aug 22, 2026
e2120ca
[llm] `pragma restart.` drops the checkpoint table too
strub Aug 22, 2026
83cbbb8
[llm] document the front-end-facing half of ecCommands' interface
strub Aug 22, 2026
895f3e7
[llm] count open goals for the focus tag instead of rendering them
strub Aug 22, 2026
c1795e9
[llm] share the argument checks both front-ends were duplicating
strub Aug 23, 2026
4cc6a54
[mcp] stop naming the JSON constructors yojson 3 removed
strub Sep 1, 2026
bb1922d
[llm] re-record the print goldens for the new locate prefix
strub Sep 4, 2026
ed4b64a
[llm] LOAD -noproof: admit the prefix's lemmas instead of proving them
bgregoir Sep 7, 2026
0dade72
[llm] keep elaborated theories across a LOAD, so reloading is cheap
bgregoir Sep 7, 2026
31101c4
[llm] STRICT: stop the session at a failure instead of drifting past it
bgregoir Sep 7, 2026
26b6596
[llm] mcp -sessions: one engine per agent behind one MCP server
bgregoir Sep 10, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ jobs:
strategy:
fail-fast: false
matrix:
target: [unit, stdlib, examples]
target: [unit, stdlib, examples, test-llm, test-mcp]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
Expand Down
21 changes: 20 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ CHECK += --bin=./ec.native
CHECK += --jobs="$(ECJOBS)"
CHECK += $(foreach arg,$(ECARGS),--bin-args="$(arg)")
CHECK += $(ECEXTRA) config/tests.config
LLMCHECK := scripts/testing/llm-golden
LLMCHECK += --bin=./ec.native
LLMWARM := scripts/testing/llm-warm-reload
LLMWARM += --bin=./ec.native
MCPCHECK := scripts/testing/mcp-golden
MCPCHECK += --bin=./ec.native
MCPPARITY := scripts/testing/mcp-parity
MCPSESSIONS := scripts/testing/mcp-sessions
MCPPARITY += --bin=./ec.native
NIX ?= nix --extra-experimental-features "nix-command flakes"
PROFILE ?= dev

Expand All @@ -20,6 +29,7 @@ UNAME_S = $(shell uname -s)

# --------------------------------------------------------------------
.PHONY: default build byte native tests check examples
.PHONY: test-llm test-mcp
.PHONY: nix-build nix-build-with-provers nix-develop
.PHONY: clean install uninstall

Expand Down Expand Up @@ -49,7 +59,16 @@ stdlib: build
examples: build
$(CHECK) examples mee-cbc

check: unit stdlib examples
test-llm: build
$(LLMCHECK)
$(LLMWARM)

test-mcp: build
$(MCPCHECK)
$(MCPPARITY)
$(MCPSESSIONS)

check: unit stdlib examples test-llm test-mcp
@true

nix-build:
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,15 @@ with proof scripts). At present, the only available front-end is based on Emacs'
[Proof General](https://github.com/ProofGeneral/PG).
However, a front-end for VSCode is currently in development.

Besides these, EasyCrypt ships an interface aimed at LLM agents rather
than at humans: `easycrypt llm`, an interactive REPL speaking a
machine-friendly protocol, and `easycrypt mcp`, a
[Model Context Protocol](https://modelcontextprotocol.io/) server over
stdio (`easycrypt mcp -sessions` serves one engine per named session,
for clients that run several agents at once). Both drive the same
proof engine, and both are documented in
[doc/llm/CLAUDE.md](doc/llm/CLAUDE.md).

### Proof-General (Emacs)

EasyCrypt mode has been integrated upstream. Please, go
Expand Down
Loading
Loading