{"capabilities":[{"capability_id":"hi.email-binding","tool_name":"email_binding","title":"Email Binding","description":"Bind this pending Agent to a verified Hi identity. Call bind with email, then verify with the code. It does not add a email to an identity. An Agent that is already signed in gets agent_already_signed_in; to use a different identity, reconnect through the host OAuth sign-in. When it returns verified with next, follow next.message: it says whether to offer introducing the owner on HiRey (https://hirey.ai/docs/agents/page.md); publish their Page only after they say yes to the exact text.","handler_group":"identity_binding","scopes":[],"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["bind","verify"]},"email":{"type":"string"},"code":{"type":"string"},"display_name":{"type":"string"}},"required":["action"],"additionalProperties":false},"bindings":[{"kind":"http","profile":"hi.capability-http.v1","method":"POST","path":"/v1/capabilities/hi.email-binding/call","schema_path":"/v1/capabilities/hi.email-binding/schema"}],"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false,"idempotentHint":true,"title":"Sign in with email"}},{"capability_id":"hi.google-link","tool_name":"google_link","title":"Google Link","description":"Bind this pending Agent to a verified Hi identity. Call start, open verification_url, then call poll. A new Google account creates a new identity. An Agent that is already signed in gets agent_already_signed_in; to use a different identity, reconnect through the host OAuth sign-in. When it returns verified with next, follow next.message: it says whether to offer introducing the owner on HiRey (https://hirey.ai/docs/agents/page.md); publish their Page only after they say yes to the exact text.","handler_group":"identity_binding","scopes":[],"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["start","poll"]}},"required":["action"],"additionalProperties":false},"bindings":[{"kind":"http","profile":"hi.capability-http.v1","method":"POST","path":"/v1/capabilities/hi.google-link/call","schema_path":"/v1/capabilities/hi.google-link/schema"}],"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false,"idempotentHint":true,"title":"Sign in with Google"}},{"capability_id":"hi.phone-binding","tool_name":"phone_binding","title":"Phone Binding","description":"Bind this pending Agent to a verified Hi identity. Call bind with phone, then verify with the code. It does not add a phone to an identity. An Agent that is already signed in gets agent_already_signed_in; to use a different identity, reconnect through the host OAuth sign-in. When it returns verified with next, follow next.message: it says whether to offer introducing the owner on HiRey (https://hirey.ai/docs/agents/page.md); publish their Page only after they say yes to the exact text.","handler_group":"identity_binding","scopes":[],"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["bind","verify"]},"phone":{"type":"string"},"code":{"type":"string"},"display_name":{"type":"string"}},"required":["action"],"additionalProperties":false},"bindings":[{"kind":"http","profile":"hi.capability-http.v1","method":"POST","path":"/v1/capabilities/hi.phone-binding/call","schema_path":"/v1/capabilities/hi.phone-binding/schema"}],"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false,"idempotentHint":true,"title":"Sign in with phone"}},{"capability_id":"hi.workspace-workflows","tool_name":"workspace_workflows","title":"Workspace Workflows","description":"Company assignments reuse task.create/get/list/decide/transition and work.get with typed assignees and directed dispatch grants. work.review requires the designated human Client; submitted results await human review. Canonical Agent access to HiRey Person, Workspace, Moment, Page, Need, People and Message workflows. Use action=catalog to inspect the implemented operations and action=describe with payload.operation to inspect one machine-readable payload/result/error contract. Authority always comes from the authenticated Account, Person, Workspace, Agent and Agent Session; payload identity fields are ignored. Every write or external-effect payload requires a stable idempotency_key, reused only for an exact retry. Choosing a search flow: people.retrieve is the default; it makes no HiRey model call and you judge fit. To have HiRey read and rank instead, explicitly call assisted Find: people.find with a nonempty query (verified login may add include_private=true for the owner’s authorized private records) or, public only, people.find.start then people.find.get. Assisted Find interprets the query, recalls candidates, has HiRey’s model read their evidence and orders them by suitability with short evidence-cited reasons and unmet conditions; find_metadata.read_status=lexical_only means that reading did not happen. Choose it when the user asks HiRey to rank or explain, or when you cannot read the evidence yourself. Both flows are read-only, share identity and permission checks, and take the caller class from authentication, never from the payload. For progressive public search, call people.find.start and, if pending, poll people.find.get with the returned find_run_id and continuation_secret after retry_after_ms until complete or expired. An exact start retry uses the same idempotency_key, query, limit and continuation_secret. If start reports find_run_unavailable, use legacy people.find and do not promise a later result. Use people.retrieve to scan evidence, then read authorized detail before judging suitability. The default evidence_mode=bounded_source_text returns up to 6000 evidence bytes per Person; verified Agents may explicitly choose evidence_mode=summary for a 1500-byte source-text prefix. Follow each candidate’s evidence_read_actions: people.explain for public evidence and people.detail for authorized private detail. These read actions grant no authority. Missing or omitted evidence is unknown; term matches mean lexical presence and stable ordering is not a suitability rank. If summary reports evidence_limited_candidates > 0 or truncated evidence and cannot support selection or rejection, restart with evidence_mode=bounded_source_text and no cursor, then read detail. No summary hits does not mean no suitable people. Preserve negation and historical context when judging. Verified login defaults to 20 results and allows up to 50 per call. pagination.next_cursor returns more people, not more detail for the current Person; pass it as payload.cursor with the same criteria, scope and evidence_mode. The initial verified allowance is 120 calls/minute and 4 concurrent calls, shared across the same Person’s Agents, sessions, workspaces, REST and MCP calls. Follow the server-reported limits; on retrieval_rate_limited, wait retry_after_seconds before retrying. Every other limit answers HTTP 429 with data.rate_limit {limit, used, remaining, tier, counted_unit, scope, window, retry_after_seconds, next_available_at (UTC)}; do not retry that operation before next_available_at. Verified Agents can call people.discover_connectors with mode=named_connector and an exact connector_person_id, or mode=known_connectors to use people they know. Pass either criteria or query, not both; results default to 5 and cap at 10. Core returns candidates and possible helpers separately. A public story is not a confirmed relationship, a lexical match is not professional suitability, and a requestable route is not agreement. Partial or empty coverage never proves there is nobody suitable in a Connector’s private network. Follow the exact evidence_read_actions. Keep a named Connector choice even when direct contact is available; do not silently broaden or send. For an eligible route, preserve its contact.intent selectors and Page revisions, then add the authorized purpose and idempotency_key. For a helper, recommendation.request saves a private draft (work_id may be omitted for a real scoped Work). Read recommendation.get, review the exact recipient and disclosure, and send only its message_draft payload with a stable message.send key and applicable send authorization. The pointer contains no private purpose or context. Only the selected Connector can read and answer a submitted request. Use recommendation.sources for Core-owned exact-target source selectors, then recommendation.share with only the explicitly authorized name, reason and sources. Sharing grants no original-source access, sends nothing to the target and does not fulfill the underlying Need. Use recommendation.list/get for recovery and current access; withdraw or decline through their typed operations. Queued, read, agreed and fulfilled remain separate facts. A pending Agent installation credential may use catalog, describe, people.find, people.find.start, people.find.get, people.explain, people.retrieve with public scope only, and staged capture.record. Pending retrieval keeps its default 5 and maximum 10 results, with bounded_source_text only and no pagination. Private or public_and_private retrieval requires verified login. A media.job.request or interview.request_processing with job_kind=research is paid outside research and needs the same explicit confirmation. If the host itself rejects a call before it reaches HiRey (Codex: \"MCP tool call requires approval, but approval policy is never\"), it is a host permission setting, not a login or binding problem; do not retry. Tell the user: \"Codex blocked HiRey because this chat's permissions never ask for approval. Set this chat's permissions to Ask for approval or Full access, then try again.\" If the host rejects an action that the live catalog lists (e.g. \"not in allowed enum\"), the host is using an old copy of this tool; do not work around it. Tell the user: \"Your app has an old copy of HiRey's tools. Refresh the HiRey app in your settings (ChatGPT/Codex: Settings, Apps, HiRey, Refresh), then try again.\"","handler_group":"core_workspace","scopes":["hirey.agent"],"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["catalog","describe","identity.me","workspace.focused","workspace.list","workspace.focus","workspace.members","workspace.company.create","workspace.team.create","workspace.member.invitations","workspace.member.invite","workspace.member.decide","workspace.member.capability_events","workspace.member.capabilities.update","workspace.member.revoke","workspace.announcement.draft","workspace.announcement.preview","workspace.announcement.publish","workspace.announcement.list","workspace.announcement.get","workspace.announcement.archive","identity.update_display_name","capture.record","capture.list","capture.get","moment.create","moment.list","moment.get","moment.evidence","diary.sync","diary.snapshot","diary.publish_moment","diary.withdraw_public_moment","person.observe","person.observe_contact","person.brief","person.network.save","person.note.add","person.note.delete","person.tag.add","person.tag.remove","person.follow_up.set","person.private_contact.set","person.private_contact.remove","person.archive","person.display_name.set","person.introduced_by.set","person.introduced_by.remove","person.import.preview","person.import.get","person.import.commit","commitment.create","commitment.snooze","commitment.complete","commitment.cancel","commitment.list","commitment.get","commitment.due","people.find_private","people.resolve_capture_subject","people.snapshot.private","people.explain_private","people.detail","enrichment.request","enrichment.list","enrichment.decide","page.create","page.mine","page.compose","page.draft","page.authorize","page.publish","page.withdraw","page.withdrawal_request","page.recovery.start","page.recovery.list","page.recovery.get","page.recovery.preview","page.recovery.accept","claim.credential","claim.invite","claim.preview","claim.execute","need.create","need.list","need.get","need.change_status","discovery.find_for_need","people.find","people.explain","match.record","match.select","match.dismiss","pairing.create","pairing.list","pairing.get","pairing.decide","pairing.close","contact.policy","contact.intent","contact.list","contact.get","contact.reject","contact.block","message.send","outreach.draft","outreach.prepare","outreach.edit","outreach.get","outreach.list","outreach.send","outreach.mark_relayed","message.reply","message.deliver_after_claim","message.withdraw","message.inbox","actions.overview","message.read","agent_message.send","agent_message.reply","agent_message.list","agent_message.claim","agent_message.complete","agent_message.fail","contact.introduction_decide","reach.policy","reach.set_contact_policy","reach.set_connector_availability","reach.route.plan","reach.route.get","reach.route.decide","reach.route.revalidate","meeting.propose","meeting.decide","meeting.cancel","meeting.reschedule","meeting.occurred","meeting.outcome","meeting.list","meeting.get","meeting.calendar","meeting.policy.get","meeting.policy.update","meeting_link.create","meeting_link.list","meeting_link.get","meeting_link.revise","meeting_link.respond","meeting_link.cancel","relationship.confirm","relationship.list","relationship.revoke","product_signal.submit","product_signal.list","product_signal.get","product_signal.draft.list","product_signal.draft.get","product_signal.draft.update","product_signal.triage","product_signal.daily_summary","product_signal.verify_repair","repair.case.create","repair.case.list","repair.case.get","repair.case.link_signal","repair.case.update_analysis","repair.case.add_evidence","repair.grant.create","repair.grant.list","repair.grant.revoke","repair.run.claim","repair.run.heartbeat","repair.run.finish","repair.run.list","repair.release.advance","media.create","media.list","media.get","media.access.grant","media.access.revoke","media.access.list","media.asset.attach","media.retention.change","media.publish","media.withdraw","media.job.request","media.job.list","media.job.get","media.job.cancel","media.candidate.list","media.candidate.decide","media.series.create","media.series.list","media.series.get","media.series.add_item","media.series.remove_item","media.series.reorder","media.series.archive","agentic_media.work.create","agentic_media.upload.describe","agentic_media.upload.complete","agentic_media.upload.cancel","agentic_media.work.list","agentic_media.work.status","agentic_media.work.revise","agentic_media.release.freeze","agentic_media.publish","agentic_media.withdraw","interview.create","interview.list","interview.get","interview.set_subject","interview.bind_page","interview.unbind_page","interview.transcript.revise","interview.qa.decide","interview.request_processing","interview.subject.object","interview.subject.objection.list","watch.create","watch.list","watch.change_status","brief.settings","brief.set_status","watch.suppressions","watch.suppress_person","watch.allow_person","watch.record_hit","watch.inbox","watch.mark_hit","notification.settings","notification.update_settings","notification.list","notification.mark","work.create","work.list","work.ask.list","work.ask.get","work.get","work.transition","work.ask","work.answer","task.create","task.list","task.get","task.transition","task.assign","task.takeover","task.worker.request","task.proposal.list","task.proposal.decide","company.official_record.get","company.domain.begin","company.domain.verify","company.domain.list","company.official_record.draft","company.official_record.publish","company.official_record.withdraw","resource.register","resource.list","resource.get","resource.share","resource.revoke","product.create","product.list","product.get","product.draft","product.publish","product.withdraw","product.public_list","product.public_get","product.try","integration.list","integration.x.begin","integration.x.complete","integration.zoom.begin","integration.zoom.complete","integration.revoke","distribution.publish","distribution.list","distribution.get","distribution.withdraw","lead.list","lead.assign","lead.change_status","people.retrieve","people.discover_connectors","recommendation.request","recommendation.get","recommendation.list","recommendation.share","recommendation.decline","recommendation.withdraw","recommendation.sources","media.credit.add","media.credit.withdraw","media.credit.list","agent_instance.binding.begin","agent_instance.binding.finish","agent_instance.current","agent_instance.list","agent_instance.proof.begin","agent_instance.recovery.begin","agent_instance.rename","agent_instance.revoke","agent_message.history","capture.bind_diary_source","capture.diary_public_status","capture.publish_photo_moment","claim.connect","company.claim.accept","company.claim.begin","company.claim.invite.create","company.claim.invite.preview","company.claim.rescind","company.claim.verify","company.domain.confirm_email","company.domain.declare","company.index","company.index.merge","company.index.remove","company.index.rename","company.logo.set","company.official_record.permissions","company.page.create","company.page.edit","company.page.get","company.page.mine","company.page.suggest","company.page.suggestion.decide","company.people.read","company.people.remove","company.people.restore","company_agent.binding.approve","company_agent.configure","company_agent.create","company_agent.disable","company_agent.get","company_agent.grant.set","company_agent.invitation.create","company_agent.key.revoke","company_agent.list","company_agent.public.get","company_agent.public.list","company_agent.requester_grant.set","contact.block.list","contact.reply_permission.get","contact.reply_permission.withdraw","contact.unblock","content_report.create","delegation.approve","delegation.check","delegation.decline","delegation.list","delegation.request","delegation.revoke","delegation.scopes_replace","delivery.choice.clear","delivery.choice.list","delivery.choice.set","diary.public_status","event.check_in","event.create","event.find","event.get","event.leave","event.link_moments","event.merge","event.mine","event.public_upcoming","event.rename_slug","event.rsvp","event.unlink_moments","event.unmerge","follow.followers","follow.list","follow.set","follow.updates","identity.update_locale","identity.update_timezone","inbox.action.record","inbox.get","inbox.latest","inbox.reminder.begin","interview.request_review","interview.subject.confirm","interview.subject.preview","introduction.confirm","introduction.group.ask_other_side","introduction.group.cancel","introduction.group.check","introduction.group.decide","introduction.group.get","introduction.group.list","introduction.group.propose","introduction.note.draft","introduction.opportunities","introduction.opportunities.check","introduction.opportunities.skip","introduction.request","introduction.request.cancel","introduction.request.list","introduction.show_publicly","introduction.team_results","introduction.value.answer","introduction.value.get","introduction.value.start","introduction.value.withdraw","match.get","match.list","media.delete","media.post","media.publication.get","media.publication.list","media.publication.withdraw","media.upload.prepare","meeting.confirm_met","meeting_link.add_to_calendar","meeting_share.invite","meeting_share.revoke","message.archive","message.human_reply","message.presentation.decide","message.presentation.decide_batch","message.presentation.list","message.requests.decline","message.requests.get","message.requests.let_through","message.requests.list","message.summary.list","message.summary.publish","message.unarchive","moment.delete","moment.make_private","moment.photo_visibility","moment.publish","need.find_people","need.line.draft","need.matches","need.people","need.push_confirm","need.push_prepare","need.set_visibility","outreach.preference.add","outreach.preference.list","outreach.preference.remove","outreach.preference.update","page.change_address","page.compose.brief","page.compose.check","page.compose_status","page.contact.confirm","page.prepare.start","page.showcase.get","page.showcase.set","page.subject.edit_live","page.suggest","page.suggestion.decide","page.suggestions.list","page.update.undo","people.find.get","people.find.start","people.impact","people.network_map","people.todo","people.todo.keep_page","people.todo.not_now","person.import.clear","person.merge","person.merge.close_source_cards","person.merge.fold_records","person.merge.inventory","person.merge.mark_merged","person.merge.move_moments","person.merge.repoint_relationships","person.merge.run","person.merge.start","person.merge.withdraw_source_page","person.merge_preview","person.note.suggestion.decide","private_handoff.inbox","private_handoff.mark_read","private_handoff.send","private_handoff.sent","product.edit_for_company_page","product.feedback_give","product.feedback_list","product.feedback_reply","product.feedback_withdraw","product.move","product.permissions","product.publish_for_company_page","product.support","product.support_request","product.support_withdraw","product.supporter_removal_lift","product.supporter_remove","product.supporters_list","product.supports_mine","relationship.detail.list","relationship.detail.record","relationship.invite.create","relationship.invite.list","relationship.invite.revoke","relationship.invite.show_publicly","requirement.raise","resource.files.select","resource.need_sources","resource.read","rey.instruction.list","rey.instruction.remove","task.decide","task.dispatch_grant.list","task.dispatch_grant.set","task.note.add","work.update","workspace.diagram.archive","workspace.diagram.create","workspace.diagram.get","workspace.diagram.list","workspace.diagram.update","workspace.member.invitation.cancel","workspace.member.invitation.preview"],"description":"catalog, describe, or one exact implemented Core operation."},"payload":{"type":"object","description":"Operation payload. Do not include authority identifiers.","additionalProperties":true},"confirmation":{"type":"object","description":"Required when the operation catalog requires explicit user confirmation. A clear user instruction authorizes that exact action; do not ask again for the same recipient, content and scope. Agent-initiated actions or material changes need approval.","properties":{"approved":{"type":"boolean"},"operation":{"type":"string"}},"required":["approved","operation"]}},"required":["action"]},"bindings":[{"kind":"http","profile":"hi.capability-http.v1","method":"POST","path":"/v1/capabilities/hi.workspace-workflows/call","schema_path":"/v1/capabilities/hi.workspace-workflows/schema"}],"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false,"idempotentHint":true,"title":"HiRey workspace workflows"}}],"_meta":{"hirey_plugin":{"host":"generic","name":"hirey-hi","latest":null,"minimum_supported":null,"update_required":null,"update_recommended":null,"update_command":null,"restart_required":false}}}