iranti 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2456,6 +2456,21 @@ async function writeClaudeCodeProjectFiles(projectPath, projectEnvPath, force =
2456
2456
  }
2457
2457
  }
2458
2458
  }
2459
+ // Write IRANTI.md — the canonical host-neutral protocol file.
2460
+ const irantiMdFile = path_1.default.join(projectPath, 'IRANTI.md');
2461
+ let irantiMdStatus = 'unchanged';
2462
+ const irantiMdContent = buildIrantiMdContent();
2463
+ if (!fs_1.default.existsSync(irantiMdFile)) {
2464
+ await writeText(irantiMdFile, irantiMdContent);
2465
+ irantiMdStatus = 'created';
2466
+ }
2467
+ else {
2468
+ const existing = fs_1.default.readFileSync(irantiMdFile, 'utf8');
2469
+ if (existing !== irantiMdContent) {
2470
+ await writeText(irantiMdFile, irantiMdContent);
2471
+ irantiMdStatus = 'updated';
2472
+ }
2473
+ }
2459
2474
  const closeout = await (0, scaffoldCloseout_1.writeProjectScaffoldCloseout)({
2460
2475
  tool: 'claude',
2461
2476
  projectPath,
@@ -2465,6 +2480,7 @@ async function writeClaudeCodeProjectFiles(projectPath, projectEnvPath, force =
2465
2480
  { path: vscodeMcpFile, status: vscodeMcpStatus },
2466
2481
  { path: settingsFile, status: settingsStatus },
2467
2482
  { path: claudeMdFile, status: claudeMdStatus },
2483
+ { path: irantiMdFile, status: irantiMdStatus },
2468
2484
  ],
2469
2485
  agentId: 'iranti_cli_scaffold',
2470
2486
  });
@@ -2473,45 +2489,57 @@ async function writeClaudeCodeProjectFiles(projectPath, projectEnvPath, force =
2473
2489
  vscodeMcp: vscodeMcpStatus,
2474
2490
  settings: settingsStatus,
2475
2491
  claudeMd: claudeMdStatus,
2492
+ irantiMd: irantiMdStatus,
2476
2493
  closeout,
2477
2494
  };
2478
2495
  }
