Skip to content

[llm] playground for LLM-related interaction#1019

Draft
strub wants to merge 2 commits into
mainfrom
llm-interactive
Draft

[llm] playground for LLM-related interaction#1019
strub wants to merge 2 commits into
mainfrom
llm-interactive

Conversation

@strub
Copy link
Copy Markdown
Member

@strub strub commented May 27, 2026

Playground branch for experimenting with LLM-driven EasyCrypt interaction.

Not intended for review or merge in its current form — kept as a draft so
the work-in-progress is visible.

strub added 2 commits May 26, 2026 21:53
Introduce an interactive REPL for LLM coding agents driving EasyCrypt
(`easycrypt llm`) using a line-oriented protocol over stdin/stdout, plus
two CLI flags for goal inspection:

  - `-upto <pos>`  compile up to a given position and print the goals
  - `-lastgoals`   print the last unproven goals at end-of-file

REPL protocol (see `doc/llm/CLAUDE.md` for the full guide):

  - LOAD "file.ec" [LINE[:COL]] -- compile, optionally up to a position
  - UNDO / REVERT <uuid|name>   -- navigate proof state
  - GOALS / GOALS ALL           -- inspect current or all subgoals
  - CHECKPOINT <name>           -- named bookmarks for branching
  - SEARCH <pattern>            -- lemma search
  - QUIET ON/OFF                -- suppress goal display for bulk input
  - Direct EasyCrypt input (tactics, declarations, search, print, ...)

Responses use a typed envelope (OK/ERROR with uuid) terminated by an
`<END>` sentinel for reliable parsing. LOAD reports the last processed
line in the response tag; error messages include the offending source
text; only the current subgoal is shown by default with a remaining
count.
Add a -trace flag to the LOAD REPL command. When set, LOAD compiles the
prefix exactly as today (using the existing LINE[:COL] argument, or up
to EOF if omitted), but defers the last sentence and runs it under
goal capture, then returns a response body with four delimited blocks:

  === BEFORE: line L (col C) ===
  <focused goal before the sentence>
  === TACTIC (lines L:C - L':C') ===
  <exact source text of the sentence>
  === AFTER: line L (col C) ===
  <new focused goal + any new sibling goals>
  === SUMMARY ===
  open goals: N1 -> N2

Adapted from PR #1018 (-trace LINE[:COL] for batch mode): same
delimiters and the same new-or-modified-head filtering for AFTER. The
position is taken from LOAD's existing LINE[:COL] argument; the tag is
the regular [loaded:file:LINE].

If the deferred sentence is outside a proof context, or there is no
sentence to trace, the reply uses the ERROR envelope with a clear
message. If the sentence fails, the BEFORE/TACTIC blocks are still
delivered, AFTER carries a <sentence failed> marker, and the formatted
exception is appended.

Expose EcCommands.in_proof so the REPL can check the pre-execution
proof status without inspecting scope internals.
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.

1 participant