Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
2673d6f
Add LLM coding-agent REPL and goal-printing flags
strub May 26, 2026
97ef14e
[llm] add LOAD ... -trace for before/after sentence inspection
strub May 27, 2026
c6d8277
[llm] relax +strict_bullets in REPL, add TREE and focus tag
strub May 30, 2026
452244b
[llm] add FOCUS N and NEXT for explicit goal selection
strub May 30, 2026
675d1ac
[llm] add COMMIT to emit a +strict_bullets-friendly proof body
strub May 30, 2026
17c4a0e
[llm] extract REPL into a dedicated EcLlm module
strub May 30, 2026
633c267
[llm] split REPL dispatcher into Parse and Dispatch submodules
strub May 30, 2026
6c657dd
[llm] diagnose missing-argument REPL commands at parse time
strub May 31, 2026
c21749d
[llm] nested TREE and dotted-path FOCUS
strub May 31, 2026
e9472ec
[llm] update CLAUDE.md with current workflow status
strub May 31, 2026
ea32ba5
[llm] add -eval STR for scripted one-shot invocations
strub Jul 15, 2026
dcef713
[llm] use apply_pragma_option for loader pragmas (align with ec.ml co…
strub Jul 15, 2026
f484636
Add -stdlib DIR flag to override the built-in standard library
strub Jul 17, 2026
5c221fc
[llm] scripted -eval runs exit nonzero when any command errors
strub Jul 23, 2026
68e7057
[llm] LOAD applies the easycrypt.project of the loaded file
strub Jul 23, 2026
8742368
[llm] add golden-output regression harness for the REPL
strub Aug 21, 2026
55599f4
[llm] COMMIT keeps bullets when run after qed
strub Aug 21, 2026
1e608b3
[llm] COMMIT respects the LOAD prefix's open bullet frames
strub Aug 21, 2026
b62259c
[llm] LOAD reports a missing file instead of an anomaly
strub Aug 21, 2026
345a5d4
[llm] queries no longer pollute the COMMIT transcript
strub Aug 21, 2026
86bc1f7
[llm] tag GOALS / TREE / COMMIT replies with the focus indicator
strub Aug 21, 2026
dbe5acb
[llm] a -trace LOAD that cannot trace keeps the prefix state
strub Aug 21, 2026
2355e07
[llm] split ecLlm into an engine core and a text front-end
strub Aug 21, 2026
31dad7c
[llm] core: TRY semantics via EcLlmCore.try_step
strub Aug 21, 2026
31320d7
[llm] add `easycrypt mcp`: an MCP server front-end over EcLlmCore
strub Aug 21, 2026
8ab6678
[llm] step runs every sentence of its input, not just the first
strub Aug 21, 2026
ccfad83
[llm] queries no longer spend a uuid
strub Aug 21, 2026
19e2922
[llm] core computes `changed' for failures too
strub Aug 21, 2026
172d30f
[llm] a golden harness for the MCP front-end
strub Aug 21, 2026
a4ad7be
[llm] parity check: two front-ends, one core
strub Aug 21, 2026
e3dce85
[llm] real-client verification of `easycrypt mcp'
strub Aug 21, 2026
380ff7d
[llm] mcp: repeat the reply text inside structuredContent
strub Aug 21, 2026
e10cd70
[llm] document the MCP front-end
strub Aug 21, 2026
d138916
[llm] wire the llm/mcp golden harnesses into check and CI
strub Aug 21, 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
16 changes: 15 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ CHECK += --jobs="$(ECJOBS)"
CHECK += --bin-args=-timeout --bin-args="$(ECTOUT)"
CHECK += $(foreach arg,$(ECARGS),--bin-args="$(arg)")
CHECK += $(ECEXTRA) config/tests.config
LLMCHECK := scripts/testing/llm-golden
LLMCHECK += --bin=./ec.native
MCPCHECK := scripts/testing/mcp-golden
MCPCHECK += --bin=./ec.native
MCPPARITY := scripts/testing/mcp-parity
MCPPARITY += --bin=./ec.native
NIX ?= nix --extra-experimental-features "nix-command flakes"
PROFILE ?= dev

Expand All @@ -22,6 +28,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 @@ -51,7 +58,14 @@ stdlib: build
examples: build
$(CHECK) examples mee-cbc

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

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

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

nix-build:
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,13 @@ 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. 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