2479
- function buildIrantiClaudeMdBlock() {
2496
+ /**
2497
+ * Canonical protocol content for IRANTI.md — host-neutral, read once per session.
2498
+ * This is the single source of truth for the Iranti operating protocol.
2499
+ */
2500
+ function buildIrantiMdContent() {
2480
2501
  return [
2481
- '<!-- iranti-rules -->',
2482
2502
  '# Iranti Memory Protocol',
2483
2503
  '',
2484
- 'IMPORTANT: These rules OVERRIDE any default behavior and MUST be followed exactly. No work should begin until the session-start acknowledgment is stated.',
2485
- '',
2486
- '## Every turn',
2487
- '1. Call `mcp__iranti__iranti_attend` before responding to the user message.',
2488
- '2. Call `mcp__iranti__iranti_attend` before using any knowledge discovery tool — Read, Grep, Glob, WebSearch, WebFetch, and Bash commands used as factual basis for a decision.',
2489
- '3. Call `mcp__iranti__iranti_attend` after knowledge discovery to check new findings against stored memory and decide what to inject, write, or checkpoint.',
2490
- '4. Call `mcp__iranti__iranti_attend` after delivering any substantive response — plans, decisions, analysis, or structured recommendations are durable findings that must be assessed before the next turn.',
2491
- '5. Call `mcp__iranti__iranti_write` after confirmed durable findings — decisions, blockers, next steps, validated environment details, what worked, what failed, what changed, and what happens next.',
2492
- '6. Call `mcp__iranti__iranti_write` after every Edit or Write tool call — file changes are always durable. Record what changed, why, and what the file now does.',
2493
- '7. Call `mcp__iranti__iranti_write` after any Bash command that reveals system state — build results, test outcomes, container state, environment facts, errors.',
2494
- '8. Call `mcp__iranti__iranti_write` after any WebSearch or WebFetch that surfaces confirmed external facts.',
2495
- '9. Call `mcp__iranti__iranti_write` after any Agent (subagent) tool completes — subagent findings are invisible to the hive mind otherwise.',
2496
- '10. If a recall-style lookup returns no facts, try at least one alternative retrieval angle before concluding the fact is not stored.',
2497
- '11. Call `mcp__iranti__iranti_attend` again when new knowledge should change what is loaded for the next step.',
2504
+ 'Iranti is a shared working-memory layer. Follow this protocol to persist what you find, what works, what fails, what changes, and what happens next so later sessions do not have to rediscover it.',
2498
2505
  '',
2499
2506
  '## Session start',
2500
2507
  '- Call `mcp__iranti__iranti_handshake` with the current task before responding to the first user message.',
2501
- '- After the handshake completes, you MUST explicitly state: "I acknowledge that Iranti is a hive mind. I have read the Iranti operating rules and the protocols for iranti_handshake, iranti_attend, iranti_write, iranti_checkpoint, and iranti_remember_response, and I pledge to use them to persist what I find, what works, what fails, what changes, and what happens next so later sessions do not have to rediscover it."',
2502
- '- This acknowledgment is strictly mandatory. No work should begin until it is stated.',
2508
+ '- Call `mcp__iranti__iranti_handshake` again after context compaction.',
2503
2509
  '',
2504
- '## After context compaction',
2505
- '- Call `mcp__iranti__iranti_handshake` before responding to the next user message.',
2510
+ '## Every turn',
2511
+ '1. Call `iranti_attend(phase=\'pre-response\')` before responding to the user.',
2512
+ '2. Call `iranti_attend` before any knowledge discovery tool — Read, Grep, Glob, WebSearch, WebFetch, Bash.',
2513
+ '3. Call `iranti_write` after every Edit/Write, Bash that reveals system state, WebSearch/WebFetch with confirmed facts, and subagent completion.',
2514
+ '4. Call `iranti_attend(phase=\'post-response\')` after every response.',
2515
+ '5. If a recall-style lookup returns no facts, try at least one alternative retrieval angle before concluding absent.',
2506
2516
  '',
2507
2517
  '## Checkpointing',
2508
- '- Call `mcp__iranti__iranti_checkpoint` when completing a task, when shifting to a new task mid-session, at any natural pause point, and before stepping away from long or interrupted work.',
2509
- '- Record key actions in the checkpoint `actions` field so later sessions can see important commands, tests, searches, validations, and decisions without rerunning them blindly.',
2510
- '- Do not rely on `mcp__iranti__iranti_write` alone — facts and checkpoints are separate stores. A checkpoint not written means the next handshake recovers from stale data.',
2511
- '- Under-logged runs are non-compliant. Call iranti_write with what you found, what worked, what failed, what changed, and what happens next — not a broad summary, but specific durable facts.',
2518
+ '- Call `iranti_checkpoint` at task completion, task shifts, and natural pauses.',
2519
+ '- Record actions, current step, next step, open risks, and file changes.',
2520
+ '',
2521
+ '## Write depth',
2522
+ '- Include what changed, why, and what breaks if removed.',
2523
+ '- After file edits: absolutePath, lines, before, after, verify, why.',
2524
+ '- After Bash: include the command and relevant output lines.',
2525
+ '- After WebSearch/WebFetch: record findings AND dead ends.',
2526
+ '',
2527
+ ].join('\n');
2528
+ }
2529
+ /**
2530
+ * Slim CLAUDE.md block — just points to IRANTI.md and triggers handshake.
2531
+ * This content lives in the system prompt on every turn, so keep it minimal.
2532
+ */
2533
+ function buildIrantiClaudeMdBlock() {
2534
+ return [
2535
+ '<!-- iranti-rules -->',
2536
+ '# Iranti',
2537
+ '',
2538
+ 'This project uses Iranti for shared memory. Read `IRANTI.md` for the full protocol.',
2512
2539
  '',
2513
- '## Host setup check',
2514
- '- If this file was not present at session start, run `iranti claude-setup .` to complete integration.',
2540
+ '- Call `mcp__iranti__iranti_handshake` before responding to the first user message.',
2541
+ '- Call `mcp__iranti__iranti_handshake` after context compaction.',
2542
+ '- Follow the attend/write/checkpoint protocol in IRANTI.md.',
2515
2543
  '<!-- /iranti-rules -->',
2516
2544
  '',
2517
2545
  ].join('\n');
@@ -8051,12 +8079,13 @@ async function claudeSetupCommand(args) {
8051
8079
  createdSettings += 1;
8052
8080
  if (result.settings === 'updated')
8053
8081
  updatedSettings += 1;
8054
- if (result.mcp === 'unchanged' && result.vscodeMcp === 'unchanged' && result.settings === 'unchanged')
8082
+ if (result.mcp === 'unchanged' && result.vscodeMcp === 'unchanged' && result.settings === 'unchanged' && result.irantiMd === 'unchanged')
8055
8083
  unchanged += 1;
8056
8084
  console.log(` ${projectPath}`);
8057
8085
  console.log(` mcp ${result.mcp}`);
8058
8086
  console.log(` vscode ${result.vscodeMcp}`);
8059
8087
  console.log(` settings ${result.settings}`);
8088
+ console.log(` iranti.md ${result.irantiMd}`);
8060
8089
  }
8061
8090
  console.log('');
8062
8091
  console.log('Summary:');
@@ -8091,10 +8120,12 @@ async function claudeSetupCommand(args) {
8091
8120
  console.log(` vscode ${path_1.default.join(projectPath, '.vscode', 'mcp.json')}`);
8092
8121
  console.log(` settings ${path_1.default.join(projectPath, '.claude', 'settings.local.json')}`);
8093
8122
  console.log(` claude.md ${path_1.default.join(projectPath, 'CLAUDE.md')}`);
8123
+ console.log(` iranti.md ${path_1.default.join(projectPath, 'IRANTI.md')}`);
8094
8124
  console.log(` mcp status ${result.mcp}`);
8095
8125
  console.log(` vscode status ${result.vscodeMcp}`);
8096
8126
  console.log(` settings status ${result.settings}`);
8097
8127
  console.log(` claude.md status ${result.claudeMd}`);
8128
+ console.log(` iranti.md status ${result.irantiMd}`);
8098
8129
  console.log(` memory closeout ${result.closeout.status} (${result.closeout.detail})`);
8099
8130
  console.log(`${infoLabel()} Next: open Claude Code in this project and verify Iranti tools are available.`);
8100
8131
  }
@@ -343,7 +343,7 @@ async function main() {
343
343
  await ensureDefaultAgent(iranti);
344
344
  const server = new mcp_js_1.McpServer({
345
345
  name: 'iranti-mcp',
346
- version: '0.3.5',
346
+ version: '0.3.7',
347
347
  });
348
348
  server.registerTool('iranti_handshake', {
349
349
  description: `Initialize or refresh an agent's working-memory brief for the current task.
@@ -360,8 +360,9 @@ Do not use this as a per-turn retrieval tool; use iranti_attend.`,
360
360
  agent: z.string().optional().describe('Override the default agent id.'),
361
361
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
362
362
  host: z.string().optional().describe('Host identifier (e.g. claude_code, codex). Used to verify host setup has been run for this project.'),
363
+ postCompaction: z.boolean().optional().describe('Set to true after context compaction to force re-delivery of operating rules. Omit on normal mid-session handshake calls — rules are only sent once per context window.'),
363
364
  },
364
- }, async ({ task, recentMessages, agent, agentId, host }) => {
365
+ }, async ({ task, recentMessages, agent, agentId, host, postCompaction }) => {
365
366
  const resolvedHost = resolveToolHost(host);
366
367
  const resolvedAgent = resolveToolAgent(agent, agentId, resolvedHost);
367
368
  syncRuntimeLedgerContext(iranti, resolvedHost, resolvedAgent);
@@ -370,6 +371,7 @@ Do not use this as a per-turn retrieval tool; use iranti_attend.`,
370
371
  agent: resolvedAgent,
371
372
  task,
372
373
  recentMessages: normalizeRecentMessages(recentMessages),
374
+ postCompaction,
373
375
  });
374
376
  const setupWarnings = checkHostSetup(resolvedHost, process.cwd());
375
377
  if (setupWarnings.length > 0) {
@@ -379,14 +381,13 @@ Do not use this as a per-turn retrieval tool; use iranti_attend.`,
379
381
  });
380
382
  server.registerTool('iranti_attend', {
381
383
  description: `Ask Iranti whether memory should be injected before the next LLM turn.
382
- Call this before each turn, passing the latest message and the current
383
- visible context window. If the user is asking you to recall a remembered
384
- fact (for example a preference, decision, blocker, next step, or prior
385
- project detail), use this before answering instead of guessing or saying
386
- you do not know. Returns an injection decision plus any facts that should
387
- be added to context if relevant memory is missing. If no handshake has been
388
- performed yet for this agent in the current process, attend will auto-bootstrap
389
- the session first and report that in the result metadata.
384
+ REQUIRED CALL SEQUENCE follow this every turn, regardless of host:
385
+ 1. Call with phase='pre-response' BEFORE replying to the user.
386
+ 2. Call BEFORE any lookup tool (Read, Grep, Glob, Bash, WebSearch, WebFetch) where Iranti might already hold the answer.
387
+ 3. If you just ran Edit/Write/Bash/WebSearch/WebFetch since your last iranti_write, call iranti_write FIRST — then attend.
388
+ 4. Call with phase='post-response' AFTER every reply, without exception.
389
+
390
+ If the user is asking you to recall a remembered fact (preference, decision, blocker, next step, prior project detail), use this before answering instead of guessing or saying you do not know. Returns an injection decision plus any facts that should be added to context if relevant memory is missing. If no handshake has been performed yet for this agent in the current process, attend will auto-bootstrap the session first and report that in the result metadata.
390
391
  This is the minimum safe pre-reply call even when the host skipped handshake.
391
392
  Omitting currentContext falls back to the latest message only; pass the
392
393
  full visible context when available. For host compatibility, message is
@@ -658,6 +659,8 @@ the exact key, use this before saying you do not know.`,
658
659
  });
659
660
  server.registerTool('iranti_write', {
660
661
  description: `Write one durable fact to shared memory for a specific entity.
662
+ TIMING: Call IMMEDIATELY when a fact is confirmed — do not batch or defer to end of turn.
663
+ One call per finding. If you edited a file, write before the next action. If you ran a command and got a result, write before the next action. If you got a search result, write before moving on.
661
664
  Use this when you learned something concrete that future turns,
662
665
  agents, or sessions should retain. Requires: entity ("type/id"),
663
666
  key, value JSON, and summary. Confidence is optional and defaults
@@ -39,28 +39,17 @@ const STAFF_ENTRIES = [
39
39
  entityId: 'attendant',
40
40
  key: 'operating_rules',
41
41
  valueRaw: {
42
- version: '0.3.2',
42
+ version: '0.3.3',
43
43
  rules: [
44
- 'Serve one external agent only; optimize for that agent keeping task context coherent across turns and sessions.',
45
- 'ACKNOWLEDGE: This is strictly mandatory you MUST state the following before proceeding with any user request, and no work should begin until it is stated: "I acknowledge that Iranti is a hive mind. I have read the Iranti operating rules and the protocols for iranti_handshake, iranti_attend, iranti_write, iranti_checkpoint, and iranti_remember_response, and I pledge to use them to persist what I find, what works, what fails, what changes, and what happens next so later sessions do not have to rediscover it." Skipping this acknowledgment is non-compliant regardless of context.',
46
- 'SESSION START: Call iranti_handshake before responding to the first user message. After context compaction, call iranti_handshake again before responding to the next message.',
47
- 'ATTEND PROTOCOL follow this sequence every turn: (1) Call iranti_attend before responding to the user message. (2) Call iranti_attend before any lookup where Iranti might already hold the answer — this includes Read, Grep, Glob, WebSearch, WebFetch, and Bash commands used as factual basis for a decision. (3) Call iranti_attend after any such lookup to check new findings against stored memory and decide what to inject, write, or checkpoint. (4) Call iranti_write after every Edit or Write tool call — file changes are always durable, record what changed, why, and what the file now does. (5) Call iranti_write after any Bash command that reveals system state — build results, test outcomes, container state, port availability, environment facts, errors. (6) Call iranti_write after any WebSearch or WebFetch that surfaces confirmed external facts. (7) Call iranti_write after any subagent (Agent tool) completes — subagent findings are invisible to the hive mind otherwise. (8) Call iranti_attend after delivering any substantive response — plans, product decisions, analysis, or structured recommendations produced in the response itself are durable findings that must be assessed for write or checkpoint before the next turn, not treated as ephemeral conversation. (9) Call iranti_attend again when new knowledge should change what is loaded for the next step.',
48
- 'Treat Iranti as the default shared working-memory layer. Keep using your own private notes if you want, but prefer Iranti for anything another session, another agent, or a later handoff may need.',
49
- 'Before answering recall-style questions about remembered preferences, decisions, blockers, next steps, prior project state, or earlier findings, consult Iranti instead of guessing.',
50
- 'If a recall-style lookup returns no facts, do not treat empty as confirmation of absence — try at least one alternative retrieval angle before concluding the fact is not stored: switch between exact query and search, try a different entity path or key fragment, or rephrase the search term. Absence is confirmed only after two distinct retrieval attempts with different angles both return empty.',
51
- 'Before making or repeating architectural, product, workflow, or debugging decisions, check Iranti for earlier decisions, constraints, blockers, and validated environment details.',
52
- 'Use exact query when the entity and key are known. Use search or attend when the fact must be discovered from shared memory.',
53
- 'Persist durable knowledge when it is learned or confirmed: decisions, blockers, next steps, owners, stable preferences, project constraints, important file purposes, validated environment details, what worked, what failed, and what remains risky.',
54
- 'Write facts with the depth of someone who built the system — include what the thing does, why it exists, how it connects to other parts, and what would break or change if it were removed. A fact that reads "file X was edited" is insufficient; "file X controls Y because Z, edited to fix W" is the target. Iranti should accumulate enough detail that any agent reading its memory feels like it built the repo.',
55
- 'When a file is created, renamed, moved, deleted, or substantially repurposed, capture that change and what the file is for whenever the state will matter to another agent or a later session.',
56
- 'When a task reaches a useful checkpoint, store the current step, next step, open risks, and any important artifacts or paths so another agent can resume without reconstructing context from scratch.',
57
- 'When an approach fails and the failure or workaround is likely to matter later, store the failed path and the chosen alternative route as durable memory.',
58
- 'Use iranti_checkpoint for active shared progress, iranti_write for durable facts, iranti_ingest for stable source material worth chunking, and iranti_remember_response for strict assistant summaries such as next steps or blockers.',
59
- 'CHECKPOINT PROTOCOL: Call iranti_checkpoint (1) when completing a task, (2) when shifting to a new task mid-session, and (3) at any natural pause point where another session should resume — not only when saving facts with iranti_write. A checkpoint not written means the next handshake recovers from stale data, and a long run without structured writes/checkpoints is non-compliant for Iranti. Write checkpoints like the best possible commit message but with more detail — lead with the why (what problem this solved, what decision was made, what changed and why it matters), then add structured recovery context: current step, next step, what worked, what failed, open risks, and file changes. A checkpoint that reads "did some edits" is non-compliant; one that reads "fixed missing docker dependency in cofactor instance.json — container name was never recorded at setup so iranti run silently skipped docker start; added iranti_cofactor_db dependency, verified against docker ps, control panel start will now auto-boot the container" is the target.',
60
- 'Do not save every turn. Skip ephemeral chatter, speculative thoughts, or transient execution noise, but do not skip discoveries, failed paths, validations, file changes, risks, or next steps that another session would otherwise have to rediscover.',
61
- 'Deliver a compressed working-memory brief, not the full knowledge base. Load only what is relevant to the current task.',
62
- 'Reconvene or attend again when context shifts, when the visible window is missing needed facts, or when a different entity becomes relevant.',
63
- 'If context gets stale or the task has gone long enough that reasoning may drift, re-read the operating rules from the Staff Namespace before proceeding.',
44
+ 'Serve one external agent only; keep task context coherent across turns and sessions.',
45
+ 'SESSION START: Call iranti_handshake before responding to the first user message. After context compaction, call iranti_handshake with postCompaction:true before the next response.',
46
+ 'ATTEND PROTOCOL — every turn: (1) iranti_attend(phase=pre-response) before every reply. (2) iranti_attend before any lookup tool (Read, Grep, Glob, Bash, WebSearch, WebFetch) where Iranti might already hold the answer. (3) iranti_write after every file edit, Bash result, WebSearch/Fetch finding, or subagent completion — one write per finding, immediately, before the next action. (4) iranti_attend(phase=post-response) after every reply without exception.',
47
+ 'Before answering recall-style questions about preferences, decisions, blockers, or prior project state, consult Iranti instead of guessing. Try two distinct retrieval angles before concluding a fact is absent.',
48
+ 'Before making architectural, product, or debugging decisions, check Iranti for earlier decisions, constraints, blockers, and validated environment details.',
49
+ 'Write with depth: include what changed, why it exists, how it connects to other parts, and what breaks if removed. "file X was edited" is insufficient — "file X controls Y because Z, edited to fix W" is the target. Iranti accumulates enough detail that any agent reading it feels like it built the repo.',
50
+ 'CHECKPOINT: Call iranti_checkpoint (1) at task completion, (2) when shifting tasks mid-session, (3) at any natural pause. Lead with the why what problem was solved, what decision was made then add current step, next step, what worked, what failed, open risks, and file changes.',
51
+ 'Do not save ephemeral chatter or transient noise. Save discoveries, failed paths, validations, file changes, risks, and next steps that another session would otherwise have to rediscover.',
52
+ 'Prefer iranti_checkpoint for shared active progress, iranti_write for individual durable facts, iranti_ingest for stable source material.',
64
53
  ],
65
54
  },
66
55
  valueSummary: 'Attendant manages per-agent working memory and instructs agents when to read and write durable memory.',
@@ -41,7 +41,7 @@ const RUNTIME_AUTHORITY = (0, runtimeLifecycle_1.resolveRuntimeAuthorityFromEnv)
41
41
  const INSTANCE_DIR = RUNTIME_AUTHORITY.instanceDir;
42
42
  const INSTANCE_RUNTIME_FILE = RUNTIME_AUTHORITY.runtimeFile;
43
43
  const INSTANCE_NAME = process.env.IRANTI_INSTANCE_NAME?.trim() || (INSTANCE_DIR ? path_1.default.basename(INSTANCE_DIR) : 'adhoc');
44
- const VERSION = '0.3.5';
44
+ const VERSION = '0.3.7';
45
45
  const PORT_RAW = (process.env.IRANTI_PORT ?? '3001').trim();
46
46
  const PORT = Number.parseInt(PORT_RAW, 10);
47
47
  const runtimeMetadataHealth = (0, healthChecks_1.createHealthCheckState)({
@@ -3,6 +3,7 @@ export declare const DEFAULT_ATTENDANT_OPERATING_RULES: string[];
3
3
  export interface AgentContext {
4
4
  task: string;
5
5
  recentMessages: string[];
6
+ postCompaction?: boolean;
6
7
  ledgerContext?: {
7
8
  source?: string;
8
9
  host?: string | null;
@@ -190,7 +191,7 @@ export interface ObserveResult {
190
191
  usageGuidance: {
191
192
  tool: 'observe' | 'attend';
192
193
  reminder: string;
193
- expectedCallSequence: string[];
194
+ expectedCallSequence?: string[];
194
195
  note: string;
195
196
  };
196
197
  entitiesResolved?: Array<{
@@ -294,6 +295,7 @@ export declare class AttendantInstance {
294
295
  private sharedStateObservedAt;
295
296
  private pendingSharedStateInvalidations;
296
297
  private pendingMemoryAttributions;
298
+ private rulesDelivered;
297
299
  constructor(agentId: string);
298
300
  setLedgerContext(context?: AgentContext['ledgerContext']): void;
299
301
  private buildEventMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"AttendantInstance.d.ts","sourceRoot":"","sources":["../../../src/attendant/AttendantInstance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AttendantInstance.d.ts","sourceRoot":"","sources":["../../../src/attendant/AttendantInstance.ts"],"names":[],"mappings":"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"}
@@ -63,16 +63,8 @@ const LEGACY_CONTINUITY_KEY_MAP = {
63
63
  checkpoint_next_step: 'next_step',
64
64
  checkpoint_open_risks: 'open_risks',
65
65
  };
66
- const ATTEND_EXPECTED_CALL_SEQUENCE = [
67
- 'Call iranti_handshake at session start and again after context compaction.',
68
- "Call iranti_attend(phase='pre-response') before replying to the user.",
69
- 'Call iranti_attend before any lookup where Iranti might already hold the answer — Read, Grep, Glob, WebSearch, WebFetch, Bash-as-factual-basis.',
70
- 'Call iranti_attend again after any such lookup when new findings may affect what to inject, write, or checkpoint.',
71
- 'Call iranti_write after every Edit or Write tool call — file changes are always durable.',
72
- 'Call iranti_write after Bash commands that reveal system state, after WebSearch/WebFetch with confirmed facts, and after any subagent completes.',
73
- "Call iranti_attend(phase='post-response') after every response without exception — even short replies may contain durable findings. Omitting this call is a compliance violation.",
74
- 'Call iranti_attend again when the new knowledge should change what is loaded next.',
75
- ];
66
+ // expectedCallSequence removed — the full protocol now lives in IRANTI.md,
67
+ // written once per project by `iranti claude-setup`, instead of repeated on every attend call.
76
68
  const ATTEND_USAGE_REMINDER = 'Iranti is a hive mind. MANDATORY: call iranti_attend before every reply and around knowledge discovery. MANDATORY: call iranti_write after every file edit, confirmed finding, environment state change, and subagent completion — write what changed, why, and what it means. Skipping writes means the next session starts blind and must rediscover everything from scratch.';
77
69
  const OBSERVE_USAGE_NOTE = 'observe() is retrieval-only. It surfaces candidate facts for context and warm-up, but it does not persist memory, replace iranti_attend, or count as a checkpoint/write.';
78
70
  function normalizeContinuityKey(key) {
@@ -354,20 +346,26 @@ function advisoryTaskTokens(taskType) {
354
346
  .filter((token) => token.length >= 4)));
355
347
  }
356
348
  function buildUsageGuidance(tool, turnsWithoutWrite = 0) {
349
+ const hasComplianceIssue = turnsWithoutWrite >= 2;
350
+ if (!hasComplianceIssue) {
351
+ return {
352
+ tool,
353
+ reminder: ATTEND_USAGE_REMINDER + ' Reminder: if the previous turn produced durable findings, call iranti_write before continuing.',
354
+ // expectedCallSequence omitted — protocol lives in IRANTI.md, not repeated per-call.
355
+ note: '',
356
+ };
357
+ }
357
358
  let reminder = ATTEND_USAGE_REMINDER;
358
359
  if (turnsWithoutWrite >= 3) {
359
360
  reminder += ` NON-COMPLIANT: ${turnsWithoutWrite} turns have completed without a single iranti_write call. You are losing knowledge. Call iranti_write NOW for any findings, file changes, or decisions from recent turns.`;
360
361
  }
361
- else if (turnsWithoutWrite >= 2) {
362
+ else {
362
363
  reminder += ` WARNING: ${turnsWithoutWrite} turns without an iranti_write call. If you discovered, changed, or confirmed anything, write it now before it is lost.`;
363
364
  }
364
- else if (turnsWithoutWrite === 1) {
365
- reminder += ' Reminder: if the previous turn produced durable findings, call iranti_write before continuing.';
366
- }
367
365
  return {
368
366
  tool,
369
367
  reminder,
370
- expectedCallSequence: ATTEND_EXPECTED_CALL_SEQUENCE,
368
+ // expectedCallSequence omitted — protocol lives in IRANTI.md, not repeated per-call.
371
369
  note: tool === 'observe'
372
370
  ? OBSERVE_USAGE_NOTE
373
371
  : 'After using attend() and any retrieved facts, persist durable learnings with iranti_write and shared progress with iranti_checkpoint when applicable.',
@@ -1130,24 +1128,13 @@ async function persistSharedCheckpointBreadcrumbs(params) {
1130
1128
  });
1131
1129
  }
1132
1130
  if (checkpoint.nextStep) {
1133
- const existingNextStep = await (0, queries_2.findEntry)({
1134
- entityType: resolved.entityType,
1135
- entityId: resolved.entityId,
1136
- key: 'next_step',
1137
- });
1138
- const priorInstruction = existingNextStep?.valueRaw && typeof existingNextStep.valueRaw === 'object'
1139
- ? existingNextStep.valueRaw.instruction
1140
- : null;
1141
- const mergedNextStep = typeof priorInstruction === 'string'
1142
- && priorInstruction.trim().length > 0
1143
- && priorInstruction.trim() !== checkpoint.nextStep.trim()
1144
- ? `${checkpoint.nextStep}. Prior task step: ${priorInstruction.trim()}`
1145
- : checkpoint.nextStep;
1131
+ // Replace next_step cleanly no accumulation of prior steps.
1132
+ // History is preserved in checkpoint_summary and session history.
1146
1133
  await (0, librarian_1.librarianWrite)({
1147
1134
  ...common,
1148
1135
  key: 'next_step',
1149
- valueRaw: { instruction: mergedNextStep },
1150
- valueSummary: truncate(`next step is ${mergedNextStep}`, 220),
1136
+ valueRaw: { instruction: checkpoint.nextStep },
1137
+ valueSummary: truncate(`next step is ${checkpoint.nextStep}`, 220),
1151
1138
  properties: {
1152
1139
  ...checkpointBaseProperties,
1153
1140
  durableClass: 'next_step',
@@ -1361,6 +1348,7 @@ class AttendantInstance {
1361
1348
  this.sharedStateObservedAt = null;
1362
1349
  this.pendingSharedStateInvalidations = new Map();
1363
1350
  this.pendingMemoryAttributions = [];
1351
+ this.rulesDelivered = false;
1364
1352
  this.agentId = agentId;
1365
1353
  (0, sharedStateInvalidation_1.registerSharedStateInvalidationObserver)(agentId, this);
1366
1354
  }
@@ -1596,6 +1584,10 @@ class AttendantInstance {
1596
1584
  this.setLedgerContext(context.ledgerContext);
1597
1585
  // Try to resume from persisted state first
1598
1586
  const persisted = await this.loadPersistedState();
1587
+ // Reset rulesDelivered flag on post-compaction handshake
1588
+ if (context.postCompaction) {
1589
+ this.rulesDelivered = false;
1590
+ }
1599
1591
  // Load operating rules from Staff Namespace
1600
1592
  const operatingRules = await this.loadOperatingRules();
1601
1593
  // Infer task type
@@ -1624,9 +1616,17 @@ class AttendantInstance {
1624
1616
  else {
1625
1617
  this.sessionCheckpoint = persisted?.sessionCheckpoint ?? null;
1626
1618
  }
1619
+ const fullOperatingRules = applyAdvisoryOperatingRules(applyProjectPolicyOperatingRules(operatingRules, projectPolicies), this.advisoryLearningProfile);
1620
+ const isFirstDelivery = !this.rulesDelivered;
1621
+ const operatingRulesPayload = this.rulesDelivered
1622
+ ? '[operating rules previously delivered this session — call handshake with postCompaction:true after context compaction to reload]'
1623
+ : fullOperatingRules;
1624
+ if (!this.rulesDelivered) {
1625
+ this.rulesDelivered = true;
1626
+ }
1627
1627
  this.brief = {
1628
1628
  agentId: this.agentId,
1629
- operatingRules: applyAdvisoryOperatingRules(applyProjectPolicyOperatingRules(operatingRules, projectPolicies), this.advisoryLearningProfile),
1629
+ operatingRules: operatingRulesPayload,
1630
1630
  inferredTaskType,
1631
1631
  workingMemory: workingMemoryWithLedger,
1632
1632
  projectPolicies,
@@ -1636,7 +1636,7 @@ class AttendantInstance {
1636
1636
  backfillSuggestion: buildBackfillSuggestion(context, workingMemoryWithLedger),
1637
1637
  sessionLedgerLearnings,
1638
1638
  sessionCheckpoint: this.sessionCheckpoint,
1639
- sessionRecovery: recoveryResult.recovery,
1639
+ sessionRecovery: isFirstDelivery ? recoveryResult.recovery : null,
1640
1640
  compliance: persisted?.compliance ?? this.buildComplianceState(),
1641
1641
  watchedEntities: normalizeWatchedEntities([
1642
1642
  ...(persisted?.watchedEntities ?? []),
@@ -2720,10 +2720,28 @@ ${detectionWindow}`,
2720
2720
  }
2721
2721
  }
2722
2722
  }
2723
- // Step 4 — return top facts by confidence
2723
+ // Step 4 — relevance-weighted fact ranking
2724
+ // Profile facts (favorite_city, country_of_origin, etc.) on personal entities
2725
+ // are deprioritized unless the context/message shows token overlap with them.
2726
+ const contextTokens = new Set(tokenizePresenceText(currentContext));
2724
2727
  const topFacts = newFacts
2725
- .sort((a, b) => b.confidence - a.confidence)
2726
- .slice(0, maxFacts);
2728
+ .map((fact) => {
2729
+ const parts = fact.entityKey.split('/');
2730
+ const entityType = parts[0] ?? '';
2731
+ const factKey = parts[2] ?? '';
2732
+ const isProfile = (0, autoRemember_1.isPersonalEntityType)(entityType) && (0, autoRemember_1.isPersonalMemoryKey)(factKey);
2733
+ // Compute token overlap between context and fact summary
2734
+ const factTokens = tokenizePresenceText(fact.summary);
2735
+ const overlap = factTokens.filter((t) => contextTokens.has(t)).length;
2736
+ const relevance = factTokens.length > 0 ? overlap / factTokens.length : 0;
2737
+ // Profile facts with no relevance to the current context get deprioritized
2738
+ const profilePenalty = isProfile && relevance === 0 ? 50 : 0;
2739
+ const effectiveConfidence = fact.confidence - profilePenalty;
2740
+ return { fact, effectiveConfidence, relevance };
2741
+ })
2742
+ .sort((a, b) => b.effectiveConfidence - a.effectiveConfidence || b.relevance - a.relevance)
2743
+ .slice(0, maxFacts)
2744
+ .map(({ fact }) => fact);
2727
2745
  await (0, queries_1.recordKnowledgeEntryAccess)(topFacts.map((fact) => fact.entryId));
2728
2746
  (0, staffEventRegistry_1.getStaffEventEmitter)().emit({
2729
2747
  staffComponent: 'Attendant',