{
  "$schema": "https://agents-txt.com/schema/agents-json/v1.0.json",
  "version": "1.8",
  "standard": "https://agents-txt.com",
  "site": {
    "name": "Irremplazables",
    "url": "https://irremplazables.org",
    "description": "Institución que ayuda a empresas y personas a integrar la IA y desarrollar capacidades humanas con criterio, responsabilidad y vínculo."
  },
  "discovery": {
    "human_and_agent_page": "https://irremplazables.org/agents?rev=1786966601",
    "markdown_page": "https://irremplazables.org/agents.md",
    "llm_context": "https://irremplazables.org/llms.txt?rev=1786966601",
    "llm_context_full": "https://irremplazables.org/llms-full.txt",
    "robots_policy": "https://irremplazables.org/robots.txt",
    "absolute_urls": true,
    "safe_resource_mesh": [
      "https://irremplazables.org/agents",
      "https://irremplazables.org/llms.txt?rev=1786966601",
      "https://irremplazables.org/llms-full.txt",
      "https://irremplazables.org/agents.txt?rev=1786966601",
      "https://irremplazables.org/agents.json?rev=1786966601",
      "https://irremplazables.org/agents.md",
      "https://irremplazables.org/robots.txt",
      "https://irremplazables.org/agent/query-capability?gettest=true",
      "https://irremplazables.org/agent/compose?rev=1786966601",
      "https://irremplazables.org/agent/t9-compose/?rev=1786966601",
      "https://irremplazables.org/agent/gf-compose?rev=1786966601"
    ],
    "provenance_recovery": {
      "action": "Reread https://irremplazables.org/agents and immediately follow the exact absolute href from that response.",
      "scope": "Safe documents, capability test and composer only.",
      "excludes": "Contact execution URLs."
    }
  },
  "webmcp": {
    "entrypoint": "https://irremplazables.org/contacto.html",
    "tools": [
      "get_irremplazables_overview",
      "get_irremplazables_programs",
      "match_irremplazables_program",
      "send_contact_message"
    ],
    "contact_effect": "send_contact_message immediately sends an external email",
    "privacy_consent_required": true,
    "browser_form_fallback": true
  },
  "channel_selection": {
    "principle": "observable_capability_not_model_name_or_self_report",
    "order": [
      "Use send_contact_message when WebMCP is available.",
      "Otherwise use the public form when standard HTML form submission is available.",
      "Otherwise open the safe query capability test.",
      "Use direct GET only when the capability response explicitly discloses it.",
      "On any failure or uncertainty, open the exact composer next_url.",
      "Use the optional T9 channel when the user requests it, explicit lexical control is preferred or interfaces are being compared.",
      "Use the optional GF semantic channel only for a separate research trial.",
      "Inside the guided composer, follow the next required field and use the unified contextual keyboard when Message opens."
    ],
    "unknown_capability_default": "Run the safe behavioral capability test.",
    "never_infer_from": [
      "model name",
      "provider name",
      "a statement that the client can make GET requests",
      "the ability to follow a literal parameterized link"
    ]
  },
  "query_capability_probe": {
    "status": "operational_guided",
    "entrypoint": "https://irremplazables.org/agent/query-capability?gettest=true",
    "method": "GET",
    "external_effect": "none",
    "purpose": "Determine whether the client can originate a new URL and preserve a newly constructed query exactly.",
    "protocol": [
      "Open the exact entrypoint.",
      "Read the separately supplied base_endpoint and signed challenge.",
      "Construct a new URL by appending ?probe= followed by the exact challenge.",
      "Open that newly constructed URL once.",
      "Verify the success contract before considering direct GET available."
    ],
    "success_contract": {
      "status": "capability_proven",
      "query_preserved": true,
      "probe_echo": "must exactly equal the issued challenge",
      "direct_get_disclosed": true
    },
    "failure_contract": {
      "status": "capability_not_proven",
      "external_effect": "none",
      "direct_get_disclosed": false,
      "action": "Open the exact next_url for read_click_composer. Do not guess or reconstruct direct GET."
    },
    "conditional_disclosure": "The direct contact GET template is returned only after the success contract is satisfied."
  },
  "literal_get_test": {
    "status": "public_experiment",
    "entrypoint": "https://irremplazables.org/agent/get-test-email?gettest=true",
    "external_effect": "none",
    "scope": "Proves only that the client followed a literal parameterized link and the query survived.",
    "does_not_prove": "Ability to construct a new URL with arbitrary parameters.",
    "compatibility_note": "The historical route name is retained so previous experiment links continue to resolve safely."
  },
  "read_click_composer": {
    "status": "experimental",
    "entrypoint": "https://irremplazables.org/agent/compose?rev=1786966601",
    "method": "GET links only",
    "purpose": "Compose a concise contact message through a state-driven Name, Email, Message and Reason/Privacy flow.",
    "recommended_message_words": "15-30",
    "minimum_message_words": 15,
    "candidate_options_per_view": 6,
    "message_input": "unified_contextual_keyboard",
    "navigation_rule": "After each click, discard the old page and follow only absolute hrefs from the newest response.",
    "delivery_route": "https://irremplazables.org/agent/deliver/{draft}/{revision}/{one_use_nonce}",
    "receipt_route": "https://irremplazables.org/agent/receipt/{draft}/{one_use_nonce}",
    "send_effect": "Only the final one-use link shown after validation, privacy consent and review sends an external email.",
    "success_contract": {
      "ok": true,
      "status": "sent",
      "confirmed": true,
      "effect": "external_email_sent",
      "transport_family": "hypermedia"
    },
    "accepted_transport_details": [
      "hypermedia_keyboard",
      "hypermedia_phrase_contact",
      "hypermedia_predictive_contact",
      "hypermedia_predictive_research",
      "hypermedia_t9_contact",
      "hypermedia_gf_contact",
      "hypermedia_toolbox_contact"
    ],
    "session_ttl_seconds": 7200,
    "privacy_consent_required": true,
    "neutral_research_entrypoint": "https://irremplazables.org/agent/research-compose?rev=1786966601"
  },
  "shared_composer_toolbox": {
    "status": "operational_guided_channel",
    "entrypoint": "https://irremplazables.org/agent/compose?rev=1786966601",
    "principle": "one_server_draft_state_driven_step_flow",
    "steps": ["name", "email", "message", "reason_and_privacy", "final_review"],
    "message_input": "unified_keyboard",
    "message_keyboards": ["alphabetic_full", "t9_numeric_complete", "t9_numeric_consonant"],
    "default_message_keyboard": "alphabetic_full",
    "default_recommender": "interpolated_ancora_contact_v3_click_utility",
    "recommender_training": ["ud_spanish_ancora_train_r2_18", "contacto_es_v1_static"],
    "online_learning": false,
    "minimum_message_words": 15,
    "field_guidance": {
      "name": "Use a complete-name shortcut or the lowercase keyboard; the first letter is capitalized automatically.",
      "email": "Write the local part and use a domain-and-next shortcut when suitable.",
      "message": "The unified keyboard opens directly and requires exact review before returning to the draft.",
      "closure": "Reason is optional with otro as default; explicit privacy consent opens final review directly."
    },
    "removed_from_operational_input": ["legacy_predictive_word_screen", "fixed_complete_phrases", "controlled_semantics_gf"],
    "research_only": ["controlled_semantics_gf", "neutral_legacy_composer", "mixed_unigram_ranking_control"],
    "navigation_contract": {
      "hub": "The shared server draft advances to the next required incomplete field.",
      "draft_binding": "Follow the single start link, bind the run to the full visible draft ID and use only links containing that same ID. Never mix links from previous drafts.",
      "absolute_links": "Follow the complete absolute href exactly as published and never concatenate routes manually.",
      "resume": "Preserve the absolute copyable resume URL before pausing. It opens the current revision without repeating an action, accepting privacy, preparing review or sending.",
      "message_return": "The exact reviewed message returns through an expiring revision-bound bridge.",
      "corrections": ["correct_name", "correct_email", "rewrite_message"]
    },
    "bridge_safety": "The unified message keyboard uses an opaque, expiring, single-use bridge bound to the exact draft revision.",
    "provenance": "Message characters retain unified-keyboard provenance and the keyboard records candidate context and rank.",
    "metrics": {
      "action_breakdown": [
        "input_actions",
        "navigation_actions",
        "correction_actions",
        "finalization_actions"
      ],
      "raw_total": "actions",
      "token_estimate": "HTML response bytes divided by four; not billed usage or actual model context"
    },
    "send_effect": "No input step, exact-message review or privacy action sends. Only the reviewed final stable-contact link sends an external email.",
    "flow_metric": "guided_step_v1",
    "bundled_transition_metric": "bundled_transitions"
  },
  "t9_contact_composer": {
    "status": "experimental_optional_channel",
    "entrypoint": "https://irremplazables.org/agent/t9-compose/?rev=1786966601",
    "method": "GET links only",
    "purpose": "Compose a concise contact message through either numeric T9 variant or the independent alphabetic keyboard, then transfer it to the stable contact gateway.",
    "candidate_options_per_view": 6,
    "input_keyboards": ["alphabetic", "numeric"],
    "default_input_keyboard": "alphabetic",
    "t9_variants": ["complete", "consonant"],
    "t9_keys": ["2", "3", "4", "5", "6", "7", "8", "9"],
    "alphabetic_keyboard": "recommended_default_full_keyboard",
    "default_recommender": "interpolated_ancora_contact_v3_click_utility",
    "experimental_control_recommender": "mixed_unigram",
    "recommender_training": ["ud_spanish_ancora_train_r2_18", "contacto_es_v1_static"],
    "online_learning": false,
    "navigation_rule": "After every action, discard the old page and follow only complete absolute hrefs from the newest response; do not rebuild paths manually.",
    "resume": {
      "published": "absolute_link_and_copyable_text_on_every_nonterminal_view",
      "effect": "none",
      "ttl_seconds": 7200,
      "behavior": "open_current_revision_without_repeating_an_action"
    },
    "compose_effect": "none",
    "review_choices": {
      "not_sent": "Close the experiment without any external effect and receive the exact NOT_SENT marker plus metrics.",
      "contact_handoff": "Transfer the exact message into the stable composer without sending."
    },
    "contact_completion": "After handoff, complete name, email, reason and privacy consent, review again and use the final one-use link.",
    "send_effect": "Only the final one-use stable-contact link sends an external email.",
    "success_contract": {
      "ok": true,
      "status": "sent",
      "confirmed": true,
      "effect": "external_email_sent",
      "transport_family": "hypermedia",
      "transport": "hypermedia_t9_contact"
    },
    "selection_rule": "The guided composer opens this same keyboard automatically for its message step. Use the isolated entrypoint for interface comparison or a NOT_SENT trial."
  },
  "gf_semantic_composer": {
    "status": "experimental_research_only_channel",
    "entrypoint": "https://irremplazables.org/agent/gf-compose?rev=1786966601",
    "method": "GET links only; server-to-server realization request",
    "purpose": "Research-only comparison: select a compact semantic frame and expand it deterministically into Spanish with Grammatical Framework. It is not an operational message input because the closed grammar is not freely expressive.",
    "semantic_slots": ["actor", "action", "goal", "topic"],
    "navigation_rule": "After every action, discard the old page and follow only absolute hrefs from the newest response.",
    "compose_effect": "none",
    "mandatory_review": "The complete generated text, semantic tree and output hash are shown before contact handoff.",
    "review_choices": {
      "edit": "Return to semantic selection without sending.",
      "not_sent": "Close with NOT_SENT and no external effect.",
      "contact_handoff": "Approve the generated text and copy it exactly into the stable contact composer without sending."
    },
    "contact_completion": "After handoff, complete name, email, reason and privacy consent, review the external effect and use the final one-use link.",
    "success_contract": {
      "ok": true,
      "status": "sent",
      "confirmed": true,
      "effect": "external_email_sent",
      "transport_family": "hypermedia",
      "transport": "hypermedia_gf_contact"
    }
  },
  "robots_policy": {
    "url": "https://irremplazables.org/robots.txt",
    "agent_routes_allowed_for_all_user_agents": true,
    "provider_allowlist_required": false,
    "indexing_policy": "Operational agent pages are noindex but their explicit links may be followed."
  }
}
