{
  "schema": "fak-agent-customization-index/1",
  "updated_at": "2026-08-17",
  "scope": "User-controlled agent behavior, execution, trajectory interpretation, and trajectory presentation.",
  "maintenance": {
    "review_interval_days": 30,
    "dedupe_key": "axis_id",
    "source_identity": "repository@checked_revision or canonical documentation URL@observed_at",
    "required_refresh_fields": [
      "updated_at",
      "sources[].observed_at",
      "sources[].checked_revision",
      "axes[].evidence"
    ],
    "status_values": [
      "present",
      "partial",
      "absent"
    ],
    "disposition_values": [
      "default",
      "optional-module",
      "recipe",
      "watch",
      "exclude"
    ]
  },
  "layers": [
    {
      "id": "authoring",
      "question": "What agent is being assembled?"
    },
    {
      "id": "execution",
      "question": "How may that agent act at runtime?"
    },
    {
      "id": "interpretation",
      "question": "How is the recorded trajectory understood?"
    },
    {
      "id": "presentation",
      "question": "What derived view is shown to a particular audience?"
    }
  ],
  "sources": [
    {
      "id": "claude-code",
      "kind": "repository",
      "url": "https://github.com/anthropics/claude-code",
      "checked_revision": "ae58f7a0a23f0fddedd668de74622ff46646526b",
      "observed_at": "2026-08-17",
      "license": "proprietary-distribution",
      "evidence": [
        "settings",
        "hooks",
        "subagents",
        "memory",
        "permissions",
        "terminal presentation"
      ]
    },
    {
      "id": "openai-codex",
      "kind": "repository",
      "url": "https://github.com/openai/codex",
      "checked_revision": "32a383c0ba5ed42a1adc3f2084014895bfe7738c",
      "observed_at": "2026-08-17",
      "license": "Apache-2.0",
      "evidence": [
        "config",
        "model and reasoning",
        "approval and sandbox",
        "notifications",
        "TUI",
        "session history"
      ]
    },
    {
      "id": "cursor",
      "kind": "documentation",
      "url": "https://docs.cursor.com/context/rules",
      "checked_revision": null,
      "observed_at": "2026-08-17",
      "license": "documentation-only",
      "evidence": [
        "rules",
        "hooks",
        "agent tools"
      ]
    },
    {
      "id": "openhands",
      "kind": "repository",
      "url": "https://github.com/OpenHands/OpenHands",
      "checked_revision": "6670b4726a81fc73e797a193dae86264857a663d",
      "observed_at": "2026-08-17",
      "license": "MIT",
      "evidence": [
        "agent configuration",
        "runtime",
        "conversation events",
        "frontend event rendering"
      ]
    },
    {
      "id": "langgraph",
      "kind": "repository",
      "url": "https://github.com/langchain-ai/langgraph",
      "checked_revision": "644815f9e5bc52ad8f7a5227a456227e9c3e639b",
      "observed_at": "2026-08-17",
      "license": "MIT",
      "evidence": [
        "stream modes",
        "state",
        "checkpoints",
        "interrupts",
        "custom events"
      ]
    },
    {
      "id": "ag-ui",
      "kind": "repository",
      "url": "https://github.com/ag-ui-protocol/ag-ui",
      "checked_revision": "f6a4cd76d7d0af31abe7cd670dd832dc4b267ccc",
      "observed_at": "2026-08-17",
      "license": "MIT",
      "evidence": [
        "typed event protocol",
        "messages",
        "tool calls",
        "state snapshots and deltas",
        "activity events"
      ]
    },
    {
      "id": "goose",
      "kind": "repository",
      "url": "https://github.com/aaif-goose/goose",
      "checked_revision": "92c0fe902addb77178352111d2e533fd158444a6",
      "observed_at": "2026-08-17",
      "license": "Apache-2.0",
      "evidence": [
        "recipes",
        "extensions",
        "permissions",
        "provider configuration",
        "session UI"
      ]
    },
    {
      "id": "opencode",
      "kind": "repository",
      "url": "https://github.com/anomalyco/opencode",
      "checked_revision": "2cba7e227d68a7e7e4a2aa9c85b808e8ecb14daf",
      "observed_at": "2026-08-17",
      "license": "MIT",
      "evidence": [
        "agents",
        "commands",
        "permissions",
        "providers",
        "keybinds",
        "themes",
        "TUI"
      ]
    },
    {
      "id": "copilot-cli",
      "kind": "repository",
      "url": "https://github.com/github/copilot-cli",
      "checked_revision": "3f9c5e1ce792150a852804132e2b08c58e9a8e95",
      "observed_at": "2026-08-17",
      "license": "NOASSERTION",
      "evidence": [
        "custom agents",
        "skills",
        "hooks",
        "MCP",
        "terminal interaction"
      ]
    }
  ],
  "axes": [
    {
      "axis_id": "instructions.identity",
      "layer": "authoring",
      "user_need": "Define role, goals, tone, standing instructions, and repository rules.",
      "examples": [
        "system instructions",
        "project rules",
        "personal instructions",
        "custom agent prompt"
      ],
      "evidence": [
        "claude-code",
        "openai-codex",
        "cursor",
        "opencode",
        "copilot-cli"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "models.routing",
      "layer": "authoring",
      "user_need": "Choose provider, model, reasoning effort, fallback, and task-specific routes.",
      "examples": [
        "model aliases",
        "provider endpoints",
        "reasoning budget",
        "route by tool or task"
      ],
      "evidence": [
        "openai-codex",
        "goose",
        "opencode"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "tools.extensions",
      "layer": "authoring",
      "user_need": "Add, remove, describe, namespace, or replace tools and MCP servers.",
      "examples": [
        "MCP",
        "extensions",
        "tool allowlists",
        "tool descriptions"
      ],
      "evidence": [
        "claude-code",
        "cursor",
        "goose",
        "opencode",
        "copilot-cli"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "skills.workflows",
      "layer": "authoring",
      "user_need": "Package repeatable procedures, commands, recipes, and reusable domain expertise.",
      "examples": [
        "skills",
        "slash commands",
        "recipes",
        "workflow assets"
      ],
      "evidence": [
        "claude-code",
        "goose",
        "opencode",
        "copilot-cli"
      ],
      "fak_status": "present",
      "disposition": "optional-module"
    },
    {
      "axis_id": "memory.context",
      "layer": "authoring",
      "user_need": "Control durable memory, context sources, retrieval boundaries, and compaction.",
      "examples": [
        "user memory",
        "project memory",
        "context rules",
        "checkpointed state"
      ],
      "evidence": [
        "claude-code",
        "cursor",
        "langgraph"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "agents.delegation",
      "layer": "authoring",
      "user_need": "Define specialist agents, handoffs, delegation policy, and concurrency.",
      "examples": [
        "subagents",
        "custom agents",
        "agent graphs",
        "worker roles"
      ],
      "evidence": [
        "claude-code",
        "openhands",
        "langgraph",
        "opencode",
        "copilot-cli"
      ],
      "fak_status": "present",
      "disposition": "optional-module"
    },
    {
      "axis_id": "runtime.environment",
      "layer": "execution",
      "user_need": "Select runtime, workspace, shell, environment variables, credentials, and compute.",
      "examples": [
        "container runtime",
        "remote sandbox",
        "working directory",
        "secret references"
      ],
      "evidence": [
        "openhands",
        "openai-codex",
        "goose"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "authority.permissions",
      "layer": "execution",
      "user_need": "Set sandbox boundaries, approvals, capabilities, network access, and deny rules.",
      "examples": [
        "approval policy",
        "tool permissions",
        "filesystem sandbox",
        "policy manifests"
      ],
      "evidence": [
        "claude-code",
        "openai-codex",
        "goose",
        "opencode"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "lifecycle.hooks",
      "layer": "execution",
      "user_need": "Run policy or automation at stable lifecycle boundaries.",
      "examples": [
        "pre-tool hook",
        "stop hook",
        "session hook",
        "command hook"
      ],
      "evidence": [
        "claude-code",
        "cursor",
        "copilot-cli"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "session.persistence",
      "layer": "execution",
      "user_need": "Resume, fork, checkpoint, share, or export a session without losing provenance.",
      "examples": [
        "history",
        "resume",
        "checkpoint",
        "chat export"
      ],
      "evidence": [
        "openai-codex",
        "langgraph",
        "ag-ui"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "economy.performance",
      "layer": "execution",
      "user_need": "Control budgets, caching, compaction, latency, and spend tradeoffs.",
      "examples": [
        "token budget",
        "prompt cache",
        "context shedding",
        "model escalation"
      ],
      "evidence": [
        "openai-codex",
        "langgraph"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "privacy.telemetry",
      "layer": "execution",
      "user_need": "Choose what is logged, retained, redacted, exported, or sent as telemetry.",
      "examples": [
        "history persistence",
        "analytics opt-out",
        "secret redaction",
        "retention"
      ],
      "evidence": [
        "openai-codex",
        "openhands",
        "internal/privacy",
        "internal/gateway/otlp_export.go"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "parse.source-adapters",
      "layer": "interpretation",
      "user_need": "Ingest heterogeneous transcripts without pretending their events mean the same thing.",
      "examples": [
        "Codex JSONL",
        "Claude JSONL",
        "OpenAI chat export",
        "AG-UI events"
      ],
      "evidence": [
        "openai-codex",
        "claude-code",
        "ag-ui"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "parse.semantic-events",
      "layer": "interpretation",
      "user_need": "Normalize messages, tool calls, approvals, state changes, errors, and lifecycle boundaries into typed events.",
      "examples": [
        "message delta",
        "tool call start/end",
        "state delta",
        "interrupt",
        "run boundary"
      ],
      "evidence": [
        "ag-ui",
        "langgraph",
        "openhands"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "parse.derived-signals",
      "layer": "interpretation",
      "user_need": "Derive goals, phases, stalls, retries, causal links, costs, and outcomes while retaining confidence and provenance.",
      "examples": [
        "phase segmentation",
        "retry cluster",
        "decision",
        "artifact",
        "goal progress"
      ],
      "evidence": [
        "langgraph",
        "ag-ui"
      ],
      "fak_status": "present",
      "disposition": "optional-module"
    },
    {
      "axis_id": "parse.redaction",
      "layer": "interpretation",
      "user_need": "Apply audience-aware redaction before projection without destroying the canonical evidence chain.",
      "examples": [
        "secret masking",
        "private reasoning suppression",
        "path anonymization",
        "PII policy"
      ],
      "evidence": [
        "ag-ui",
        "openhands"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "view.audience",
      "layer": "presentation",
      "user_need": "Choose a view for operator, developer, auditor, manager, or end user from the same trajectory.",
      "examples": [
        "operator console",
        "debug trace",
        "audit log",
        "customer summary"
      ],
      "evidence": [
        "ag-ui",
        "openhands",
        "opencode"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "view.selection",
      "layer": "presentation",
      "user_need": "Filter, group, collapse, search, and progressively disclose events without rewriting history.",
      "examples": [
        "hide successful reads",
        "group retries",
        "collapse tool output",
        "search by artifact"
      ],
      "evidence": [
        "ag-ui",
        "langgraph",
        "opencode"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "view.visual-language",
      "layer": "presentation",
      "user_need": "Customize theme, density, layout, keybindings, accessibility, and notification channels.",
      "examples": [
        "theme",
        "compact mode",
        "keybinds",
        "desktop notification",
        "screen-reader labels"
      ],
      "evidence": [
        "openai-codex",
        "opencode",
        "claude-code"
      ],
      "fak_status": "present",
      "disposition": "optional-module"
    },
    {
      "axis_id": "view.live-control",
      "layer": "presentation",
      "user_need": "Intervene from a view by approving, steering, pausing, retrying, or branching with the action recorded back into the trajectory.",
      "examples": [
        "approval card",
        "interrupt",
        "edit-and-retry",
        "fork from checkpoint"
      ],
      "evidence": [
        "langgraph",
        "ag-ui",
        "openhands"
      ],
      "fak_status": "present",
      "disposition": "default"
    },
    {
      "axis_id": "view.sharing",
      "layer": "presentation",
      "user_need": "Export a stable, redacted, linkable rendering with source and transform provenance.",
      "examples": [
        "share link",
        "Markdown report",
        "JSON export",
        "incident attachment"
      ],
      "evidence": [
        "ag-ui",
        "openai-codex"
      ],
      "fak_status": "present",
      "disposition": "recipe"
    }
  ]
}
