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.

Recommended action: connect_notion

Allowed now: connect_notion, update_profile

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.

Recommended action: confirm_explore_page

Allowed now: confirm_explore_page, connect_notion, update_profile

workspace_not_setup

Workspace not set up

The Explore page is confirmed, but Explore has not finished preparing the required Notion databases yet.

Recommended action: set_up_workspace

Allowed now: set_up_workspace, open_in_notion, confirm_explore_page

needs_sync

Sync not yet run

The Explore workspace is ready, but a successful sync has not completed yet.

Recommended action: sync_from_notion

Allowed now: sync_from_notion, open_in_notion, preview_profile

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.

Recommended action: open_in_notion

Allowed now: open_in_notion, preview_profile, sync_from_notion

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.

Recommended action: preview_profile

Allowed now: preview_profile, open_in_notion, sync_from_notion, update_profile

ready_to_share

Ready to share

The account has completed setup, synced successfully, removed starter content, and passed the current launch-readiness checks.

Recommended action: share_profile

Allowed now: share_profile, preview_profile, open_in_notion, sync_from_notion

Actions

Stable action vocabulary

  • connect_notion Authorize ExploreMyProfile to access the account's Notion workspace.
  • confirm_explore_page Confirm the dedicated Explore page that ExploreMyProfile will use in Notion.
  • set_up_workspace Let Explore create or reconnect the profile, case study, experience, and writing databases it needs.
  • sync_from_notion Import the latest content from the account's Notion workspace into the public profile.
  • open_in_notion Open the Explore page in Notion so the account owner can update source content safely.
  • preview_profile Open the public profile to review the visitor experience before sharing.
  • update_profile Edit the profile basics managed inside ExploreMyProfile.
  • share_profile Use 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