Agent-friendly by design
Explore exposes a product contract that agents can actually read.
The public manifest explains what Explore is, how setup works, which actions are stable, and which safety rules matter. The authenticated context endpoint explains the current account state and the next safe action.
Contract surfaces
- Public discovery
/.well-known/agent.json- Authenticated context
/api/agent/context- Human-readable guide
/agents
Want to see the product itself first? Open the example profile.
Purpose
What the manifest tells an agent
ExploreMyProfile creates a public profile experience that is grounded in account-owned content and designed to be legible to humans and agents.
- The setup flow connects Notion, uses the dedicated Explore page, prepares the managed workspace, syncs content, and then guides launch review.
- Owners update source content in Notion, rerun sync, and review the public profile before sharing.
- Agents should only recommend sharing when setup is complete, the latest sync succeeded, starter content is gone, and launch checks pass.
Domain objects
What Explore expects agents to reason about
- account The signed-in owner's account and public profile configuration.
- profile The public profile rendered from account-managed data and synced content.
- explore_page The dedicated Notion page that ExploreMyProfile manages or reuses for the account.
- workspace The Notion databases under the Explore page that hold profile, project, experience, and writing content.
- notion_sync The latest import result from Notion into ExploreMyProfile.
- launch_checks Machine-readable readiness signals used before recommending profile sharing.
Setup workflow
Stable states and recommended actions
These same setup states now also power the guided help inside the Notion onboarding flow, so humans and agents see the same current state and safe next action.
not_connected
Notion not connected
The account has not saved a Notion connection yet, so ExploreMyProfile cannot create or reuse its Explore page.
page_unconfirmed
Explore page not in use yet
The account is connected to Notion, but the dedicated Explore page has not been confirmed for use yet.
workspace_not_setup
Workspace not set up
The Explore page is confirmed, but Explore has not finished preparing the required Notion databases yet.
needs_sync
Sync not yet run
The Explore workspace is ready, but a successful sync has not completed yet.
starter_content_present
Starter content still present
A successful sync exists, but starter content still appears in the account content, so the profile is not safe to share.
ready_for_review
Ready for review
Core setup is complete and starter content is gone, but launch-readiness checks still need a final review pass.
ready_to_share
Ready to share
The account has completed setup, synced successfully, removed starter content, and passed the current launch-readiness checks.
Actions
Stable action vocabulary
-
connect_notionAuthorize ExploreMyProfile to access the account's Notion workspace. -
confirm_explore_pageConfirm the dedicated Explore page that ExploreMyProfile will use in Notion. -
set_up_workspaceLet Explore create or reconnect the profile, case study, experience, and writing databases it needs. -
sync_from_notionImport the latest content from the account's Notion workspace into the public profile. -
open_in_notionOpen the Explore page in Notion so the account owner can update source content safely. -
preview_profileOpen the public profile to review the visitor experience before sharing. -
update_profileEdit the profile basics managed inside ExploreMyProfile. -
share_profileUse the public profile URL once launch readiness checks pass.
Safety rules
What agents should not do
- ExploreMyProfile owns the structure of the dedicated Explore page and its managed workspace databases.
- If a matching Explore page already exists, reuse it instead of creating a second Explore page.
- Workspace setup is expected to be idempotent and safe to rerun.
- If matching Notion databases already exist under the Explore page, reconnect to them instead of duplicating them.
- Do not overwrite user-authored content unexpectedly when setup or sync reruns.
- Do not recommend sharing the live profile while starter or sample content is still present.
Raw manifest
Public JSON contract
The `/agents` page is a readable mirror. The source of truth is still the public manifest endpoint.
{
"schema_version": "1.0",
"id": "exploremyprofile.agent_manifest.v1",
"name": "ExploreMyProfile",
"product_url": "https://exploremyprofile.com/",
"description": "Create and manage a public, inspectable profile powered by Notion.",
"purpose": {
"summary": "ExploreMyProfile creates a public profile experience that is grounded in account-owned content and designed to be legible to humans and agents.",
"setup_model": "The setup flow connects Notion, uses the dedicated Explore page, prepares the managed workspace, syncs content, and then guides launch review.",
"editing_model": "Owners update source content in Notion, rerun sync, and review the public profile before sharing.",
"sharing_model": "Agents should only recommend sharing when setup is complete, the latest sync succeeded, starter content is gone, and launch checks pass."
},
"agent_context_url": "/api/agent/context",
"domain_objects": [
{
"id": "account",
"description": "The signed-in owner's account and public profile configuration."
},
{
"id": "profile",
"description": "The public profile rendered from account-managed data and synced content."
},
{
"id": "explore_page",
"description": "The dedicated Notion page that ExploreMyProfile manages or reuses for the account."
},
{
"id": "workspace",
"description": "The Notion databases under the Explore page that hold profile, project, experience, and writing content."
},
{
"id": "notion_sync",
"description": "The latest import result from Notion into ExploreMyProfile."
},
{
"id": "launch_checks",
"description": "Machine-readable readiness signals used before recommending profile sharing."
}
],
"workflows": [
{
"id": "setup_workflow",
"label": "Setup workflow",
"initial_state": "not_connected",
"states": [
{
"id": "not_connected",
"label": "Notion not connected",
"description": "The account has not saved a Notion connection yet, so ExploreMyProfile cannot create or reuse its Explore page.",
"valid_action_ids": [
"connect_notion",
"update_profile"
],
"recommended_action_id": "connect_notion",
"blockers": [
"notion_not_connected"
]
},
{
"id": "page_unconfirmed",
"label": "Explore page not in use yet",
"description": "The account is connected to Notion, but the dedicated Explore page has not been confirmed for use yet.",
"valid_action_ids": [
"confirm_explore_page",
"connect_notion",
"update_profile"
],
"recommended_action_id": "confirm_explore_page",
"blockers": [
"explore_page_unconfirmed"
]
},
{
"id": "workspace_not_setup",
"label": "Workspace not set up",
"description": "The Explore page is confirmed, but Explore has not finished preparing the required Notion databases yet.",
"valid_action_ids": [
"set_up_workspace",
"open_in_notion",
"confirm_explore_page"
],
"recommended_action_id": "set_up_workspace",
"blockers": [
"workspace_not_set_up"
]
},
{
"id": "needs_sync",
"label": "Sync not yet run",
"description": "The Explore workspace is ready, but a successful sync has not completed yet.",
"valid_action_ids": [
"sync_from_notion",
"open_in_notion",
"preview_profile"
],
"recommended_action_id": "sync_from_notion",
"blockers": [
"sync_not_completed"
]
},
{
"id": "starter_content_present",
"label": "Starter content still present",
"description": "A successful sync exists, but starter content still appears in the account content, so the profile is not safe to share.",
"valid_action_ids": [
"open_in_notion",
"preview_profile",
"sync_from_notion"
],
"recommended_action_id": "open_in_notion",
"blockers": [
"starter_content_present"
]
},
{
"id": "ready_for_review",
"label": "Ready for review",
"description": "Core setup is complete and starter content is gone, but launch-readiness checks still need a final review pass.",
"valid_action_ids": [
"preview_profile",
"open_in_notion",
"sync_from_notion",
"update_profile"
],
"recommended_action_id": "preview_profile",
"blockers": [
"launch_checks_incomplete"
]
},
{
"id": "ready_to_share",
"label": "Ready to share",
"description": "The account has completed setup, synced successfully, removed starter content, and passed the current launch-readiness checks.",
"valid_action_ids": [
"share_profile",
"preview_profile",
"open_in_notion",
"sync_from_notion"
],
"recommended_action_id": "share_profile",
"blockers": []
}
]
},
{
"id": "launch_readiness_workflow",
"label": "Launch readiness workflow",
"initial_state": "needs_sync",
"states": [
{
"id": "needs_sync",
"label": "Sync required",
"description": "A current successful sync is required before launch-readiness review can begin."
},
{
"id": "starter_content_present",
"label": "Starter content detected",
"description": "Starter rows or placeholder copy still exist and must be replaced before sharing."
},
{
"id": "ready_for_review",
"label": "Ready for review",
"description": "The account can review the visitor journey, chat behavior, and sharing readiness."
},
{
"id": "ready_to_share",
"label": "Ready to share",
"description": "The account passes the current machine-readable launch-readiness checks."
}
]
}
],
"actions": [
{
"id": "connect_notion",
"label": "Connect Notion",
"description": "Authorize ExploreMyProfile to access the account's Notion workspace.",
"route_id": "notion_connect"
},
{
"id": "confirm_explore_page",
"label": "Use Explore page",
"description": "Confirm the dedicated Explore page that ExploreMyProfile will use in Notion.",
"route_id": "notion_page"
},
{
"id": "set_up_workspace",
"label": "Set up Explore workspace",
"description": "Let Explore create or reconnect the profile, case study, experience, and writing databases it needs.",
"route_id": "notion_workspace"
},
{
"id": "sync_from_notion",
"label": "Sync from Notion",
"description": "Import the latest content from the account's Notion workspace into the public profile.",
"route_id": "notion_sync"
},
{
"id": "open_in_notion",
"label": "Open in Notion",
"description": "Open the Explore page in Notion so the account owner can update source content safely.",
"route_id": "notion_page_external"
},
{
"id": "preview_profile",
"label": "Preview public profile",
"description": "Open the public profile to review the visitor experience before sharing.",
"route_id": "public_profile"
},
{
"id": "update_profile",
"label": "Update profile basics",
"description": "Edit the profile basics managed inside ExploreMyProfile.",
"route_id": "profile_basics"
},
{
"id": "share_profile",
"label": "Share profile",
"description": "Use the public profile URL once launch readiness checks pass.",
"route_id": "public_profile"
}
],
"endpoints": [
{
"id": "agent_manifest",
"method": "GET",
"url": "/.well-known/agent.json",
"authentication": "none",
"description": "Public machine-readable discovery endpoint for agents."
},
{
"id": "agent_context",
"method": "GET",
"url": "/api/agent/context",
"authentication": "session",
"description": "Authenticated machine-readable account context for the current signed-in user."
}
],
"safety_rules": [
{
"id": "explore_page_ownership",
"rule": "ExploreMyProfile owns the structure of the dedicated Explore page and its managed workspace databases."
},
{
"id": "reuse_explore_page",
"rule": "If a matching Explore page already exists, reuse it instead of creating a second Explore page."
},
{
"id": "workspace_setup_idempotent",
"rule": "Workspace setup is expected to be idempotent and safe to rerun."
},
{
"id": "reuse_matching_tables",
"rule": "If matching Notion databases already exist under the Explore page, reconnect to them instead of duplicating them."
},
{
"id": "no_unexpected_overwrite",
"rule": "Do not overwrite user-authored content unexpectedly when setup or sync reruns."
},
{
"id": "starter_content_blocks_share",
"rule": "Do not recommend sharing the live profile while starter or sample content is still present."
}
],
"human_ui_routes": [
{
"id": "workspace_home",
"path": "/account",
"label": "Workspace home"
},
{
"id": "profile_basics",
"path": "/account/profile-basics",
"label": "Profile basics"
},
{
"id": "notion_connect",
"path": "/account/notion/connect?entrypoint=onboarding",
"label": "Connect Notion"
},
{
"id": "notion_page",
"path": "/account/notion/page?entrypoint=onboarding",
"label": "Use Explore page"
},
{
"id": "notion_workspace",
"path": "/account/notion/workspace?entrypoint=onboarding",
"label": "Set up Explore workspace"
},
{
"id": "notion_sync",
"path": "/account/notion/sync?entrypoint=onboarding",
"label": "Sync and review"
},
{
"id": "public_profile",
"path": "/profiles/:slug",
"label": "Public profile"
}
]
}
Authenticated context
Account-specific state for the signed-in user
The live context endpoint is intentionally authenticated. Sign in to inspect your current account state and recommended next action.
- Current workflow state and step
- Recommended next action
- Allowed actions for the current state
- Issues, launch checks, and safety notes