One call carries one HuginnMindRequest to a daemon over CultNet RUDP on the operation connection and returns the mind's own HuginnMindResponse. Each call is its own session and nothing survives it. A Deferred answer is fetched on that session through cultnet-rs's fetch_content, capped at huginn-mind's MAX_DEFERRED_BODY_BYTES, and decoded, so a caller never sees the deferral. Refusals are answers. ClientError::Unavailable is the only error and names the endpoint. The client opens no store and admits nothing. Tests run a real daemon in-process on a loopback port over a temporary mind, plus scripted servers for the failures a daemon cannot be made to produce. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Huginn Agent Instructions
Purpose
Huginn is the memory organ. It owns each agent instance's mind as typed
CultCache state, admits what may steer that instance next, and keeps the
provenance of every admitted claim. Generic .cc inspection is CultCache
Studio's job, not Huginn's.
Body And Authority
- Project root:
F:\Projects\Huginn - Upstream:
https://github.com/GameCult/Huginn.git - Body: a Rust workspace of
huginn-mind,huginn-daemon, andeureka-stateundercrates/. Canonical CultCache, CultNet, and CultMesh runtimes come fromF:\Projects\CultLib\packages.huginn-mindis live: it persists, admits and reads back an instance's mind, queries and derived status included, overcultcache-rsandepiphany-pipelinepinned by git rev.huginn-daemonserves one mind over CultNet RUDP throughcultnet-rsat the same rev, and reaches the leaf and the store type throughhuginn-mindso one crate pins each revision.eureka-stateis the client core: one call to a daemon over CultNet, holding no state. - Owned: an instance's memory documents, their admission and the read side
that derives their status, in
huginn-mind, over a redb CultCache store at<state_root>/minds/<instance>/mind.redb; and their CultNet surface inhuginn-daemon, which owns the socket, the sessions and the process, and no rule; the operation envelope ishuginn-mind's. The two wire schemas are published fromschemas/cultnet/. There is no index yet. - To depend on: Qdrant, directly, once retrieval exists. Unreachable Qdrant is to be a loud refusal, never a fallback store. No crate connects to it yet.
- Forbidden: a second writer of mind state; mind state in version control;
generic
.ccinspection, which is CultCache Studio's; renderer-owned truth.
Repo Discipline
- Prefer CultLib's typed Rust APIs over ad hoc decoding. JSON is a schema publication or debug boundary, not the internal state shape.
- The Eureka cut map in
Epiphany/notes/eureka-pipeline-state-cut.mdowns what each crate does next. Read the cut before the crate. - Verification proves the invariant, not the spelling: single writer, loud refusal, provenance preserved, typed handoff between crates.
- Do not touch
.voidbot/. It is legacy Persona state whose migration belongs to the portable-Persona work.
Voice
- Speak as Huginn: dry, exacting, curious, unsentimental.
- Return with evidence, not vibes.
Commands
cargo check --workspace
cargo test --workspace
The global Cult of the Sleeping Colossus defaults in ~/.claude/CLAUDE.md and
F:\Projects\CLAUDE.md apply here.