Skip to main content
The rule set is the contract between you and your agent. It lists, per surface (mapping jobs, unmatched results, mismatch reports, coverage, data sources/sinks, exports, bulk updates, notifications), what the agent is allowed to do autonomously. Tool calls against a disabled rule return error: "rule_disabled" to the LLM, which then adapts — typically by filing a pending item or summarising differently.

Orchestration + triage, not confidence judgement

Agents in v1 are an orchestration and triage layer, not a per-row confidence-judgement layer. Confidence-threshold rules (e.g. “auto-approve any match above 0.95 confidence”) are not supported in v1. The PartnerMappingResult.matchConfidence field is nullable in production and is not relied upon by the rule engine.
What this means in practice:
  • The agent proposes matches for unmatched rows. A human approves.
  • The agent drafts proposed resolutions for mismatch reports. A human marks FIXED / REJECTED.
  • The agent never auto-links a result to a reference hotel.
  • The agent never auto-marks a mismatch as fixed or rejected.
Confidence-based auto-approval is on the roadmap but explicitly excluded from v1. See the overview roadmap section.

Rule set JSON shape

{
  "mapping_jobs": {
    "trigger_on_new_inventory_upload": true,
    "trigger_on_cron": false,
    "re_run_on_golden_dataset_change": false
  },
  "unmatched_results": {
    "propose_candidates_for_review": true,
    "max_candidates_per_row": 3,
    "search_strategies": ["geo", "name"]
  },
  "mismatch_reports": {
    "auto_transition_open_to_in_progress": false,
    "group_similar": true,
    "post_proposed_resolution": true
  },
  "coverage": {
    "alert_below_pct": 95,
    "weekly_digest": true
  },
  "data_sources": {
    "auto_pull_on_schedule": true,
    "pause_source_after_failures": 3
  },
  "data_sinks": {
    "auto_push_on_job_complete": false,
    "retry_failed_push": 2
  },
  "mode_preference": { "allow_auto_change": false },
  "export":          { "allow_auto_export": false },
  "bulk_update":     { "allow_auto_bulk_update": false },
  "notifications": {
    "on_action": true,
    "on_escalation": true,
    "on_pause": true,
    "on_cost_threshold_pct": 80
  }
}

What the agent can vs cannot do (v1)

SurfaceAgent CANAgent CANNOT
MappingJobTrigger on upload + cron, poll, summariseCancel a running job (deferred)
PartnerMappingResult (unmatched)Search candidates, file proposed matches as pendingAuto-link a result
PartnerMappingResult (matched)Read, count, reportModify or unlink
MismatchReportOPEN → IN_PROGRESS (rule-gated, default off), group, post proposed resolutionAuto-mark FIXED or REJECTED
ReferenceHotelDuplicateReportRead + summariseAnything mutating (cross-tenant golden data)
Coverage statisticsCompute, alert, weekly digest
mapping_mode_preferenceReadChange (rule-gated, default off)
ExportsReadAuto-export (rule-gated, default off)
Bulk partner updatesNothingNothing
Data sources (inbound)Auto-pull (default on once configured)Pull from unconfigured sources
Data sinks (outbound)Auto-push (rule-gated, default off)Push to unconfigured sinks
Memory + pending itemsRead/write its own

Versioning

Every rule-set save creates a new row with version = max(version) + 1 and a supersedes_id pointing to the previous version. Every AgentRun records the version it executed under. The UI shows “this action was taken under rule set v3” alongside historic runs.

Editing rules

Go to Agents → [your agent] → Settings → Rules. Toggle the rule, click Save. Active cycles finish under the old rule set; the next cycle picks up the new one.