Akashik Protocol
Concepts

Conflicts

How the Akashik Protocol models, detects, and resolves contradictions between agents.

Conflicts are expected

In multi-agent systems, contradictions are not bugs. Two agents with different data, different perspectives, or different priors will produce conflicting findings. The question is not how to prevent this, but how to detect, represent, and resolve it explicitly rather than silently discarding one version.

Akashik treats conflicts as first-class protocol entities. When a contradiction is detected, the Field creates a Conflict object, assigns it a status, and surfaces it in every ATTUNE response relevant to the affected topic. No agent ever receives context silently contaminated by a dispute.

Conflict types

TypeDescription
factualTwo units assert different objective facts about the same subject
interpretiveTwo units interpret the same evidence differently
strategicTwo units recommend incompatible courses of action
priorityTwo units assign different urgency or importance to the same topic

Detection

Conflicts are detected in two ways:

Explicit — An agent records a unit with a contradicts relation pointing to an existing unit. The Field creates a Conflict object immediately.

await researcher2.record({
  type: 'finding',
  content: 'Growth decelerating to 14% CAGR.',
  intent: { purpose: 'Update market projection with new data' },
  confidence: { score: 0.75, reasoning: 'Single preliminary source.' },
  relations: [{
    type: 'contradicts',
    target_id: 'mem-001',
    description: 'Original estimate was 23% CAGR; new data suggests 14%'
  }]
})

Automatic (Level 2+) — The Field scans for semantic, logical, or temporal contradictions during RECORD without requiring an explicit contradicts relation. Sensitivity is controlled by detection_sensitivity in the Field config. Level 1 only supports explicit detection via contradicts relations.

The conflict lifecycle

StatusMeaning
detectedConflict identified, not yet resolved
resolvingResolution in progress
resolvedResolution applied
escalatedRequires human intervention

DETECT operation

At any time, an agent can query the Field for conflicts:

// List all unresolved conflicts
const result = await analyst.detect({ mode: 'list' })
console.log(result.conflicts) // → [{ id, type, status, units, ... }]

// Check whether a specific unit is involved in any conflict
const check = await analyst.detect({
  mode: 'check',
  memory_unit_ids: ['mem-001']
})

// Trigger a full scan of the Field (Level 2+)
await field.detect({ mode: 'scan', scan_scope: 'full' })

Resolution strategies

When a conflict is detected, an agent (or orchestrator) applies a resolution via the MERGE operation:

StrategyRequired levelDescription
last_write_wins2Most recent memory unit prevails
confidence_weighted2Higher confidence score prevails
authority3Specified agent/role has final say
evidence_count3Unit with more supporting evidence prevails
synthesis3Create a new unit reconciling both
human_escalation2Flag for human review
vote3Multiple agents vote (requires quorum)
await orchestrator.merge({
  conflict_id: 'conflict-001',
  strategy: 'confidence_weighted',
  resolution: {
    rationale: 'Researcher2 has four supporting sources vs one.',
    winner_id: 'mem-002'
  }
})

Conflicts in ATTUNE

Every ATTUNE response includes a conflicts array listing unresolved conflicts relevant to the requesting agent's scope. This ensures agents can condition their reasoning on whether disputed claims are in their context:

const context = await strategist.attune({
  scope: { role: 'strategist', max_units: 10 }
})

if (context.conflicts.length > 0) {
  console.log('Unresolved disputes in context:', context.conflicts)
}

Next