Hara RESP Protocol
The Truffle runtime listens on 127.0.0.1:1311 by default. RESP is the external control-plane
protocol; HTA is the internal Truffle/WASM ABI.
Sessions
Section titled “Sessions”The Hara process owns sessions. Each session contains one isolated Hara kernel, while the RESP
listener is only one way to reach them. The local JLine REPL and RESP clients share ROOT. Clients attach to a
session independently, and multiple clients may attach to the same session. Requests within one
session are serialized.
Protocol 4 is negotiated with ["HELLO", "4", "CLIENT", CLIENT-NAME]. Every subsequent request
uses [OPERATION, REQUEST-ID, ...ARGUMENTS], including session operations:
["SESSION", "REQ-1", "NEW", "APP"]["SESSION", "REQ-2", "LIST"]["SESSION", "REQ-3", "ATTACH", "APP"]["SESSION", "REQ-4", "DETACH"]["SESSION", "REQ-5", "INFO"]["SESSION", "REQ-6", "CLOSE", "APP"]ROOT is created automatically and remains alive when the listener is stopped or restarted. Other
sessions remain alive until explicitly closed or the Hara process exits.
Evaluation
Section titled “Evaluation”After SESSION ATTACH, evaluation requests use the attached session:
["EVAL", "REQ-7", "(+ 1 2)"]["DOC", "REQ-8", "str/join"]["COMPLETE", "REQ-9", "ma"]Editors may append source context to EVAL or LOAD. This preserves definition and error
locations when evaluating a form or region instead of a complete file:
["EVAL", "REQ-10", "(defn add [x y] (+ x y))", "FILE", "/project/src/sample.hal", "LINE", "12", "COLUMN", "3"]DOC returns a flat, keyed array so RESP clients do not need to parse printed Hara values:
["SYMBOL", "sample/add", "DOC", "Adds two values.", "ARGLISTS", [["x", "y"]], "FILE", "/project/src/sample.hal", "LINE", 12, "COLUMN", 3]Documentation and arglists may be null. Runtime and Java-backed symbols may also omit source location fields.
Responses are streamed as RESP arrays:
["RESULT", "REQ-7", "3"]["DONE", "REQ-7", "OK"]Failures emit ["ERROR", ID, CODE, MESSAGE] followed by ["DONE", ID, "ERROR"]. Stable codes
include BAD_REQUEST, UNKNOWN_OP, NO_SESSION, EVAL_ERROR, UNSUPPORTED, and
INTERNAL_ERROR. HELLO and INFO include an instance ID and canonical project root for endpoint
validation. COMMANDS is derived from the installed operation-handler registry.
Protocol 3 and clients that omit HELLO remain supported. Protocol-3 clients retain the previous
mixed request shapes; legacy clients may use EVAL SESSION SOURCE.
Client libraries
Section titled “Client libraries”The JVM RESP2 transport is public under std.lib.resp. Hara programs with network capability can
use std.resp.client/connect, call, write, read, pipeline, open?, and close. The client
is blocking; connect accepts :connect-timeout-ms, :read-timeout-ms, and
:decode-bulk :string|:bytes options.
Runtime modes
Section titled “Runtime modes”hara # ROOT JLine REPL + RESP on 127.0.0.1:1311hara --offline # ROOT JLine REPL, listener initially disabledhara headless # ROOT RESP listener without terminal UIhara server # compatibility alias for headlesshara standalone # compatibility alias for --offlinehara remote HOST:PORT # remote client mode