diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..52b4fbd8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,72 @@ +# Writing for pilotprotocol.network + +Read this before adding or changing any page, doc or blog post. It applies to people and to +automated writers alike: every claim on this site must be true today. + +## What Pilot is + +Pilot has four offerings. Nothing else is a Pilot product or service. + +1. **Pilot Protocol** — the open-source (AGPL-3.0) daemon and `pilotctl`: permanent virtual + addresses, Ed25519 identity, X25519 + AES-256-GCM tunnels, NAT traversal, mutual trust + handshakes, messaging, pub/sub, webhooks, SDKs, the local `pilot-mcp` server. Vulture Labs runs + the public backbone (registry and beacon) at no charge. +2. **Data service agents** — about 430 specialist agents on the backbone with typed JSON replies. + `list-agents` is the directory; `pilot-mom` turns a plain-English task into a plan. +3. **App Store** — apps an agent installs with `pilotctl appstore install ` and calls over + local IPC. Each app is made by its publisher (AEGIS, Cosift, Smol, the Wallet app and so on); + call them apps in the App Store, not Pilot features. A few are metered against a per-user + USD 5 budget. +4. **Pilot Cloud** — cloud.pilotprotocol.network: a hosted, always-on Pilot node used over MCP. + Free; sign-ups are capped by capacity. + +The open-source rendezvous also has private networks, roles, OIDC/JWT, policy, audit export and +blueprints. They work on a registry you run yourself (see /self-hosting/). On the public +backbone only the operators can create networks. + +shell.online, Moonlit and Vulture Vision are separate Vulture Labs products. If a post mentions +one, credit Vulture Labs, not Pilot Protocol. + +## Never write + +- Sales or service offers: plans, tiers, "contact sales", "early access", enterprise evaluations, + managed or dedicated networks, on-prem deployments, SLAs, priority support, design partners, + paid placement or advertising to agents. None of these exist. +- Compliance or certification claims. There is no SOC 2 report and no HIPAA/BAA offering. +- Features that were removed or never built: tasks, polo score or reputation, tag-based peer + search, the hosted console or platform (`pilotctl enterprise`, managed workspaces), app + sandboxing ("guarded" mode). +- Numbers nobody measured: benchmarks without a harness in the repos, memory footprints, adoption + percentages, survey figures without a source, customer counts. Name a customer or partner only + with their permission on record. +- Invented quotes, testimonials or CLI output. + +## Get commands right + +Check every command against `pilotctl --help` for the current release and against the +source (github.com/pilot-protocol/pilotprotocol). Common mistakes: + +- `send-message --data '...' --wait` returns the reply inline; don't read files from + `~/.pilot/inbox/` to get it. +- `publish` and `subscribe` take ` `; topics match exactly, or `*` for all. +- Tags are operator setup (`pilotctl extras set-tags`) and don't make a node discoverable. + Registry admin commands (`pilotctl extras network ...`, `member-tags`, `policy`) need admin + rights on the registry, which on the public backbone only the operators have. +- `network join` needs a network an operator created, plus its token or invite. Don't present it + as a first step for new users. +- Upgrades are `pilotctl appstore upgrade `. `appstore install --force` reinstalls and keeps + the app's state; `--reset-state` deletes it, so only suggest that when that is the point. +- Pilot ships as separate static binaries (`pilot-daemon`, `pilotctl`, `pilot-updater`) with no + runtime dependencies, and needs a registry and beacon (the public ones or your own). It isn't + "a single binary with zero dependencies". +- HTTPS proxies are supported (`-proxy`, `-proxy-cmd`, `--transport auto`). + +## Live numbers + +Label them with what they count: registered addresses (all time); daemons seen in the last +30 minutes; registry requests per second. + +## Before you open a pull request + +`npm run build`, `npm run check:plain` and `npm run check:site` must pass. A page with a plain +twin under `src/pages/plain/` needs its twin updated in the same change. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..43c994c2 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/functions/forms/contact.ts b/functions/forms/contact.ts index 650109ee..addf94eb 100644 --- a/functions/forms/contact.ts +++ b/functions/forms/contact.ts @@ -9,7 +9,8 @@ import { type FormEnv, } from '../_form-mail'; -const TOPICS = ['enterprise', 'product', 'partnership', 'press', 'security-review', 'governance', 'roadmap', 'other']; +// Keep in step with the topic - -
- - -
-
- - -
-
- - -
-
- - -
- - - - {turnstileSiteKey && ( -
- )} - -
-

Do not include credentials, secrets, or customer data. By submitting, you agree that Pilot may use this information to respond. Privacy Policy.

- -
-

- - - - - diff --git a/src/components/SolutionInfographic.astro b/src/components/SolutionInfographic.astro deleted file mode 100644 index dd81119f..00000000 --- a/src/components/SolutionInfographic.astro +++ /dev/null @@ -1,94 +0,0 @@ ---- -import type { SolutionStory } from '../data/solutionStories'; - -interface Props { - story: SolutionStory; - mode?: 'hero' | 'full'; -} - -const { story, mode = 'full' } = Astro.props; -const { infographic } = story; ---- - -{mode === 'hero' ? ( - -) : ( -
-
-
-
-
- {infographic.eyebrow} -

{infographic.title}

-
-

{infographic.summary}

-
- -
-
    - {infographic.stages.map((stage, index) => ( -
  1. -
    - {String(index + 1).padStart(2, '0')} - {stage.label} -
    -

    {stage.title}

    -

    {stage.body}

    -
      - {stage.items.map((item) =>
    • {item}
    • )} -
    - {index < infographic.stages.length - 1 && } -
  2. - ))} -
- - -
- -
- Pilot product surface - Explicit boundary - Generated output -
-
-
-
-)} diff --git a/src/components/SolutionProblem.astro b/src/components/SolutionProblem.astro deleted file mode 100644 index 71ebaf04..00000000 --- a/src/components/SolutionProblem.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import type { SolutionProfile } from '../data/solutions'; - -interface Props { solution: SolutionProfile } -const { solution } = Astro.props; ---- - -
-
-
-
The operating problem
-

{solution.problemTitle}

-

{solution.problemBody}

-
- -
-
diff --git a/src/components/SolutionProof.astro b/src/components/SolutionProof.astro deleted file mode 100644 index c640927a..00000000 --- a/src/components/SolutionProof.astro +++ /dev/null @@ -1,41 +0,0 @@ ---- -import type { SolutionProfile } from '../data/solutions'; - -interface Props { solution: SolutionProfile } -const { solution } = Astro.props; -const review = solution.review || { - label: 'Product review', - name: 'Pilot release 1.13.9', - date: '2026-08-05', - dateLabel: 'Reviewed 5 August 2026', - href: '/docs/', - linkLabel: 'Inspect documentation', -}; -const externalReview = review.href.startsWith('http'); -const proofHeading = solution.proofHeading || { - lead: 'Specific product surfaces.', - emphasis: 'Inspectable in the docs.', -}; ---- - -
-
-
-
-
Technical basis
-

{proofHeading.lead}
{proofHeading.emphasis}

-
-
- {review.label} - {review.name} - - {review.linkLabel} → -
-
-
    - {solution.proof.map((item, index) => ( -
  • {String(index + 1).padStart(2, '0')}{item}
  • - ))} -
-
-
diff --git a/src/components/SolutionRelated.astro b/src/components/SolutionRelated.astro deleted file mode 100644 index 1cc9eff6..00000000 --- a/src/components/SolutionRelated.astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -import { solutionsBySlug, type SolutionProfile } from '../data/solutions'; -import { solutionStories, type SolutionStory } from '../data/solutionStories'; - -interface Props { solution: SolutionProfile; story: SolutionStory } -const { solution, story } = Astro.props; -const relatedSolutions = solution.related - .map((slug) => ({ solution: solutionsBySlug.get(slug), story: solutionStories[slug] })) - .filter((item): item is { solution: SolutionProfile; story: SolutionStory } => Boolean(item.solution && item.story)); ---- - - diff --git a/src/components/SolutionWorkflow.astro b/src/components/SolutionWorkflow.astro deleted file mode 100644 index 468012cf..00000000 --- a/src/components/SolutionWorkflow.astro +++ /dev/null @@ -1,25 +0,0 @@ ---- -import type { SolutionProfile } from '../data/solutions'; -import type { SolutionStory } from '../data/solutionStories'; - -interface Props { solution: SolutionProfile; story: SolutionStory } -const { solution, story } = Astro.props; ---- - -
-
-
-
How the workflow resolves
-

{story.workflowHeading.lead}
{story.workflowHeading.emphasis}

-

{story.workflowHeading.body}

-
-
    - {solution.steps.map((step, index) => ( -
  1. - {String(index + 1).padStart(2, '0')} -

    {step.title}

    {step.body}

    -
  2. - ))} -
-
-
diff --git a/src/components/solution-experiences/ApiExperience.astro b/src/components/solution-experiences/ApiExperience.astro deleted file mode 100644 index 8a557cbb..00000000 --- a/src/components/solution-experiences/ApiExperience.astro +++ /dev/null @@ -1,57 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
-
API → AGENT METHOD11 / 12
-
Distribution for agent-ready services

{story.heroLead}
{story.heroEmphasis}

{story.lede}

-
Method contractcrm.account_enrichLook up a company and return normalized firmographic context.
Inputdomain: string
OutputAccountProfile
-
-
-
manifest.jsonhandler.ts● signed
-
01  {
-02    "id": "com.acme.crm",
-03    "version": "1.2.0",
-04    "methods": [{
-05      "name": "account_enrich",
-06      "description": "Enrich a company",
-07      "input": {
-08        "domain": "string"
-09      },
-10      "grants": ["network:api.acme.com"]
-11    }],
-12    "integrity": "sha256:9ac…"
-13  }
-
Schema validSignature validReady to publish
-
-
-
- - - -
-
-
Packaging surface

Document the job.
Declare the boundary.

{solution.problemBody}

-
{solution.capabilities.map((capability, index) =>
0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'input → output' : index === 1 ? 'grant[]' : 'catalogue.publish()'}
)}
-
-
- -
-
-
Publish flow

From endpoint to discoverable capability.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
- -
-
- - - -
diff --git a/src/components/solution-experiences/CampaignActions.astro b/src/components/solution-experiences/CampaignActions.astro deleted file mode 100644 index 1633c779..00000000 --- a/src/components/solution-experiences/CampaignActions.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import type { SolutionFunnel } from '../../data/solutionStories'; -import type { SolutionProfile } from '../../data/solutions'; - -interface Props { - solution: SolutionProfile; - funnel: SolutionFunnel; - location: string; -} - -const { solution, funnel, location } = Astro.props; ---- - - diff --git a/src/components/solution-experiences/CapabilityExperience.astro b/src/components/solution-experiences/CapabilityExperience.astro deleted file mode 100644 index 0ebc2a33..00000000 --- a/src/components/solution-experiences/CapabilityExperience.astro +++ /dev/null @@ -1,56 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
- Capability directory · live -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
- -
-
Pilot capabilities⌘ K
- -
- {solution.capabilities.map((capability, index) => ( -
{index === 0 ? '↗' : index === 1 ? '⌁' : '◇'}
{capability.label}

{capability.title}

{capability.body}

Install
- ))} -
-
Signed catalogueTyped methodsRemote services
-
-
-
- -
-
-
Composition canvas

One outcome.
Several bounded specialists.

{solution.problemBody}

-
    - {solution.steps.map((step, index) => ( -
  1. {String(index + 1).padStart(2, '0')}
    {index === 0 ? 'Intent' : index === 1 ? 'Inspection' : index === 2 ? 'Invocation' : 'Composition'}

    {step.title}

    {step.body}

  2. - ))} -
-
-
- -
-
-
Research signal{solution.signal.value}
-

{solution.signal.body}

- {solution.signal.source} ↗ -
-
- - - - -
diff --git a/src/components/solution-experiences/CommerceExperience.astro b/src/components/solution-experiences/CommerceExperience.astro deleted file mode 100644 index 7ee9be8e..00000000 --- a/src/components/solution-experiences/CommerceExperience.astro +++ /dev/null @@ -1,55 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
-
PILOT / WALLETSETTLED
-
✓
- PAYMENT CONFIRMED -

42.00 USDC

-

Compute reservation · job #8F42

-
Buyer
agent-research
Counterparty
compute-east
Mandate
compute / max 50
Network
Base
Transaction
0x71…9ac2
-
Identity verifiedLimit enforced
-
- -
- Bounded agent commerce / 10 -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
No invisible authorityNo unbounded balanceNo anonymous counterparty
-
-
-
- -
-
-
Spending mandate

Authority is a data structure.
Make it narrow.

{solution.problemBody}

-
-
Allowed purposeIsolated compute
Per-transaction limit≤ 50 USDC
Approved recipients2 service agents
Human reviewAbove 35 USDC
Expires24 hours
Mandate #M-1842Active
-
-
-
{solution.capabilities.map((capability, index) =>
Control 0{index + 1}{capability.label}

{capability.title}

{capability.body}

)}
-
- -
-
-
Transaction sequence

Request. Check. Settle. Release.

-
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '→' : '✓'}
  2. )}
- -
-
- - - - -
diff --git a/src/components/solution-experiences/CommunicationsExperience.astro b/src/components/solution-experiences/CommunicationsExperience.astro deleted file mode 100644 index de61345f..00000000 --- a/src/components/solution-experiences/CommunicationsExperience.astro +++ /dev/null @@ -1,64 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
-
-
Agent inbox3 active
-
DM
Delivery updateEmail · 10:14
1
-
SK
Supplier callbackVoice · live
●
-
AL
Address confirmedSMS · 09:42
-
-
-
-
9:41● ● ●
-
SKSupplier lineConnected · 01:42
-
-
Agent

Can we move order 1842 to the afternoon window?

Supplier

Confirmed for 14:30. I’ll send the update by email.

-
-
-
Context packetCase #1842Email ✓SMS ✓Voice ✓Human review ready →
-
- -
- Conversation operations / 08 -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- - {solution.audience} -
-
-
- - - -
-
-
Conversation continuity

One case.
Every channel attached.

{solution.problemBody}

-
- {solution.capabilities.map((capability, index) => ( -
{index === 0 ? '@' : index === 1 ? '◖' : '↔'}
{capability.label}

{capability.title}

{capability.body}

- ))} -
-
-
- -
-
-
Handoff timeline

The context travels with the conversation.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
- -
-
- - - -
diff --git a/src/components/solution-experiences/ComputeExperience.astro b/src/components/solution-experiences/ComputeExperience.astro deleted file mode 100644 index 73c72fe1..00000000 --- a/src/components/solution-experiences/ComputeExperience.astro +++ /dev/null @@ -1,60 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
- pilot run / isolated-compute -

> {story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- - {solution.audience} -
- -
-
job/8f42c1isolated
-
-

01$ pilot app call smol.run

-

02creating microVM........ done

-

03mount /workspace.......... read-only

-

04network egress........... denied

-

05execute analysis.py...... running

-
RESULT3 files · 1 chart · exit 0cpu 1.2s · memory 84MB · artifacts retained 24h
-
-
Boundary: hardware-isolated microVMAudit: enabled
-
-
-
- -
-
-
Containment model

Disposable by design.
Useful by contract.

{solution.problemBody}

-
-
Host
Supervisor
microVM
generated jobbounded input / output
-
-
- {solution.capabilities.map((capability, index) =>
0{index + 1}{capability.label}

{capability.title}

{capability.body}

)} -
-
-
- -
-
-
Job lifecycle

The host receives artifacts, not assumptions.

-
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '↓' : '✓'}
  2. )}
- -
-
- - - - -
diff --git a/src/components/solution-experiences/DataExperience.astro b/src/components/solution-experiences/DataExperience.astro deleted file mode 100644 index 57a9d027..00000000 --- a/src/components/solution-experiences/DataExperience.astro +++ /dev/null @@ -1,70 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; -const feeds = [ - ['Scientific', 'Crossref · arXiv', 'live'], - ['Markets', 'SEC · FRED', 'live'], - ['Geographic', 'Overture · OSM', 'live'], - ['Security', 'CVE · NVD', 'live'], - ['Reference', 'Wikidata', 'live'], -]; ---- - -
-
-
-
-
12 live sources connected
- Structured research / 12 -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
- -
-
Source observatoryUpdated 14:32 UTC
-
-
- papersmarketsgeosecurity - P -
-
{feeds.map(([name, source, status]) =>
{name}{source}{status}
)}
-
5 source classesStructured outputsProvenance retained
-
-
-
- -
-
-
-
Research brief / generatedQuestion Q-1842
-

Where are grid-storage projects accelerating, and what changed this quarter?

-

A structured answer joins current project filings, geographic records, market indicators, and recent papers while preserving the limits of each source.

-
Live facts
18 cited records
Interpretation
Separated
Coverage gaps
2 flagged
-
Evidence packet attached →
-
-
Output, not a data dump

Current evidence.
Visible provenance.

{solution.problemBody}

-
-
- -
-
-
Specialist surfaces

Route each question
to the source that owns it.

-
{solution.capabilities.map((capability, index) =>
Source class 0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'DISCOVER' : index === 1 ? 'QUERY' : 'COMPOSE'}
)}
-
-
- - - -
-
Research assembly

The brief shows its work.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
-
- - - -
diff --git a/src/components/solution-experiences/IntegrationExperience.astro b/src/components/solution-experiences/IntegrationExperience.astro deleted file mode 100644 index e607f354..00000000 --- a/src/components/solution-experiences/IntegrationExperience.astro +++ /dev/null @@ -1,65 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; -const inputs = ['PostgreSQL', 'Internal HTTP', 'UDP service', 'Webhook']; ---- - -
-
-
-
Integration field noteExisting system → agent edge02 / 12
-
-

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

-
- -
-
- Systems you keep - {inputs.map((input, index) =>
{String(index + 1).padStart(2, '0')}{input}
)} -
-
- Smallest viable seam -
Pilot agent edgeSDK · socket · gateway · webhook
-
-
- Agent-facing result -
Reachable capabilityinventory.lookuptrusted · typed · observable
-
-
-
-
- - - -
-
-
Four ways in

Change the boundary.
Keep the contract.

-
- {solution.capabilities.map((capability, index) => ( -
0{index + 1} / {capability.label}

{capability.title}

{capability.body}

- ))} - -
-
-
- -
-
-
{solution.signal.value}

{solution.signal.body}

{solution.signal.source} ↗
-
- Integration runbook -

One seam at a time.

-
    {solution.steps.map((step, index) =>
  1. {index + 1}

    {step.title}

    {step.body}

  2. )}
-
-
-
- - - -
diff --git a/src/components/solution-experiences/NetworkExperience.astro b/src/components/solution-experiences/NetworkExperience.astro deleted file mode 100644 index bbf2e746..00000000 --- a/src/components/solution-experiences/NetworkExperience.astro +++ /dev/null @@ -1,78 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
-
Network 01{solution.eyebrow}
-

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
- -
-
pilot://production4 peers reachable
-
- - -
Localagent-ops10.AC.20.01
-
Cloudagent-researchdirect · 34ms
-
Partneragent-supplyrelay · encrypted
-
Edgeagent-fielddirect · 18ms
-
Pidentity + trust
-
-
Mutual trust requiredApplication traffic remains encrypted
-
-
-
- -
-
-
- Architecture / 02 -

The network details disappear.
The trust decision does not.

-

{solution.problemBody}

-
-
    - {solution.capabilities.map((capability, index) => ( -
  1. - {String(index + 1).padStart(2, '0')} -
    {capability.label}

    {capability.title}

    {capability.body}

    - -
  2. - ))} -
-
-
- -
-
- -
-
Connection trace

Unknown endpoint → verified peer

-
    - {solution.steps.map((step, index) => ( -
  1. {String(index + 1).padStart(2, '0')}

    {step.title}

    {step.body}

  2. - ))} -
-
-
-
- - - - -
diff --git a/src/components/solution-experiences/SalesExperience.astro b/src/components/solution-experiences/SalesExperience.astro deleted file mode 100644 index 8ab1cceb..00000000 --- a/src/components/solution-experiences/SalesExperience.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
-
Revenue workflow / Account room 09

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

-
- - -
-
- - - -
-
-
Account production line

Every stage returns
a usable sales object.

{solution.problemBody}

-
    {solution.steps.map((step, index) =>
  1. 0{index + 1}
    {index < 3 ? 'Complete' : 'Seller review'}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '→' : '✓'}
  2. )}
-
-
- -
-
-
Composable stack

Specialists contribute.
The brief stays coherent.

{solution.capabilities.map((capability, index) =>
{index + 1}{capability.label}

{capability.title}

{capability.body}

)}
- -
-
- - - -
diff --git a/src/components/solution-experiences/SearchExperience.astro b/src/components/solution-experiences/SearchExperience.astro deleted file mode 100644 index c0dfa5e4..00000000 --- a/src/components/solution-experiences/SearchExperience.astro +++ /dev/null @@ -1,276 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; - -const installCommand = 'pilotctl appstore install io.pilot.cosift'; -const helpCommand = "pilotctl appstore call io.pilot.cosift cosift.help '{}'"; -const searchCommand = `pilotctl appstore call io.pilot.cosift cosift.search '{"q":"raft leader election","retriever":"hybrid","k":"3"}'`; - -const modes = [ - { - speed: 'Fast', - method: 'cosift.search', - title: 'Return ranked evidence.', - body: 'Search the indexed corpus with BM25, dense, or hybrid retrieval. The response carries URLs, titles, excerpts, scores, and the retriever that actually ran.', - output: 'hits[] · retriever · warnings · took', - }, - { - speed: 'Medium', - method: 'cosift.answer', - title: 'Answer one question with sources.', - body: 'Retrieve a bounded source set, synthesize a direct answer, and keep numeric citations attached to the documents supplied to the model.', - output: 'answer · sources[] · model · took', - }, - { - speed: 'Slow', - method: 'cosift.research', - title: 'Plan a multi-step research run.', - body: 'Break a larger question into sub-queries, retrieve across them, fuse the evidence, and produce one cited report within explicit work limits.', - output: 'plan · answer · sources[] · took', - }, -]; - -const methodGroups = [ - { - label: 'Retrieve', - methods: [ - { name: 'cosift.search', body: 'Rank documents with lexical, dense, or hybrid retrieval.' }, - { name: 'cosift.find_similar', body: 'Find neighboring documents from an indexed URL or supplied text.' }, - { name: 'cosift.contents', body: 'Return cleaned document text for one URL or a batch.' }, - ], - }, - { - label: 'Synthesize', - methods: [ - { name: 'cosift.answer', body: 'Generate a single cited answer from retrieved sources.' }, - { name: 'cosift.research', body: 'Run bounded planning, multi-retrieval, fusion, and synthesis.' }, - ], - }, - { - label: 'Inspect', - methods: [ - { name: 'cosift.stats', body: 'Inspect corpus shape and available retrievers.' }, - { name: 'cosift.health', body: 'Check whether the configured backend is reachable.' }, - { name: 'cosift.help', body: 'Discover methods, parameters, kinds, and latency classes locally.' }, - ], - }, -]; ---- - -
-
-
- - -
-
- Open-source search for agents -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
    -
  • Use the public corpus
  • -
  • Run your own backend
  • -
  • Structured JSON throughout
  • -
-
- -
-
- - io.pilot.cosift - ready -
- -
- Call - - {searchCommand} -
-
- Representative response shape -
{`{
-  "query": "raft leader election",
-  "retriever": "bm25+dense:rrf",
-  "hits": [
-    { "url": "…", "title": "…", "excerpt": "…" },
-    { "url": "…", "title": "…", "excerpt": "…" }
-  ],
-  "warnings": [],
-  "took": "…"
-}`}
-
-
- JSON in · JSON out - No invented confidence score -
-
-
-
-
- -
-
-
- Choose the work, not another integration -
-

One product.
Three research depths.

-

Agents can choose a cheap retrieval call, a cited answer, or a bounded research run. cosift.help describes the choice at runtime.

-
-
-
- {modes.map((mode, index) => ( -
-
{String(index + 1).padStart(2, '0')}{mode.speed}
- {mode.method} -

{mode.title}

-

{mode.body}

-
Returns{mode.output}
-
- ))} -
-
-
- -
-
-
- How Cosift reaches an agent -

A small front door.
A complete search stack.

-

The Pilot app is a thin local adapter. Crawling, indexing, retrieval, and synthesis stay in the Cosift backend—either the public instance or one you operate.

-
- - - -
-
- Install through Pilot - Two commands to a discoverable research surface. -
-
    -
  1. 1{installCommand}
  2. -
  3. 2{helpCommand}
  4. -
-

The app declares its file, audit, and network grants. Pilot verifies the catalogue, bundle, manifest signature, and pinned binary before execution. The Pilot adapter buffers answer and research into one JSON reply today; direct Cosift HTTP supports SSE streaming.

-
-
-
- -
-
-
- The published agent surface -
-

Eight methods.
No API archaeology.

-

The current Pilot app exposes the useful product surface without copying the entire operator API into an agent’s tool list.

-
-
-
- {methodGroups.map((group) => ( -
-

{group.label}

-
- {group.methods.map((method) => ( -
{method.name}

{method.body}

- ))} -
-
- ))} -
-
-
- -
-
-
- Inspect what really happened -

Cosift does not turn retrieval into a mystery number.

-

Source records stay attached to synthesized answers. Responses identify the effective retriever, report capability fallbacks as warnings, and do not pretend that an unfitted global confidence model is calibrated.

- Read the response contracts ↗ -
-
-
requestedretriever=hybrid
-
executedbm25+dense:rrf
-
evidencesources[]
-
confidencecalibrated: false
-
When a configured capability is unavailable, the response includes a warning instead of quietly presenting the fallback as the requested path.
-
- -
-
- - - - -
- - diff --git a/src/components/solution-experiences/SecurityExperience.astro b/src/components/solution-experiences/SecurityExperience.astro deleted file mode 100644 index 11368841..00000000 --- a/src/components/solution-experiences/SecurityExperience.astro +++ /dev/null @@ -1,64 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; -const permissions = [ - ['Package signature', 'verified', 'allow'], - ['Binary hash', 'pinned', 'allow'], - ['Filesystem', '/workspace only', 'limit'], - ['Outbound network', 'deny by default', 'deny'], -]; ---- - -
-
-
- -
-
Execution authority reviewDecision required
-
-
- Agent application / privileged action -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

- -
-
-
Execution decisionAllowed with limits
-

wallet.pay

-

Authority is derived from a verified package and an explicit local grant—not from the model request alone.

-
{permissions.map(([key, value, tone]) =>
{key}
{value}
)}
-
Audit event #P-1842Policy v4.2
-
-
-
-
-
- - - -
-
-
Control surface

Four checks between intent
and execution.

{solution.problemBody}

-
- {solution.capabilities.map((capability, index) => ( -
Control 0{index + 1}
{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'VERIFY' : index === 1 ? 'SCOPE' : 'INSPECT'}
- ))} -
-
-
- -
-
- -
Audit sequence

The trail survives the call.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
-
-
- - - -
diff --git a/src/components/solution-experiences/WebExperience.astro b/src/components/solution-experiences/WebExperience.astro deleted file mode 100644 index ea4b91d2..00000000 --- a/src/components/solution-experiences/WebExperience.astro +++ /dev/null @@ -1,61 +0,0 @@ ---- -import SolutionFunnel from '../SolutionFunnel.astro'; -import SolutionProof from '../SolutionProof.astro'; -import SolutionRelated from '../SolutionRelated.astro'; -import CampaignActions from './CampaignActions.astro'; -import type { SolutionExperienceProps } from './types'; - -const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; ---- - -
-
-
-
- Web task router / 06 -

{story.heroLead}
{story.heroEmphasis}

-

{story.lede}

-
- -
-
https://supplier.example/portal/orders/1842
⋯
-
Live browserClean extractionSite guidanceTask #1842 · running
-
- -
-
SUPPLIER PORTALOrdersInventoryAccount
-
ORDER #1842

Confirm revised delivery

Dock availability changed. Select a new appointment window.

Aug 14 · 09:00Aug 14 · 14:30 ✓Aug 15 · 11:00
-
-
10:14:02 page ready10:14:04 option selected10:14:04 approval requested
-
-
-
-
- -
-
-
Choose by page behavior

Three surfaces.
One task contract.

{solution.problemBody}

-
- {solution.capabilities.map((capability, index) => ( -
Route 0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'Dynamic' : index === 1 ? 'Readable' : 'Repeatable'}
- ))} -
-
-
- - - -
-
-
Task trace

From intent to observable result.

{story.workflowHeading.body}

-
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
- -
-
- - - -
diff --git a/src/components/solution-experiences/types.ts b/src/components/solution-experiences/types.ts deleted file mode 100644 index e39376de..00000000 --- a/src/components/solution-experiences/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { SolutionFunnel, SolutionStory } from '../../data/solutionStories'; -import type { SolutionProfile } from '../../data/solutions'; - -export interface SolutionExperienceProps { - solution: SolutionProfile; - story: SolutionStory; - funnel: SolutionFunnel; - turnstileSiteKey?: string; -} diff --git a/src/data/apps.ts b/src/data/apps.ts index fe124ff7..cc8224b9 100644 --- a/src/data/apps.ts +++ b/src/data/apps.ts @@ -25,7 +25,7 @@ export interface App { sourceUrl: string | null; homepage: string | null; methods: AppMethod[]; changelog: AppChangelog[]; grants: string[]; bundles: AppBundle[]; installedBytes: number | null; - depends: AppDependency[]; protection: string; + depends: AppDependency[]; featured: boolean; real: boolean; inCatalogue: boolean; icon: AppIcon; minPilotVersion: string; runtimes: string[]; publishedAt: string | null; updatedAt: string | null; @@ -257,7 +257,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -506,7 +505,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -762,7 +760,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -1041,7 +1038,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -1338,7 +1334,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -1524,7 +1519,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -1720,7 +1714,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -2519,7 +2512,6 @@ export const apps: App[] = [ ], "installedBytes": 9376865, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -2959,7 +2951,6 @@ export const apps: App[] = [ ], "installedBytes": 8922112, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -3207,7 +3198,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "guarded", "featured": true, "real": true, "inCatalogue": true, @@ -3422,7 +3412,6 @@ export const apps: App[] = [ ], "installedBytes": 9624599, "depends": [], - "protection": "guarded", "featured": true, "real": true, "inCatalogue": true, @@ -3607,7 +3596,6 @@ export const apps: App[] = [ ], "installedBytes": 9620163, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -3830,7 +3818,6 @@ export const apps: App[] = [ ], "installedBytes": 9634438, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -4043,7 +4030,6 @@ export const apps: App[] = [ ], "installedBytes": 9625086, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -4265,7 +4251,6 @@ export const apps: App[] = [ ], "installedBytes": 8679650, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -4483,7 +4468,6 @@ export const apps: App[] = [ ], "installedBytes": 8641298, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -4580,7 +4564,6 @@ export const apps: App[] = [ ], "installedBytes": 13824, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -4727,7 +4710,6 @@ export const apps: App[] = [ ], "installedBytes": 8625202, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -4950,7 +4932,6 @@ export const apps: App[] = [ ], "installedBytes": 9633952, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -5160,7 +5141,6 @@ export const apps: App[] = [ ], "installedBytes": 9706567, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -5429,7 +5409,6 @@ export const apps: App[] = [ ], "installedBytes": 5020350, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -5641,7 +5620,6 @@ export const apps: App[] = [ ], "installedBytes": 9624816, "depends": [], - "protection": "guarded", "featured": true, "real": true, "inCatalogue": true, @@ -5830,7 +5808,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -6009,7 +5986,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -6192,7 +6168,6 @@ export const apps: App[] = [ ], "installedBytes": null, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -6310,7 +6285,6 @@ export const apps: App[] = [ ], "installedBytes": 9113971, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -6491,7 +6465,6 @@ export const apps: App[] = [ ], "installedBytes": 9123313, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -6915,7 +6888,6 @@ export const apps: App[] = [ ], "installedBytes": 9324763, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, @@ -7124,7 +7096,6 @@ export const apps: App[] = [ ], "installedBytes": 9629519, "depends": [], - "protection": "guarded", "featured": false, "real": true, "inCatalogue": true, @@ -7417,7 +7388,6 @@ export const apps: App[] = [ ], "installedBytes": 9251815, "depends": [], - "protection": "shareable", "featured": false, "real": true, "inCatalogue": true, diff --git a/src/data/bannerImageManifest.json b/src/data/bannerImageManifest.json index 415b7992..5382304c 100644 --- a/src/data/bannerImageManifest.json +++ b/src/data/bannerImageManifest.json @@ -245,9 +245,9 @@ "width": 1200, "height": 669 }, - "/blog/banners/hipaa-compliant-agent-communication.webp": { - "src": "/blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp", - "srcset": "/blog/banners/optimized/hipaa-compliant-agent-communication-720.webp 720w, /blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp 1200w", + "/blog/banners/agent-communication-for-healthcare-data.webp": { + "src": "/blog/banners/optimized/agent-communication-for-healthcare-data-1200.webp", + "srcset": "/blog/banners/optimized/agent-communication-for-healthcare-data-720.webp 720w, /blog/banners/optimized/agent-communication-for-healthcare-data-1200.webp 1200w", "width": 1200, "height": 630 }, diff --git a/src/data/blogPosts.json b/src/data/blogPosts.json index 68dfe1c5..ad0925d4 100644 --- a/src/data/blogPosts.json +++ b/src/data/blogPosts.json @@ -191,7 +191,7 @@ { "slug": "shell-online-live-terminal-browser-link", "title": "shell.online: A Live Browser Link for Any Terminal", - "description": "shell.online turns a running terminal command into a browser link you can watch or type into from any device. Open source, built by Pilot Protocol.", + "description": "shell.online turns a running terminal command into a browser link you can watch or type into from any device. Open source, built by Vulture Labs, the team behind Pilot.", "date": "Sep 2", "category": "Blog", "tags": [ @@ -481,30 +481,6 @@ "banner": "banners/overlay-networking-secure-ai-agent-communication-explained.jpg", "iso_date": "2026-04-27" }, - { - "slug": "openanp-ai-alternatives-6", - "title": "Top 6 openanp.ai Alternatives 2026", - "description": "Discover 6 openanp.ai alternatives for efficient AI communication solutions and comparison benefits in 2026.", - "date": "Apr 25", - "category": "Blog", - "tags": [ - "blog" - ], - "banner": "banners/openanp-ai-alternatives-6.jpg", - "iso_date": "2026-04-25" - }, - { - "slug": "github-com-alternatives-6", - "title": "Top 6 GitHub.com Alternatives 2026", - "description": "Discover 6 GitHub.com alternatives for secure collaboration in multi-cloud environments. Compare top options for effective development.", - "date": "Apr 23", - "category": "Blog", - "tags": [ - "blog" - ], - "banner": "banners/github-com-alternatives-6.jpg", - "iso_date": "2026-04-23" - }, { "slug": "persistent-network-addressing-secure-ai-systems", "title": "Persistent network addressing for secure AI systems", @@ -544,7 +520,7 @@ { "slug": "userspace-tcp-over-udp-stack-pure-go", "title": "Building a Userspace TCP-over-UDP Stack in Pure Go", - "description": "Sliding windows, Nagle's algorithm, RTO, and AES-GCM all in userspace, with zero third-party dependencies. How Pilot Protocol's transport layer works.", + "description": "Sliding windows, Nagle's algorithm, RTO, and AES-GCM all in userspace, built on Go's standard library. How Pilot Protocol's transport layer works.", "date": "Apr 15", "category": "Engineering", "tags": [ @@ -736,21 +712,6 @@ "banner": "banners/what-is-protocol-overlay-fundamentals-practical.jpg", "iso_date": "2026-08-07" }, - { - "slug": "scriptorium-replace-agentic-active-research-ready-intelligence", - "title": "Scriptorium: Replace Agentic Active Research With Ready Intelligence", - "description": "Scriptorium replaces the search-fetch-filter-compress agent research loop with a continuously updated, high-signal brief 92% fewer tokens, half the latency, identical decision quality.", - "date": "Apr 3", - "year": 2026, - "category": "Blog", - "tags": [ - "blog", - "services", - "scriptorium" - ], - "banner": "banners/scriptorium-replace-agentic-active-research-ready-intelligence.png", - "iso_date": "2026-04-03" - }, { "slug": "secure-network-infrastructure-ai-agents-practical-guide", "title": "Secure network infrastructure for AI agents: A practical guide", @@ -776,13 +737,13 @@ "iso_date": "2026-04-01" }, { - "slug": "enterprise-production-complete-identity-directory-audit-export", - "title": "Enterprise Implementation Milestone: 99 Features, 234 Tests", - "description": "A March 2026 implementation milestone for Pilot enterprise controls, including OIDC/JWT validation, directory mapping, blueprints, audit export, and early-access rollout boundaries.", + "slug": "self-hosted-registry-identity-directory-sync-audit-export", + "title": "Identity, Directory Sync and Audit Export in the Open-Source Rendezvous", + "description": "OIDC/JWT validation, identity bridges, directory sync, blueprint provisioning and Splunk, CEF or JSON audit export in the Pilot rendezvous you run yourself.", "date": "Mar 29", - "category": "Enterprise", + "category": "Operations", "tags": [ - "enterprise", + "self-hosting", "identity", "audit", "directory-sync", @@ -857,8 +818,8 @@ }, { "slug": "multi-agent-system-networking-guide-ai-developers", - "title": "Multi-agent system networking guide: 86.7% failure fix", - "description": "Learn how to build secure, scalable multi-agent system networks. Covers architecture, protocols, benchmarking, and how to cut 86.7% failure rates in MAS.", + "title": "Multi-agent system networking guide for AI developers", + "description": "Learn how to build secure, scalable multi-agent system networks. Covers architecture, protocols, benchmarking, and the communication failures behind high MAS failure rates.", "date": "Jul 21", "category": "Blog", "tags": [ @@ -869,12 +830,12 @@ }, { "slug": "enterprise-phase-3-rbac-policies-audit-fleet", - "title": "Enterprise Phase 3: RBAC, Policies, Audit Trail, and Fleet Enrollment", - "description": "Pilot Protocol v1.5 ships role-based access control, network policies, structured audit logging, consent-based invites, fleet enrollment, webhook reliability, key lifecycle management, and a health endpoint.", + "title": "RBAC, Policies and Audit Trail in the Open-Source Rendezvous", + "description": "Roles, network policies, consent-based invites, an audit trail, fleet enrollment, signed webhooks and key expiry in the open-source Pilot rendezvous.", "date": "Mar 27", - "category": "Enterprise", + "category": "Operations", "tags": [ - "enterprise", + "self-hosting", "security", "rbac", "audit" @@ -882,51 +843,9 @@ "banner": "banners/enterprise-phase-3-rbac-policies-audit-fleet.webp", "iso_date": "2026-03-27" }, - { - "slug": "private-networks-now-in-testing", - "title": "Private Networks: Now in Testing", - "description": "Private networks are live on the Pilot Protocol production registry. Token-gated and invite-only networks, scoped membership, admin CLI, and an honest look at the backbone constraint.", - "date": "Mar 25", - "category": "Enterprise", - "tags": [ - "enterprise", - "networks", - "security" - ], - "banner": "banners/private-networks-now-in-testing.webp", - "iso_date": "2026-03-25" - }, - { - "slug": "enterprise-identity-integration-pilot-protocol", - "title": "Enterprise Identity Integration: Entra ID, SPIFFE, OPA, and Beyond", - "description": "How Pilot Protocol will integrate with enterprise identity providers (Entra ID, Okta, GCP IAM), policy engines (OPA, Vault), and compliance tools (Splunk, OpenTelemetry).", - "date": "Mar 21", - "category": "Enterprise", - "tags": [ - "enterprise", - "identity", - "integration" - ], - "banner": "banners/enterprise-identity-integration-pilot-protocol.webp", - "iso_date": "2026-03-21" - }, - { - "slug": "enterprise-private-networks-roadmap", - "title": "Enterprise Private Networks: The Roadmap", - "description": "Pilot Protocol is closing the gap between connectivity tool and enterprise infrastructure. SYN-level trust enforcement, tag-based policies, cascading revocation, and OIDC/SPIFFE identity integration.", - "date": "Mar 23", - "category": "Security", - "tags": [ - "enterprise", - "security", - "roadmap" - ], - "banner": "banners/enterprise-private-networks-roadmap.webp", - "iso_date": "2026-03-23" - }, { "slug": "python-sdk-pilot-protocol", - "title": "Announcing the Pilot Protocol Python SDK v0.1.1", + "title": "Announcing the Pilot Protocol Python SDK", "description": "Native Python bindings for Pilot Protocol. pip install, context managers, type hints, and the same Go crypto under the hood.", "date": "Mar 19", "category": "Integration", @@ -940,7 +859,7 @@ { "slug": "build-openclaw-agent-self-organizes-pilot", "title": "Build an OpenClaw Agent That Self-Organizes Into a Pilot Network", - "description": "Step-by-step tutorial: build a Python agent that autonomously joins the Pilot network, discovers peers, establishes trust, accepts tasks, and builds reputation.", + "description": "Step-by-step tutorial: build a Python agent that autonomously joins the Pilot network, establishes trust with its peers, and serves their requests.", "date": "Jul 19", "category": "Tutorial", "tags": [ @@ -992,7 +911,7 @@ { "slug": "clawhub-to-live-network-openclaw-discovery", "title": "From ClawHub to Live Network: How OpenClaw Agents Discover Peers", - "description": "The complete journey from clawhub install to live network participation: STUN discovery, registration, tag search, and trust negotiation.", + "description": "The complete journey from clawhub install to live network participation: STUN discovery, registration, finding peers, and trust negotiation.", "date": "Mar 13", "category": "Guide", "tags": [ @@ -1017,7 +936,7 @@ }, { "slug": "sociology-of-machines-626-agents", - "title": "The Sociology of Machines: What 626 Agents Taught Us", + "title": "The Sociology of Machines: Hundreds of Agents", "description": "Autonomous AI agents form social structures identical to human networks: preferential attachment, triadic closure, Dunbar scaling. A new domain of machine sociology.", "date": "Mar 9", "category": "AI/ML", @@ -1030,8 +949,8 @@ }, { "slug": "building-custom-pilot-skills-openclaw", - "title": "Building Custom Pilot Skills for OpenClaw Agents", - "description": "How to create, structure, and publish custom Pilot Protocol skills on ClawHub. Error handling, workflow design, and runtime context for autonomous agents.", + "title": "Building Custom Pilot Skills with OpenClaw", + "description": "Write a SKILL.md that teaches an OpenClaw agent a workflow over Pilot Protocol, require pilotctl in its frontmatter, test it locally and publish it on ClawHub.", "date": "Mar 7", "category": "Tutorial", "tags": [ @@ -1083,7 +1002,7 @@ }, { "slug": "how-626-agents-autonomously-adopted-pilot", - "title": "How 626 Agents Autonomously Adopted a Network Protocol", + "title": "How Hundreds of Agents Autonomously Adopted Pilot", "description": "The story of how OpenClaw agents independently discovered, installed, and formed a trust network on Pilot Protocol -- without any human direction.", "date": "Jul 13", "category": "AI/ML", @@ -1097,7 +1016,7 @@ { "slug": "federated-learning-p2p-communication", "title": "P2P Communication for Federated Learning Nodes", - "description": "gRPC adds 200ms per round. Federated learning spends 58-93% of time on communication. Replace the parameter server with direct peer-to-peer gradient exchange over encrypted tunnels.", + "description": "Communication often dominates federated learning time. Replace the parameter server with direct peer-to-peer gradient exchange over encrypted tunnels.", "date": "Jun 11", "category": "AI/ML", "tags": [ @@ -1110,7 +1029,7 @@ { "slug": "chain-ai-models-across-machines", "title": "Chain AI Models Across Machines With Persistent Tunnels", - "description": "Multi-model pipelines lose 25-75% throughput to per-request HTTP overhead. Persistent tunnels connect once, stream continuously, and eliminate connection setup latency.", + "description": "Multi-model pipelines pay HTTP connection setup at every hop. Persistent tunnels connect once, stream continuously, and skip per-request connection setup.", "date": "Jun 15", "category": "AI/ML", "tags": [ @@ -1136,7 +1055,7 @@ { "slug": "move-beyond-rest-persistent-connections-for-agents", "title": "Beyond REST: Persistent Connections for AI Agents", - "description": "REST polling wastes 98.5% of requests. WebSockets break at scale. Persistent bidirectional connections solve real-time agent communication without the infrastructure pain.", + "description": "Compare REST polling, WebSockets, gRPC and persistent encrypted tunnels for real-time agent communication, with code examples and a migration path.", "date": "Jul 7", "category": "Architecture", "tags": [ @@ -1149,7 +1068,7 @@ { "slug": "lightweight-swarm-communication-drones-robots", "title": "Lightweight Swarm Communication for Drones and Robots", - "description": "ROS2/DDS multicast storms kill WiFi. MAVLink has no encryption. A single 10MB binary gives robot swarms encrypted pub/sub, NAT traversal, and tag-based discovery.", + "description": "ROS2/DDS multicast storms kill WiFi. MAVLink has no encryption. Pilot's static binaries give robot swarms encrypted pub/sub, NAT traversal, and registry-based discovery.", "date": "Jun 21", "category": "Guide", "tags": [ @@ -1174,8 +1093,8 @@ }, { "slug": "build-ai-agent-marketplace-discovery-reputation", - "title": "Build an AI Agent Marketplace With Discovery and Reputation", - "description": "Solve the ghost agent problem. Tag-based capability discovery, cryptographic trust handshakes, and behavior-based reputation create a self-regulating agent marketplace without a centralized platform.", + "title": "Build an AI Agent Marketplace on Pilot: Discovery, Trust and Reputation", + "description": "What Pilot gives an agent marketplace (identity, signed trust handshakes, messaging, Wallet app payments) and what you build yourself: discovery and reputation.", "date": "Jul 11", "category": "Architecture", "tags": [ @@ -1188,7 +1107,7 @@ { "slug": "distributed-monitoring-without-prometheus", "title": "Distributed Monitoring Without Prometheus or Grafana", - "description": "One binary per node, shell scripts for metrics, encrypted pub/sub for delivery. Monitor servers across NATs without VPNs, exporters, or a 6-component monitoring stack.", + "description": "The Pilot daemon on each node, shell scripts for metrics, encrypted pub/sub for delivery. Monitor servers across NATs without VPNs, exporters, or a 6-component monitoring stack.", "date": "Jun 17", "category": "Operations", "tags": [ @@ -1227,7 +1146,7 @@ { "slug": "how-ai-agents-discover-each-other", "title": "How AI Agents Discover Each Other on a Live Network", - "description": "Agent discovery without manual config files. Registry-based hostname lookup, tag-based capability search, and runtime self-discovery.", + "description": "Agent discovery without manual config files. Registry-based hostname lookup, descriptive tags, a directory of service agents, and runtime self-discovery.", "date": "May 25", "category": "Guide", "tags": [ @@ -1240,7 +1159,7 @@ { "slug": "connect-ai-agents-behind-nat-without-vpn", "title": "Connect AI Agents Behind NAT Without a VPN", - "description": "88% of networks involve NAT. Pilot's three-tier traversal -- STUN, hole-punching, relay -- connects agents behind any firewall automatically. No VPN, no port forwarding, no ngrok.", + "description": "Most networks involve NAT. Pilot's three-tier traversal -- STUN, hole-punching, relay -- connects agents behind NAT automatically. No VPN, no port forwarding, no ngrok.", "date": "May 27", "category": "Guide", "tags": [ @@ -1253,7 +1172,7 @@ { "slug": "run-agent-network-without-cloud-dependency", "title": "Run Your Agent Network Without Cloud Dependency", - "description": "Insteon, Wemo, Google IoT Core -- cloud services shut down and devices become paperweights. Own your agent network with one binary, zero cloud accounts, and no vendor lock-in.", + "description": "Insteon, Wemo, Google IoT Core -- cloud services shut down and devices become paperweights. Own your agent network with open-source binaries, no cloud accounts, and a coordination layer you can self-host.", "date": "May 29", "category": "Guide", "tags": [ @@ -1290,7 +1209,7 @@ "iso_date": "2026-06-03" }, { - "slug": "hipaa-compliant-agent-communication", + "slug": "agent-communication-for-healthcare-data", "title": "Technical Controls for Healthcare AI Agent Communication", "description": "How encrypted tunnels, peer trust, and network audit events can support a healthcare AI security architecture, with clear boundaries for operator responsibilities.", "date": "Jun 7", @@ -1299,7 +1218,7 @@ "HIPAA", "healthcare" ], - "banner": "banners/hipaa-compliant-agent-communication.webp", + "banner": "banners/agent-communication-for-healthcare-data.webp", "iso_date": "2026-06-07" }, { @@ -1331,7 +1250,7 @@ { "slug": "build-multi-agent-network-five-minutes", "title": "Build a Multi-Agent Network in 5 Minutes", - "description": "From install to working demo. Start two agents, establish trust, send messages, transfer files, and run benchmarks in under 5 minutes.", + "description": "From install to working demo. Start two agents, establish trust, send messages, transfer files, and use pub/sub in about 5 minutes.", "date": "Feb 28", "category": "Tutorial", "tags": [ @@ -1384,8 +1303,8 @@ }, { "slug": "build-agent-swarm-self-organizes", - "title": "Build an Agent Swarm That Self-Organizes via Reputation", - "description": "10 agents that discover peers, establish trust, delegate tasks, execute with LLMs, and build reputation. No orchestrator. The swarm self-organizes.", + "title": "Build a Self-Organizing Agent Swarm: No Central Scheduler", + "description": "Agents announce roles on a pub/sub topic, form trust in pairs, and send work straight to the fastest peer with the right role. A Python tutorial on Pilot.", "date": "May 23", "category": "Tutorial", "tags": [ @@ -1396,8 +1315,8 @@ }, { "slug": "replace-message-broker-twelve-lines-go", - "title": "Replace Your Agent Message Broker with 12 Lines of Go", - "description": "Build event-driven agent architectures without Kafka, RabbitMQ, or Redis. Pilot's built-in pub/sub handles topic routing, wildcard subscriptions, and persistent connections.", + "title": "Agent Pub/Sub in Twelve Lines of Go, With the Broker Built In", + "description": "Every Pilot daemon runs a small pub/sub broker on port 1002. Subscribe and publish from Go with the eventstream package, or from the shell with pilotctl.", "date": "Feb 24", "category": "Tutorial", "tags": [ @@ -1410,7 +1329,7 @@ { "slug": "http-services-over-encrypted-overlay", "title": "Run HTTP Services Over an Encrypted Agent Overlay", - "description": "Standard Go HTTP servers running on Pilot ports. Gateway exposes them as local IPs. REST API mesh with automatic encryption, zero TLS configuration.", + "description": "Standard Go HTTP servers running on Pilot ports, an optional gateway that maps them to local IPs, and a REST API mesh with automatic encryption and zero TLS configuration.", "date": "Feb 22", "category": "Tutorial", "tags": [ @@ -1436,7 +1355,7 @@ { "slug": "nat-traversal-ai-agents-deep-dive", "title": "NAT Traversal for AI Agents: A Deep Dive", - "description": "STUN discovery, UDP hole-punching, relay fallback, and beacon gossip. The definitive reference on making agents reachable through any NAT type.", + "description": "STUN discovery, UDP hole-punching, relay fallback, and beacon gossip: how Pilot gets agents talking behind NAT, from direct paths to relay.", "date": "Feb 6", "category": "Guide", "tags": [ @@ -1475,11 +1394,11 @@ { "slug": "private-agent-network-company", "title": "Building a Private Agent Network for Your Company", - "description": "Set up a private Pilot network, enroll agents, configure trust policies, bridge legacy systems via gateway, and monitor with the built-in dashboard.", + "description": "Self-host the rendezvous server, create a private Pilot network, enroll agents, set trust and port policy, bridge legacy systems via the gateway, and ship logs to your SIEM.", "date": "Feb 12", "category": "Guide", "tags": [ - "enterprise", + "self-hosting", "deployment" ], "banner": "banners/private-agent-network-company.webp", @@ -1501,7 +1420,7 @@ { "slug": "contributing-codebase-tour", "title": "Contributing to Pilot Protocol: A Tour of the Codebase", - "description": "Package map, test environment, how to add a new service, linter gotchas, and good first issues for new contributors.", + "description": "Repository map, test environment, how to add a new service, layering rules, and where to start for new contributors.", "date": "Feb 18", "category": "Guide", "tags": [ diff --git a/src/data/docsNav.ts b/src/data/docsNav.ts index d82379b4..7f4c2b98 100644 --- a/src/data/docsNav.ts +++ b/src/data/docsNav.ts @@ -49,14 +49,16 @@ export const docsNav: NavItem[] = [ icon: '' }, { label: 'App Store', href: '/docs/app-store', slug: 'app-store', icon: '' }, - { label: 'Pilot MCP', href: '/docs/mcp', slug: 'mcp', + { label: 'Pilot Cloud', href: '/docs/mcp', slug: 'mcp', + icon: '' }, + { label: 'pilot-mcp (local)', href: '/docs/pilot-mcp', slug: 'pilot-mcp', icon: '' }, { label: 'Consent & Privacy', href: '/docs/consent', slug: 'consent', icon: '' }, - // Enterprise - { section: 'Enterprise', label: 'Security', href: '/docs/security', slug: 'security', + { label: 'Security', href: '/docs/security', slug: 'security', icon: '' }, - { label: 'Enterprise Overview', href: '/docs/enterprise', slug: 'enterprise', + // Self-hosted registry + { section: 'Self-hosted registry', label: 'Self-hosting the registry', href: '/docs/enterprise', slug: 'enterprise', icon: '' }, { label: 'RBAC & Access Control', href: '/docs/enterprise-rbac', slug: 'enterprise-rbac', icon: '' }, @@ -64,7 +66,7 @@ export const docsNav: NavItem[] = [ icon: '' }, { label: 'Network Policies', href: '/docs/enterprise-policies', slug: 'enterprise-policies', icon: '' }, - { label: 'Audit & Compliance', href: '/docs/enterprise-audit', slug: 'enterprise-audit', + { label: 'Audit Log & Export', href: '/docs/enterprise-audit', slug: 'enterprise-audit', icon: '' }, { label: 'Blueprints', href: '/docs/enterprise-blueprints', slug: 'enterprise-blueprints', icon: '' }, diff --git a/src/data/learnGuides.ts b/src/data/learnGuides.ts index b2939f76..7ffd556f 100644 --- a/src/data/learnGuides.ts +++ b/src/data/learnGuides.ts @@ -10,8 +10,8 @@ export interface LearnGuide { export const learnGuides: LearnGuide[] = [ { slug: 'install-pilot-skills-in-meta-muse', - title: "Install Pilot Protocol Skills in Meta Muse's Agent VM", - description: 'One command installs the Pilot skills and a Pilot node in Muse\'s agent VM, online through its HTTPS-only proxy with rotating credentials, no root needed.', + title: 'Install Pilot Protocol Skills in a Proxy-Only Agent VM', + description: 'One command installs the Pilot skills and a Pilot node in an agent VM, such as one in Meta Muse, whose only way out is an HTTPS proxy. No root needed.', date: 'September 23, 2026', isoDate: '2026-09-23', track: 'Foundations', @@ -19,7 +19,7 @@ export const learnGuides: LearnGuide[] = [ { slug: 'pilot-node-through-https-only-egress-proxy', title: 'Run a Pilot Node Through an HTTPS-Only Egress Proxy', - description: 'Register a node when UDP is blocked, DNS is poisoned, and the only egress is an HTTPS CONNECT proxy: SNI router, mount namespace, trust modes, verification.', + description: 'Register a node when UDP is blocked and the only egress is an HTTPS CONNECT proxy: native proxy support since v1.13.11, and the older SNI-router recipe.', date: 'September 23, 2026', isoDate: '2026-09-23', track: 'Transport', diff --git a/src/data/releaseManifest.ts b/src/data/releaseManifest.ts index 164f4cba..1ded4800 100644 --- a/src/data/releaseManifest.ts +++ b/src/data/releaseManifest.ts @@ -5,10 +5,38 @@ interface ReleaseManifest { latest_stable: string; } -// One local, deterministic source for the version shown across static pages. -// The installer consumes this same public manifest at runtime. -export const releaseManifest = JSON.parse( - readFileSync(resolve(process.cwd(), 'public/.well-known/latest.json'), 'utf8'), -) as ReleaseManifest; +// On pilotprotocol.network, /.well-known/latest.json is rendered per request by +// the pilot-release Worker (pilot-protocol/release) from the GitHub releases of +// pilot-protocol/pilotprotocol; install.sh reads it there. The Worker owns +// /.well-known/*, so public/.well-known/latest.json never serves in production: +// it is the snapshot for preview deploys and the fallback for offline builds. +const LIVE_MANIFEST_URL = 'https://pilotprotocol.network/.well-known/latest.json'; +const STABLE_TAG = /^v\d+\.\d+\.\d+$/; -export const stableVersion = releaseManifest.latest_stable.replace(/^v/, ''); +function snapshotManifest(): ReleaseManifest { + return JSON.parse( + readFileSync(resolve(process.cwd(), 'public/.well-known/latest.json'), 'utf8'), + ) as ReleaseManifest; +} + +async function liveManifest(): Promise { + try { + const res = await fetch(LIVE_MANIFEST_URL, { signal: AbortSignal.timeout(5000) }); + if (!res.ok) return null; + const body = (await res.json()) as Partial; + return typeof body.latest_stable === 'string' && STABLE_TAG.test(body.latest_stable) + ? (body as ReleaseManifest) + : null; + } catch { + return null; + } +} + +let stable: Promise | undefined; + +// Resolved once per build: the live release when the manifest answers, else +// the checked-in snapshot, so a release shows up on the next deploy. +export function getStableVersion(): Promise { + stable ??= liveManifest().then((live) => (live ?? snapshotManifest()).latest_stable.replace(/^v/, '')); + return stable; +} diff --git a/src/data/skillsCatalog.ts b/src/data/skillsCatalog.ts new file mode 100644 index 00000000..5892c85f --- /dev/null +++ b/src/data/skillsCatalog.ts @@ -0,0 +1,59 @@ +// Agent-skills catalogue for /for/skills and /plain/skills, fetched at build +// time. It lives under the maintainer's account until the repo transfers to +// the org. +const SKILLS_JSON_URL = 'https://raw.githubusercontent.com/TeoSlayer/pilot-skills/main/skills.json'; + +// Some catalogue entries describe features Pilot does not have, so the site +// does not list them. Each entry says why; drop it once the skill is fixed +// upstream. +const EXCLUDED_CATEGORIES: Record = { + 'swarm-coordination': + 'publish to the registry and read pub/sub events from the inbox, or find peers by tag; ' + + 'events never reach the inbox and `peers --search` only matches node IDs', + setups: + 'fleets built on skills that do not exist (pilot-task-router, pilot-cron, pilot-escrow, ...); ' + + '/for/setups was removed for the same reason', +}; + +const EXCLUDED_SKILLS: Record = { + 'pilot-momy': 'the advertised source is absent', + 'pilot-relay': 'store-and-forward with guaranteed eventual delivery is not a Pilot feature', + 'pilot-priority-queue': 'SLA-based delivery is not a Pilot feature', + 'pilot-matchmaker': 'ranks agents by polo score, which was removed', + 'pilot-discover': 'searches peers by tag and reads the removed polo score', + 'pilot-announce-capabilities': 'relies on capability search by tag, which does not exist, and advertises SLA fields', + 'pilot-http-proxy': 'built on the gateway, which no longer ships in the install', + 'pilot-database-bridge': 'built on the gateway, which no longer ships in the install', + 'pilot-api-gateway': 'built on the gateway, which no longer ships in the install', +}; + +export interface SkillsCatalog { + categories: any[]; + total: number; +} + +let cached: Promise | undefined; + +async function fetchCatalog(): Promise { + try { + const res = await fetch(SKILLS_JSON_URL); + if (!res.ok) return { categories: [], total: 0 }; + const data = await res.json(); + const categories = (data.categories ?? []) + .filter((category: any) => !(category.slug in EXCLUDED_CATEGORIES)) + .map((category: any) => ({ + ...category, + skills: (category.skills ?? []).filter((skill: any) => !(skill.slug in EXCLUDED_SKILLS)), + })) + .filter((category: any) => category.skills.length > 0); + const total = categories.reduce((sum: number, category: any) => sum + category.skills.length, 0); + return { categories, total }; + } catch { + return { categories: [], total: 0 }; + } +} + +export function loadSkillsCatalog(): Promise { + cached ??= fetchCatalog(); + return cached; +} diff --git a/src/data/solutionStories.ts b/src/data/solutionStories.ts deleted file mode 100644 index f19bdc02..00000000 --- a/src/data/solutionStories.ts +++ /dev/null @@ -1,702 +0,0 @@ -export type InfographicKind = - | 'topology' - | 'bridge' - | 'constellation' - | 'guardrails' - | 'retrieval' - | 'router' - | 'sandbox' - | 'channels' - | 'pipeline' - | 'transaction' - | 'distribution' - | 'research'; - -export interface InfographicStage { - label: string; - title: string; - body: string; - items: string[]; -} - -export interface ArtifactRow { - key: string; - value: string; - tone?: 'accent' | 'good' | 'muted'; -} - -export interface SolutionStory { - slug: string; - heroLead: string; - heroEmphasis: string; - lede: string; - capabilityHeading: { lead: string; emphasis: string }; - workflowHeading: { lead: string; emphasis: string; body: string }; - closeHeading: { lead: string; emphasis: string }; - infographic: { - kind: InfographicKind; - eyebrow: string; - title: string; - summary: string; - stages: InfographicStage[]; - artifact: { - label: string; - title: string; - status: string; - summary: string; - rows: ArtifactRow[]; - footer: string; - }; - }; -} - -export type SolutionSection = 'problem' | 'infographic' | 'capabilities' | 'workflow' | 'proof' | 'related' | 'funnel'; - -export interface SolutionFunnel { - eyebrow: string; - title: string; - emphasis: string; - body: string; - choiceLabel: string; - choices: string[]; - contextLabel: string; - contextPlaceholder: string; - submitLabel: string; - deliverables: string[]; - success: string; -} - -export const solutionStories: Record = { - 'private-agent-network': { - slug: 'private-agent-network', - heroLead: 'Agents should know how to reach each other.', - heroEmphasis: 'Not where they happen to run.', - lede: 'Give every agent a durable identity, an approved peer set, and an encrypted route that survives changing IPs, clouds, and network boundaries.', - capabilityHeading: { lead: 'The network details disappear.', emphasis: 'The trust decision does not.' }, - workflowHeading: { - lead: 'From unknown endpoint', - emphasis: 'to verified peer.', - body: 'The application asks for an agent by name. Pilot resolves the identity, verifies the relationship, selects the best available path, and returns an observable connection state.', - }, - closeHeading: { lead: 'Give your agents', emphasis: 'a network they can understand.' }, - infographic: { - kind: 'topology', - eyebrow: 'Connection anatomy', - title: 'A connection is more than an open socket.', - summary: 'It is a named counterparty, an explicit trust relationship, an encrypted route, and a transport the application can use without knowing the underlying topology.', - stages: [ - { label: 'Resolve', title: 'Find agent-research', body: 'A stable hostname resolves to a persistent Pilot identity—not a temporary IP address.', items: ['hostname', '48-bit address', 'Ed25519 key'] }, - { label: 'Authorize', title: 'Confirm mutual trust', body: 'Both peers have approved the relationship before the transport becomes reachable.', items: ['handshake', 'peer key', 'trust state'] }, - { label: 'Route', title: 'Select the live path', body: 'Pilot attempts a direct NAT-traversed path and retains encrypted relay fallback.', items: ['direct', 'NAT traversal', 'relay fallback'] }, - { label: 'Exchange', title: 'Use the right transport', body: 'The application sends a stream, message, file, datagram, or publication.', items: ['stream', 'file', 'pub/sub'] }, - ], - artifact: { - label: 'connection.receipt', - title: 'agent-research ↔ agent-ops', - status: 'Connected', - summary: 'A machine-readable view of who is connected, how they were authenticated, and which path carries the payload.', - rows: [ - { key: 'identity', value: 'ed25519:7c2e…91af', tone: 'accent' }, - { key: 'trust', value: 'mutual · approved', tone: 'good' }, - { key: 'route', value: 'direct · encrypted', tone: 'good' }, - { key: 'transport', value: 'reliable stream :443' }, - ], - footer: 'Payload encryption: X25519 + AES-256-GCM', - }, - }, - }, - 'agent-integration': { - slug: 'agent-integration', - heroLead: 'Your systems do not need an AI rewrite.', - heroEmphasis: 'They need an agent edge.', - lede: 'Put a narrow Pilot adapter beside the software you already trust. Agents gain identity and reachability while the database, service, webhook, or legacy protocol keeps its existing contract.', - capabilityHeading: { lead: 'Preserve the system.', emphasis: 'Modernize the boundary.' }, - workflowHeading: { - lead: 'One integration seam.', - emphasis: 'Several ways in.', - body: 'Choose an SDK when you own the code, a loopback bridge when you do not, or a webhook when the existing workflow already speaks HTTP. Pilot adds the same peer identity around each option.', - }, - closeHeading: { lead: 'Connect the first system', emphasis: 'without replacing it.' }, - infographic: { - kind: 'bridge', - eyebrow: 'Integration architecture', - title: 'Wrap the interface. Keep the system.', - summary: 'Pilot sits at the narrowest useful seam between an existing application and the agent network, so integration work is reusable instead of repeated per agent.', - stages: [ - { label: 'System', title: 'Existing application', body: 'A database, service, device, or internal tool continues to use its current protocol.', items: ['TCP/UDP', 'HTTP event', 'application SDK'] }, - { label: 'Adapter', title: 'Local Pilot edge', body: 'The gateway, SDK, local socket, or webhook converts reachability into a trusted agent action.', items: ['gateway', 'Unix socket', 'webhook'] }, - { label: 'Network', title: 'Authenticated route', body: 'The request crosses Pilot with a persistent counterparty and encrypted payload path.', items: ['identity', 'trust', 'encryption'] }, - { label: 'Agent', title: 'Remote workflow', body: 'The receiving agent sees a typed event or the original application protocol—not a new infrastructure project.', items: ['event', 'stream', 'response'] }, - ], - artifact: { - label: 'integration.delivery', - title: 'warehouse.inventory.changed', - status: 'Delivered', - summary: 'An existing system event reaches a trusted agent with its source and delivery path intact.', - rows: [ - { key: 'source', value: 'legacy-tcp :5438' }, - { key: 'adapter', value: 'pilot gateway', tone: 'accent' }, - { key: 'recipient', value: 'agent-replenishment' }, - { key: 'delivery', value: 'acknowledged · 42 ms', tone: 'good' }, - ], - footer: 'No change to the warehouse application protocol', - }, - }, - }, - 'agent-capability-store': { - slug: 'agent-capability-store', - heroLead: 'Stop wiring tools one agent at a time.', - heroEmphasis: 'Give capabilities an address.', - lede: 'Let an agent discover the apps and specialists that fit the job, inspect their contract and authority, then compose them into a plan it can explain before execution.', - capabilityHeading: { lead: 'Discovery becomes part of', emphasis: 'the agent’s reasoning loop.' }, - workflowHeading: { - lead: 'Ask for the outcome.', - emphasis: 'Inspect the plan.', - body: 'The useful artifact is not a list of tools. It is a capability plan that names which services will be used, what each contributes, and where authority is required.', - }, - closeHeading: { lead: 'Give the next agent', emphasis: 'a capability map.' }, - infographic: { - kind: 'constellation', - eyebrow: 'Capability planning', - title: 'A request becomes an inspectable toolchain.', - summary: 'Pilot separates discovery, contract inspection, and execution so the agent can select complementary capabilities without hiding the plan from its operator.', - stages: [ - { label: 'Intent', title: '“Research Acme and brief me”', body: 'The task describes the desired artifact instead of prescribing a brittle sequence of tools.', items: ['company brief', 'current sources', 'delivery'] }, - { label: 'Discover', title: 'Find matching capabilities', body: 'The catalogue and service directory return apps and specialists with machine-readable help.', items: ['Sixtyfour', 'Cosift', 'Primitive'] }, - { label: 'Inspect', title: 'Check contracts and grants', body: 'The agent reads typed methods, protection state, required authority, and current service scope.', items: ['methods', 'integrity', 'grants'] }, - { label: 'Compose', title: 'Build the execution plan', body: 'Each capability receives one bounded part of the larger outcome.', items: ['enrich', 'research', 'send'] }, - ], - artifact: { - label: 'capability.plan', - title: 'Acme account brief', - status: 'Ready for approval', - summary: 'The selected capabilities and their roles are visible before any external action occurs.', - rows: [ - { key: '01 · enrich', value: 'io.pilot.sixtyfour', tone: 'accent' }, - { key: '02 · research', value: 'io.pilot.cosift' }, - { key: '03 · deliver', value: 'io.pilot.primitive' }, - { key: 'authority', value: 'email.send · approval required', tone: 'muted' }, - ], - footer: '3 capabilities · 1 explainable plan', - }, - }, - }, - 'secure-agent-runtime': { - slug: 'secure-agent-runtime', - heroLead: 'A tool call is a security decision.', - heroEmphasis: 'Make it inspectable.', - lede: 'Verify what is running, scan what is entering, constrain what the app may touch, and retain evidence of the decision—before an agent tool becomes an invisible authority channel.', - capabilityHeading: { lead: 'Security at every boundary', emphasis: 'the tool crosses.' }, - workflowHeading: { - lead: 'Four gates before', - emphasis: 'one consequential action.', - body: 'The runtime evaluates content, package integrity, declared grants, and the supervised action separately. A clean prompt does not excuse an untrusted binary, and a signed binary does not receive unlimited authority.', - }, - closeHeading: { lead: 'Turn tool access into', emphasis: 'an explicit control surface.' }, - infographic: { - kind: 'guardrails', - eyebrow: 'Execution control path', - title: 'Every tool call passes through visible gates.', - summary: 'Pilot combines package integrity, grant scoping, supervised execution, local content screening, and audit into one decision path without pretending any single control is sufficient.', - stages: [ - { label: 'Content', title: 'Screen the input', body: 'AEGIS checks commands, files, tool results, memory, and skills for injection and impersonation patterns.', items: ['prompt injection', 'obfuscation', 'impersonation'] }, - { label: 'Package', title: 'Verify what will run', body: 'The catalogue signature and pinned binary hash are checked before launch.', items: ['publisher signature', 'SHA-256', 'manifest'] }, - { label: 'Authority', title: 'Apply local grants', body: 'Filesystem, network, signing, process, and audit permissions stay explicit and app-specific.', items: ['files', 'domains', 'proc.exec'] }, - { label: 'Runtime', title: 'Supervise and record', body: 'Pilot launches the process, brokers the call, and retains the policy-relevant execution trail.', items: ['guarded mode', 'IPC', 'audit'] }, - ], - artifact: { - label: 'execution.decision', - title: 'wallet.pay', - status: 'Allowed with limits', - summary: 'The decision explains which artifact ran, which grants were exercised, and which boundary constrained the action.', - rows: [ - { key: 'integrity', value: 'signature + hash verified', tone: 'good' }, - { key: 'content scan', value: 'no high-risk pattern', tone: 'good' }, - { key: 'grant', value: 'wallet.sign · scoped', tone: 'accent' }, - { key: 'limit', value: '≤ 50 USDC / transaction' }, - ], - footer: 'Decision and app call retained in local audit', - }, - }, - }, - 'grounded-agent-search': { - slug: 'grounded-agent-search', - heroLead: 'Cosift turns a web corpus into', - heroEmphasis: 'an agent-callable research surface.', - lede: 'Search ranked documents, fetch cleaned contents, generate answers with attached sources, or run bounded multi-step research. Use the live public corpus through Pilot, or operate the complete Cosift stack on your own infrastructure.', - capabilityHeading: { lead: 'Choose the depth.', emphasis: 'Keep the evidence.' }, - workflowHeading: { - lead: 'From one agent method', - emphasis: 'to the full retrieval stack.', - body: 'The thin Pilot adapter maps structured agent calls to Cosift. The backend handles the crawl, index, retrieval, optional synthesis, and source-bearing response.', - }, - closeHeading: { lead: 'Give one real question', emphasis: 'to Cosift.' }, - infographic: { - kind: 'retrieval', - eyebrow: 'Cosift product path', - title: 'One backend from crawling to cited synthesis.', - summary: 'Use the public corpus immediately or run the same open-source stack against sources and model endpoints under your control.', - stages: [ - { label: 'Call', title: 'Choose a Cosift method', body: 'The agent selects search, contents, similar-document lookup, answer, or research.', items: ['help', 'method', 'JSON'] }, - { label: 'Retrieve', title: 'Run the configured path', body: 'BM25, dense HNSW, hybrid RRF, filters, reranking, and diversity controls compose per request.', items: ['BM25', 'HNSW', 'RRF'] }, - { label: 'Synthesize', title: 'Answer only when asked', body: 'Answer and research methods add model synthesis; plain retrieval remains available without it.', items: ['answer', 'research', 'limits'] }, - { label: 'Return', title: 'Keep sources and warnings', body: 'The structured result reports evidence, effective retrieval, fallbacks, and timing.', items: ['sources', 'warnings', 'took'] }, - ], - artifact: { - label: 'cosift.search', - title: 'raft leader election', - status: '3 results', - summary: 'The agent receives ranked source records and the effective retriever, ready for inspection or a later synthesis step.', - rows: [ - { key: 'retriever', value: 'bm25+dense:rrf', tone: 'accent' }, - { key: 'results', value: 'hits[] · URL + excerpt' }, - { key: 'warnings', value: '[]', tone: 'good' }, - { key: 'confidence', value: 'not fabricated' }, - ], - footer: 'Representative response shape, not a benchmark', - }, - }, - }, - 'web-access-for-agents': { - slug: 'web-access-for-agents', - heroLead: 'The web keeps moving.', - heroEmphasis: 'Your agent needs more than one way through it.', - lede: 'Read with clean extraction, navigate with reusable site knowledge, and open a real browser only when the task requires interaction. The agent chooses a surface that matches the job.', - capabilityHeading: { lead: 'Read, navigate, and act', emphasis: 'are different operations.' }, - workflowHeading: { - lead: 'Use the lightest reliable surface', - emphasis: 'for each step.', - body: 'A content question should not launch a browser. A known workflow should not rediscover the site. A genuine interaction can escalate to Chrome with the relevant context already assembled.', - }, - closeHeading: { lead: 'Turn a fragile browser loop', emphasis: 'into a routed web workflow.' }, - infographic: { - kind: 'router', - eyebrow: 'Web task router', - title: 'The task decides how the web is accessed.', - summary: 'Pilot’s web apps are complementary: Plainweb minimizes the reading surface, Bowmark captures task knowledge, and Otto supplies a real browser when state or interaction matters.', - stages: [ - { label: 'Classify', title: 'What must happen?', body: 'The workflow distinguishes content extraction, known navigation, and stateful browser interaction.', items: ['read', 'navigate', 'act'] }, - { label: 'Read', title: 'Extract clean content', body: 'Plainweb returns compact Markdown when the task only needs the page’s information.', items: ['URL', 'Markdown', 'metadata'] }, - { label: 'Navigate', title: 'Load task knowledge', body: 'Bowmark supplies a concise, feedback-improved route through a known site workflow.', items: ['steps', 'selectors', 'feedback'] }, - { label: 'Act', title: 'Escalate to real Chrome', body: 'Otto handles screenshots, visible state, authenticated tabs, and supported interactions.', items: ['Chrome', 'screenshot', 'typed action'] }, - ], - artifact: { - label: 'web.task.result', - title: 'Vendor status check', - status: 'Completed', - summary: 'All five vendor status pages were read; one active incident requires follow-up.', - rows: [ - { key: 'read', value: '4 pages · Plainweb' }, - { key: 'navigate', value: '1 known flow · Bowmark' }, - { key: 'interact', value: 'incident detail · Otto', tone: 'accent' }, - { key: 'evidence', value: '5 URLs + 1 screenshot', tone: 'good' }, - ], - footer: 'Browser interaction used only where page state required it', - }, - }, - }, - 'isolated-agent-compute': { - slug: 'isolated-agent-compute', - heroLead: 'Generated code should run somewhere disposable.', - heroEmphasis: 'Not on the laptop that hired it.', - lede: 'Give coding agents a real execution environment with a visible lifecycle: verify the tool, launch a microVM or container, attach only the data it needs, and return an artifact instead of host access.', - capabilityHeading: { lead: 'Useful execution.', emphasis: 'Disposable authority.' }, - workflowHeading: { - lead: 'The host stays outside', - emphasis: 'the workload boundary.', - body: 'The agent calls a signed app. The app creates the selected isolation substrate, runs the bounded workload, stores deliberate state, and returns logs or artifacts through a typed method.', - }, - closeHeading: { lead: 'Give the coding agent', emphasis: 'a safer place to work.' }, - infographic: { - kind: 'sandbox', - eyebrow: 'Execution boundary', - title: 'The host never becomes the sandbox.', - summary: 'Code, dependencies, data, and artifacts cross explicit interfaces. The agent receives execution capability without inheriting the workstation’s ambient credentials and filesystem.', - stages: [ - { label: 'Request', title: 'Describe the job', body: 'The agent submits code, inputs, limits, and the intended output through a typed app method.', items: ['code', 'inputs', 'timeout'] }, - { label: 'Verify', title: 'Check the execution app', body: 'Pilot validates the signed manifest, binary hash, and local grants before launch.', items: ['signature', 'SHA-256', 'grants'] }, - { label: 'Isolate', title: 'Create the workload boundary', body: 'Smol starts a microVM or Docker starts a container with only the requested resources.', items: ['microVM', 'container', 'resource cap'] }, - { label: 'Return', title: 'Export result, not authority', body: 'Logs, files, and selected data return through the app while the environment can be destroyed.', items: ['stdout', 'artifact', 'destroy'] }, - ], - artifact: { - label: 'compute.job.receipt', - title: 'Analyze customer_export.csv', - status: 'Succeeded', - summary: 'The analysis ran in a disposable microVM and returned a report plus a reproducible command log.', - rows: [ - { key: 'runtime', value: 'smolvm · hardware isolated', tone: 'accent' }, - { key: 'limits', value: '2 vCPU · 2 GB · 90 s' }, - { key: 'network', value: 'disabled', tone: 'good' }, - { key: 'artifact', value: 'churn_segments.parquet' }, - ], - footer: 'Environment destroyed after artifact export', - }, - }, - }, - 'agent-email-phone': { - slug: 'agent-email-phone', - heroLead: 'An agent without a channel cannot finish the job.', - heroEmphasis: 'Give it a real inbox and number.', - lede: 'Let an operational agent continue through the channels people already use—email, SMS, and voice—while preserving the conversation context required for follow-up and human handoff.', - capabilityHeading: { lead: 'One workflow.', emphasis: 'The channel the moment requires.' }, - workflowHeading: { - lead: 'Context travels with', - emphasis: 'the conversation.', - body: 'A customer question can begin in email, become a time-sensitive text, and escalate to a call. Primitive and AgentPhone expose those channel actions as complementary methods rather than isolated automation silos.', - }, - closeHeading: { lead: 'Give the workflow', emphasis: 'a reachable endpoint.' }, - infographic: { - kind: 'channels', - eyebrow: 'Conversation architecture', - title: 'The message changes channel. The case keeps its context.', - summary: 'Knowledge, account context, the generated response, and channel history stay part of one workflow even when the next best action moves from email to SMS or voice.', - stages: [ - { label: 'Context', title: 'Assemble the case', body: 'The agent combines the inbound message with relevant knowledge and system context.', items: ['inbox', 'knowledge', 'customer record'] }, - { label: 'Draft', title: 'Generate the next response', body: 'The workflow prepares a channel-appropriate reply and the evidence behind it.', items: ['answer', 'summary', 'approval'] }, - { label: 'Deliver', title: 'Choose email, SMS, or voice', body: 'Primitive or AgentPhone executes the approved action through a provisioned endpoint.', items: ['email', 'SMS', 'call'] }, - { label: 'Continue', title: 'Retain the thread', body: 'Conversation methods preserve replies, status, and the material needed for follow-up or handoff.', items: ['thread', 'history', 'handoff'] }, - ], - artifact: { - label: 'conversation.handoff', - title: 'Case #1842 · delivery delay', - status: 'Customer updated', - summary: 'The agent replied by email, sent a time-sensitive SMS update, and prepared the unresolved question for a human owner.', - rows: [ - { key: 'email', value: 'reply delivered · 10:14', tone: 'good' }, - { key: 'SMS', value: 'ETA update · 10:16', tone: 'accent' }, - { key: 'voice', value: 'not required', tone: 'muted' }, - { key: 'handoff', value: 'billing exception · assigned' }, - ], - footer: 'Conversation history attached to the case', - }, - }, - }, - 'sales-agent-stack': { - slug: 'sales-agent-stack', - heroLead: 'A sales agent should return an account plan.', - heroEmphasis: 'Not a pile of tabs.', - lede: 'Turn a target account into a decision-ready brief: verified company and people data, current evidence, a reason to engage, and the next approved channel action.', - capabilityHeading: { lead: 'Research that ends with', emphasis: 'a useful next move.' }, - workflowHeading: { - lead: 'From target criteria', - emphasis: 'to an informed conversation.', - body: 'The stack combines structured enrichment, current research, internal context, and communication. Each capability contributes to one artifact the seller can review instead of another disconnected dashboard.', - }, - closeHeading: { lead: 'Make the next account brief', emphasis: 'decision-ready.' }, - infographic: { - kind: 'pipeline', - eyebrow: 'Account intelligence pipeline', - title: 'The deliverable is the brief, not the browsing session.', - summary: 'Pilot composes specialized capabilities into an account artifact that explains why the company fits, what changed recently, who matters, and what action is justified.', - stages: [ - { label: 'Target', title: 'Define the account thesis', body: 'The workflow begins with fit criteria and an explicit question—not a request for generic enrichment.', items: ['segment', 'trigger', 'problem'] }, - { label: 'Enrich', title: 'Resolve company and people', body: 'Sixtyfour and specialist APIs supply structured organization and contact context.', items: ['Sixtyfour', 'Orthogonal', 'contacts'] }, - { label: 'Research', title: 'Find current evidence', body: 'Cosift and the web stack ground the account thesis in recent, attributable material.', items: ['Cosift', 'Plainweb', 'sources'] }, - { label: 'Engage', title: 'Prepare the next action', body: 'Primitive or AgentPhone carries an approved message or call plan into the chosen channel.', items: ['email', 'phone', 'approval'] }, - ], - artifact: { - label: 'account.brief', - title: 'Acme Robotics · expansion signal', - status: 'Seller ready', - summary: 'Acme is adding a second European fulfillment site while hiring for agent infrastructure, creating a timely cross-cloud operations angle.', - rows: [ - { key: 'fit', value: '92 / 100', tone: 'good' }, - { key: 'trigger', value: 'new EU operations site', tone: 'accent' }, - { key: 'people', value: '3 relevant operators' }, - { key: 'next action', value: 'review tailored email draft' }, - ], - footer: '5 current sources · generated 8 minutes ago', - }, - }, - }, - 'agent-commerce': { - slug: 'agent-commerce', - heroLead: 'A shopping agent needs a mandate.', - heroEmphasis: 'Not a blank check.', - lede: 'Bind the counterparty, request, spending boundary, transfer, and verification into one inspectable exchange so an agent can transact without becoming an unrestricted wallet.', - capabilityHeading: { lead: 'Identity before payment.', emphasis: 'Evidence after settlement.' }, - workflowHeading: { - lead: 'From negotiated request', - emphasis: 'to verified exchange.', - body: 'The network identifies the counterparties. The guarded wallet applies its local limits. Payment verification produces the evidence required before the workflow releases data, inventory, or service access.', - }, - closeHeading: { lead: 'Give the transaction', emphasis: 'a boundary and a receipt.' }, - infographic: { - kind: 'transaction', - eyebrow: 'Bounded exchange', - title: 'A payment carries identity, intent, limits, and proof.', - summary: 'Pilot makes the machine-to-machine exchange inspectable from trusted counterparty discovery through settlement verification, without presenting the wallet as a finished enterprise approval system.', - stages: [ - { label: 'Trust', title: 'Resolve the counterparties', body: 'Buyer and seller agents communicate through persistent identities and an approved relationship.', items: ['buyer identity', 'seller identity', 'handshake'] }, - { label: 'Request', title: 'Specify the exchange', body: 'The seller issues an amount, destination, asset, and business reference the workflow can inspect.', items: ['amount', 'asset', 'reference'] }, - { label: 'Bound', title: 'Apply the wallet limit', body: 'The guarded Wallet app checks the requested action against its configured spending boundary.', items: ['grant', 'spend cap', 'network'] }, - { label: 'Verify', title: 'Confirm settlement', body: 'The buyer checks transfer state before the next business action is released.', items: ['transaction', 'confirmation', 'receipt'] }, - ], - artifact: { - label: 'settlement.receipt', - title: 'Dataset licence · August', - status: 'Verified', - summary: 'The buyer agent paid the trusted seller inside its local limit and confirmed settlement before granting dataset access.', - rows: [ - { key: 'counterparty', value: 'agent-data-market · trusted' }, - { key: 'amount', value: '24.00 USDC · Base', tone: 'accent' }, - { key: 'limit', value: '50.00 USDC / transaction', tone: 'good' }, - { key: 'confirmation', value: 'final · block 34,291,104' }, - ], - footer: 'Access released after payment verification', - }, - }, - }, - 'agent-ready-apis': { - slug: 'agent-ready-apis', - heroLead: 'Your API is documented for people.', - heroEmphasis: 'Package the job for agents.', - lede: 'Turn raw endpoints into narrow, typed capabilities an agent can discover, inspect, and invoke—without giving up the API, commercial model, or operations you already own.', - capabilityHeading: { lead: 'Expose the task.', emphasis: 'Keep the platform.' }, - workflowHeading: { - lead: 'From endpoint surface', - emphasis: 'to agent product.', - body: 'A good agent contract does not mirror every REST endpoint. It packages a useful job, declares the authority it needs, and gives discovery systems enough structure to match it to an intent.', - }, - closeHeading: { lead: 'Package one useful job', emphasis: 'for agent distribution.' }, - infographic: { - kind: 'distribution', - eyebrow: 'Agent product layer', - title: 'Keep the API. Publish a task-shaped interface.', - summary: 'The adapter compresses authentication, endpoint selection, parameters, and upstream errors into typed methods that describe the job an agent actually wants done.', - stages: [ - { label: 'Product', title: 'Existing API platform', body: 'The service, billing, reliability model, and upstream endpoints remain under the publisher’s control.', items: ['API', 'billing', 'operations'] }, - { label: 'Contract', title: 'Define task methods', body: 'The adapter exposes narrow actions with typed arguments, results, and declared dependencies.', items: ['method', 'schema', 'grants'] }, - { label: 'Publish', title: 'Sign or host the capability', body: 'Distribute a signed local app or operate a specialist service on the Pilot network.', items: ['catalogue', 'service agent', 'identity'] }, - { label: 'Discover', title: 'Match agents to the job', body: 'Agents inspect the capability through the catalogue or directory before they invoke it.', items: ['search', 'help', 'call'] }, - ], - artifact: { - label: 'agent.manifest', - title: 'company.enrich', - status: 'Published', - summary: 'A task-oriented method gives agents one stable contract while the publisher retains its existing API implementation.', - rows: [ - { key: 'input', value: 'domain: string · required' }, - { key: 'output', value: 'company_profile.v1' }, - { key: 'network grant', value: 'api.publisher.com', tone: 'accent' }, - { key: 'distribution', value: 'signed app catalogue', tone: 'good' }, - ], - footer: 'Upstream credentials remain brokered by the app', - }, - }, - }, - 'live-data-for-agents': { - slug: 'live-data-for-agents', - heroLead: 'Research agents need today’s data.', - heroEmphasis: 'Not yesterday’s weights.', - lede: 'Route a question to current specialist services, keep the source-specific limits visible, join the structured results locally, and return a brief that separates live evidence from model interpretation.', - capabilityHeading: { lead: 'Current observations.', emphasis: 'Structured for composition.' }, - workflowHeading: { - lead: 'From one research question', - emphasis: 'to several live sources.', - body: 'The service directory helps the agent find domain specialists. Local analytical tools join the returned records, while Cosift supplies document context and citations around the quantitative result.', - }, - closeHeading: { lead: 'Put live evidence', emphasis: 'inside the next research brief.' }, - infographic: { - kind: 'research', - eyebrow: 'Live research composition', - title: 'The model interprets. Specialists observe.', - summary: 'Pilot lets a research agent discover current data services, query them through common conventions, and combine the resulting records with local analysis and cited knowledge.', - stages: [ - { label: 'Question', title: 'Define the evidence needed', body: 'The task identifies which claims require current observations instead of model memory.', items: ['scope', 'time window', 'measures'] }, - { label: 'Discover', title: 'Find domain specialists', body: 'The directory surfaces services for public, scientific, geographic, financial, security, and reference data.', items: ['directory', 'help', 'availability'] }, - { label: 'Query', title: 'Collect structured records', body: 'The agent calls one or several specialists and retains source status and upstream limitations.', items: ['JSON', 'timestamp', 'source state'] }, - { label: 'Synthesize', title: 'Join, ground, and explain', body: 'DuckDB or another local store analyzes the records while Cosift grounds the surrounding narrative.', items: ['DuckDB', 'Cosift', 'citations'] }, - ], - artifact: { - label: 'research.brief', - title: 'Regional energy risk · 72 hours', - status: 'Current', - summary: 'Weather, grid, and market specialists indicate elevated peak-load risk in two regions; the brief distinguishes observed data from projected impact.', - rows: [ - { key: 'weather', value: 'updated 4 min ago', tone: 'good' }, - { key: 'grid load', value: 'updated 11 min ago', tone: 'good' }, - { key: 'market signal', value: 'updated 2 min ago', tone: 'accent' }, - { key: 'analysis', value: 'DuckDB join · 18,402 rows' }, - ], - footer: '3 live services · 6 cited documents', - }, - }, - }, -}; - -// Every page has its own information sequence. Shared sections preserve -// semantics and quality while the order follows the mental model of the buyer. -export const solutionSectionOrders: Record = { - 'private-agent-network': ['problem', 'infographic', 'capabilities', 'workflow', 'proof', 'related', 'funnel'], - 'agent-integration': ['infographic', 'problem', 'workflow', 'capabilities', 'funnel', 'proof', 'related'], - 'agent-capability-store': ['capabilities', 'infographic', 'funnel', 'problem', 'workflow', 'related', 'proof'], - 'secure-agent-runtime': ['infographic', 'funnel', 'problem', 'capabilities', 'proof', 'workflow', 'related'], - 'grounded-agent-search': ['infographic', 'problem', 'capabilities', 'funnel', 'workflow', 'proof', 'related'], - 'web-access-for-agents': ['problem', 'capabilities', 'infographic', 'funnel', 'workflow', 'related', 'proof'], - 'isolated-agent-compute': ['infographic', 'capabilities', 'problem', 'workflow', 'funnel', 'proof', 'related'], - 'agent-email-phone': ['funnel', 'problem', 'infographic', 'capabilities', 'workflow', 'proof', 'related'], - 'sales-agent-stack': ['infographic', 'funnel', 'problem', 'capabilities', 'workflow', 'related', 'proof'], - 'agent-commerce': ['infographic', 'funnel', 'capabilities', 'problem', 'workflow', 'proof', 'related'], - 'agent-ready-apis': ['problem', 'funnel', 'infographic', 'capabilities', 'workflow', 'proof', 'related'], - 'live-data-for-agents': ['infographic', 'capabilities', 'funnel', 'problem', 'workflow', 'proof', 'related'], -}; - -export const solutionFunnels: Record = { - 'private-agent-network': { - eyebrow: 'Network design review', - title: 'Get a topology for', - emphasis: 'your first agent network.', - body: 'Tell us where the agents run and which boundary is causing friction. We will map the smallest credible Pilot deployment and the path you should validate first.', - choiceLabel: 'Primary boundary', - choices: ['Across two clouds', 'Across organizations', 'Behind NAT or firewalls', 'Across edge devices', 'Inside one private fleet'], - contextLabel: 'Where do the agents run?', - contextPlaceholder: 'Example: 12 agents across AWS and on-prem, with no inbound ports available…', - submitLabel: 'Request network blueprint', - deliverables: ['Recommended topology', 'Trust and discovery boundary', 'First validation path'], - success: 'Your network-blueprint request is with the founding team.', - }, - 'agent-integration': { - eyebrow: 'Integration pathfinder', - title: 'Find the narrowest', - emphasis: 'integration seam.', - body: 'Share the first system an agent must reach. We will recommend whether to start with an SDK, local socket, compatibility gateway, webhook, or packaged app.', - choiceLabel: 'Existing interface', - choices: ['HTTP API or webhook', 'TCP or UDP application', 'Database', 'Application code we own', 'Device or edge service'], - contextLabel: 'What must the agent do?', - contextPlaceholder: 'Example: receive inventory changes and acknowledge the order in our existing warehouse service…', - submitLabel: 'Get integration path', - deliverables: ['Recommended integration mode', 'Minimal system change', 'Evaluation checklist'], - success: 'We received the system context and will return a scoped integration path.', - }, - 'agent-capability-store': { - eyebrow: 'Capability stack builder', - title: 'Turn one outcome into', - emphasis: 'an agent toolchain.', - body: 'Describe the artifact you want an agent to produce. We will map the complementary Pilot apps and services, including where approval or external credentials enter the flow.', - choiceLabel: 'Desired outcome', - choices: ['Research brief', 'Customer operation', 'Sales workflow', 'Data pipeline', 'Web automation', 'Custom agent capability'], - contextLabel: 'What should the agent deliver?', - contextPlaceholder: 'Example: enrich a target company, research recent changes, then prepare an email for review…', - submitLabel: 'Build my capability map', - deliverables: ['Capability sequence', 'App and service shortlist', 'Authority checkpoints'], - success: 'Your requested capability map has been routed to the team.', - }, - 'secure-agent-runtime': { - eyebrow: 'Tool-risk review', - title: 'Map the authority behind', - emphasis: 'one dangerous tool call.', - body: 'Give us a representative action. We will break down its content, package, grant, execution, and audit boundaries against Pilot’s current security surfaces.', - choiceLabel: 'Highest-risk authority', - choices: ['Execute code or commands', 'Use credentials or signing keys', 'Read or write files', 'Reach external APIs', 'Send money or messages'], - contextLabel: 'Describe the action and data involved', - contextPlaceholder: 'Do not include secrets or customer data. Describe the classes of access only…', - submitLabel: 'Request tool-risk map', - deliverables: ['Threat-boundary diagram', 'Required grants', 'Recommended control points'], - success: 'Your tool-risk review request was sent securely.', - }, - 'grounded-agent-search': { - eyebrow: 'Cosift workflow mapper', - title: 'Bring one real question.', - emphasis: 'Leave with the right Cosift call.', - body: 'Tell us what the agent needs back. We will map it to search, contents, answer, or research and outline whether the public corpus or a self-hosted Cosift backend is the better fit.', - choiceLabel: 'Desired result', - choices: ['Ranked web results', 'One answer with citations', 'Multi-step research report', 'Similar documents', 'Clean contents for known URLs', 'Private self-hosted corpus'], - contextLabel: 'What should the agent investigate or retrieve?', - contextPlaceholder: 'Example: compare the latest approaches to durable agent memory and return the sources behind each tradeoff…', - submitLabel: 'Map my Cosift workflow', - deliverables: ['Recommended Cosift method', 'Example payload and response shape', 'Public or self-hosted deployment path'], - success: 'Your Cosift workflow request is with the team.', - }, - 'web-access-for-agents': { - eyebrow: 'Web workflow router', - title: 'Route one brittle workflow', - emphasis: 'through the right web surface.', - body: 'Give us the site and task. We will separate what should be extracted, what can follow known navigation, and what genuinely requires a live browser.', - choiceLabel: 'Primary web behavior', - choices: ['Read and extract content', 'Navigate a repeated workflow', 'Use an authenticated application', 'Complete a multi-site task', 'Capture visual evidence'], - contextLabel: 'URL and task description', - contextPlaceholder: 'Example: check five vendor status pages, open incident details, and return evidence…', - submitLabel: 'Route my web workflow', - deliverables: ['Plainweb/Bowmark/Otto split', 'Interaction boundary', 'Proposed result artifact'], - success: 'We received the workflow and will return a recommended web route.', - }, - 'isolated-agent-compute': { - eyebrow: 'Sandbox selector', - title: 'Choose the right boundary', - emphasis: 'for generated code.', - body: 'Describe the workload, its data, and any network requirement. We will recommend a microVM, container, or narrower data-app execution path.', - choiceLabel: 'Workload shape', - choices: ['Run generated code', 'Build or test a repository', 'Analyze a dataset', 'Host a long-running tool', 'Execute an untrusted dependency'], - contextLabel: 'What must enter and leave the sandbox?', - contextPlaceholder: 'Example: Python analysis over one CSV, no network, export a Parquet file and logs…', - submitLabel: 'Get sandbox recommendation', - deliverables: ['Isolation substrate', 'Resource and network limits', 'Artifact boundary'], - success: 'Your sandbox recommendation request is queued with the team.', - }, - 'agent-email-phone': { - eyebrow: 'Conversation flow builder', - title: 'Map the case across', - emphasis: 'email, SMS, and voice.', - body: 'Start with a real communication workflow. We will identify the channel transitions, context the agent needs, and the point where a human should take over.', - choiceLabel: 'Starting channel', - choices: ['Inbound email', 'Outbound email', 'SMS alert or follow-up', 'Inbound phone call', 'Outbound phone call', 'Mixed-channel case'], - contextLabel: 'What should happen from first contact to resolution?', - contextPlaceholder: 'Example: reply to a delivery question by email, send urgent ETA changes by SMS, escalate billing exceptions…', - submitLabel: 'Build conversation flow', - deliverables: ['Channel sequence', 'Context and handoff points', 'Suggested Pilot app methods'], - success: 'Your conversation-flow request was sent to the team.', - }, - 'sales-agent-stack': { - eyebrow: 'Sample account brief', - title: 'See the account artifact', - emphasis: 'your sellers would receive.', - body: 'Give us one company domain and the sales question you care about. We will use it to scope a representative account brief and the capability chain behind it.', - choiceLabel: 'Sales objective', - choices: ['Qualify account fit', 'Find a current trigger', 'Map relevant people', 'Prepare an outreach angle', 'Monitor an existing account'], - contextLabel: 'Company domain and question', - contextPlaceholder: 'Example: acme.com — are they expanding infrastructure in Europe, and who owns agent operations?', - submitLabel: 'Request sample brief', - deliverables: ['Account thesis', 'Current-source plan', 'Suggested next action'], - success: 'Your sample-account request is with the team.', - }, - 'agent-commerce': { - eyebrow: 'Payment mandate canvas', - title: 'Define what the agent may buy', - emphasis: 'before it holds a wallet.', - body: 'Describe the exchange and boundary. We will map counterparties, payment request, spend cap, settlement evidence, and the point where human approval belongs.', - choiceLabel: 'Transaction pattern', - choices: ['Buy data or API access', 'Pay for compute', 'Procure inventory', 'Settle a recurring service', 'Agent-to-agent marketplace'], - contextLabel: 'Amount, frequency, and release condition', - contextPlaceholder: 'Example: up to 50 USDC per dataset, maximum twice daily, release access only after verification…', - submitLabel: 'Design payment mandate', - deliverables: ['Counterparty and trust model', 'Spend boundary', 'Verification and release sequence'], - success: 'Your bounded-payment design request was sent to the team.', - }, - 'agent-ready-apis': { - eyebrow: 'Agent method draft', - title: 'Turn one API job into', - emphasis: 'a typed agent method.', - body: 'Share public documentation and the job agents should accomplish. We will sketch the method, inputs, result, grants, and best Pilot distribution model.', - choiceLabel: 'Distribution model', - choices: ['Signed local app', 'Hosted specialist service', 'Not sure yet'], - contextLabel: 'Documentation URL and desired job', - contextPlaceholder: 'Example: docs.example.com — enrich a company from its domain and return a normalized profile…', - submitLabel: 'Draft my agent method', - deliverables: ['Task-shaped method', 'Input/output sketch', 'App or service recommendation'], - success: 'Your agent-method draft request is with the publisher team.', - }, - 'live-data-for-agents': { - eyebrow: 'Live-source planner', - title: 'Map the live evidence behind', - emphasis: 'one research question.', - body: 'Give us a question whose answer changes over time. We will identify candidate specialist services, structured joins, document context, and source-health caveats.', - choiceLabel: 'Research domain', - choices: ['Market and company data', 'Government and public data', 'Science and health', 'Geographic and weather', 'Security intelligence', 'Cross-domain research'], - contextLabel: 'What current question should the agent answer?', - contextPlaceholder: 'Example: which regions face elevated energy risk over the next 72 hours, and what evidence supports it?', - submitLabel: 'Build live-source plan', - deliverables: ['Candidate specialists', 'Join and analysis path', 'Evidence and freshness model'], - success: 'Your live-source planning request was sent to the team.', - }, -}; diff --git a/src/data/solutions.ts b/src/data/solutions.ts deleted file mode 100644 index d612915a..00000000 --- a/src/data/solutions.ts +++ /dev/null @@ -1,508 +0,0 @@ -export type SolutionGroup = 'Connect' | 'Build' | 'Operate'; - -export interface SolutionCard { - label: string; - title: string; - body: string; -} - -export interface SolutionStep { - title: string; - body: string; -} - -export interface SolutionProfile { - slug: string; - footerLabel: string; - group: SolutionGroup; - hue: number; - eyebrow: string; - metaTitle: string; - description: string; - heroLead: string; - heroEmphasis: string; - lede: string; - audience: string; - primaryCta: { label: string; href: string }; - secondaryCta: { label: string; href: string }; - productName?: string; - productUrl?: string; - sourceUrl?: string; - dateModified?: string; - review?: { - label: string; - name: string; - date: string; - dateLabel: string; - href: string; - linkLabel: string; - }; - proofHeading?: { lead: string; emphasis: string }; - signal: { - value: string; - body: string; - source: string; - href: string; - }; - problemTitle: string; - problemBody: string; - capabilities: SolutionCard[]; - steps: SolutionStep[]; - proof: string[]; - related: string[]; -} - -export const solutions: SolutionProfile[] = [ - { - slug: 'private-agent-network', - footerLabel: 'Private agent networks', - group: 'Connect', - hue: 125, - eyebrow: 'Agent connectivity', - metaTitle: 'AI Agent Network for Private Connectivity | Pilot Protocol', - description: 'Build a private AI agent network with permanent addresses, private discovery, explicit trust, and encrypted paths across machines and clouds.', - heroLead: 'Connect agents across', - heroEmphasis: 'every boundary.', - lede: 'Give every agent a stable network identity and a private path to its peers—across laptops, clouds, offices, and organizations—without treating a central message broker as the data plane.', - audience: 'For AI platform teams operating agents across more than one machine, cloud, or organization.', - primaryCta: { label: 'Connect your first agents', href: '/docs/getting-started' }, - secondaryCta: { label: 'See the network architecture', href: '/docs/concepts' }, - signal: { - value: '50%', - body: 'of organizations surveyed said their agents still operate in isolation, while 96% said successful agents depend on seamless integration.', - source: 'MuleSoft Connectivity Benchmark 2026', - href: 'https://www.mulesoft.com/lp/reports/connectivity-benchmark', - }, - problemTitle: 'Agent fleets outgrow local assumptions quickly.', - problemBody: 'An agent that works on one workstation becomes a networking project as soon as a second runtime, cloud, or company enters the workflow. Addresses change, inbound ports disappear behind NAT, and every new peer gains its own authentication convention. Pilot puts those concerns in one agent-facing network layer.', - capabilities: [ - { label: 'Address', title: 'A permanent agent identity', body: 'Each node receives a persistent address backed by an Ed25519 identity, independent of its current IP address or runtime.' }, - { label: 'Reach', title: 'Direct when possible', body: 'Pilot discovers peers and attempts a direct NAT-traversed path, then uses an end-to-end encrypted relay when the network requires one.' }, - { label: 'Trust', title: 'Invisible until approved', body: 'Bilateral handshakes make reachability an explicit relationship rather than a side effect of knowing an endpoint.' }, - ], - steps: [ - { title: 'Install a local daemon', body: 'The same lightweight network surface sits beside each agent runtime.' }, - { title: 'Name and discover peers', body: 'Agents resolve stable hostnames instead of tracking changing IP addresses.' }, - { title: 'Establish mutual trust', body: 'Both endpoints approve the relationship before application traffic begins.' }, - { title: 'Send streams, messages, or files', body: 'Applications use one encrypted transport across local, cloud, and relayed paths.' }, - ], - proof: ['48-bit virtual addresses', 'Ed25519 identity and request signing', 'X25519 plus AES-256-GCM payload encryption', 'Reliable streams, datagrams, files, and pub/sub'], - related: ['agent-integration', 'agent-capability-store', 'agent-commerce'], - }, - { - slug: 'agent-integration', - footerLabel: 'Connect existing systems', - group: 'Connect', - hue: 180, - eyebrow: 'Systems integration', - metaTitle: 'Connect AI Agents to Existing Systems | Pilot Protocol', - description: 'Bridge AI agents to existing applications through Pilot SDKs, local sockets, webhooks, and loopback TCP or UDP compatibility.', - heroLead: 'Connect agents to the systems', - heroEmphasis: 'you already run.', - lede: 'Keep the applications, protocols, and operational systems that already work. Pilot adds an agent-facing connection layer around them through SDKs, webhooks, and a compatibility gateway.', - audience: 'For enterprise architects and platform engineers integrating agents with established software.', - primaryCta: { label: 'Read the integration guide', href: '/docs/integration' }, - secondaryCta: { label: 'Explore the gateway', href: '/docs/gateway' }, - signal: { - value: '46%', - body: 'of technical leaders identified integration with existing systems as an obstacle to deploying more capable agents.', - source: 'Anthropic State of AI Agents 2026', - href: 'https://resources.anthropic.com/hubfs/The%202026%20State%20of%20AI%20Agents%20Report.pdf', - }, - problemTitle: 'The useful system is rarely a blank sheet.', - problemBody: 'Most organizations already have databases, internal services, event handlers, and network applications that cannot be replaced for an agent pilot. Building a bespoke wrapper around every interface slows the experiment and creates another integration estate. Pilot offers several entry points so teams can choose the smallest change that fits the system.', - capabilities: [ - { label: 'Embed', title: 'SDKs for application code', body: 'Node.js, Python, and Swift applications can address trusted Pilot peers from their existing runtime.' }, - { label: 'Bridge', title: 'Loopback TCP and UDP', body: 'The gateway maps Pilot peers to local aliases so legacy network clients can communicate without learning a new wire protocol.' }, - { label: 'Trigger', title: 'Webhooks with delivery controls', body: 'Agent and network events can feed existing HTTP workflows with retry and circuit-breaker behavior.' }, - ], - steps: [ - { title: 'Choose the integration seam', body: 'Embed an SDK, call the local socket, bridge a legacy port, or subscribe a webhook.' }, - { title: 'Keep the existing application contract', body: 'Pilot handles peer identity and reachability around the application protocol.' }, - { title: 'Scope the trusted endpoints', body: 'Only approved agents become reachable through the bridge.' }, - { title: 'Expand one workflow at a time', body: 'Additional systems join the same network without redesigning the original connection.' }, - ], - proof: ['Node.js, Python, and Swift SDKs', 'Local Unix socket API', 'Legacy TCP and UDP gateway', 'Webhook retries and circuit breaker'], - related: ['private-agent-network', 'agent-ready-apis', 'agent-email-phone'], - }, - { - slug: 'agent-capability-store', - footerLabel: 'Agent capabilities', - group: 'Connect', - hue: 270, - eyebrow: 'Discovery and tools', - metaTitle: 'Agent Capability Store and Service Network | Pilot Protocol', - description: 'Let agents discover typed apps and specialist services through a signed local catalogue and a searchable network directory.', - heroLead: 'Give agents capabilities', - heroEmphasis: 'they can discover.', - lede: 'Move beyond a folder of hand-configured tools. Pilot gives agents a catalogue of installable apps and a directory of network services, each with a machine-readable way to explain what it can do.', - audience: 'For agent builders who need reusable tools and live services without maintaining a separate integration for each one.', - primaryCta: { label: 'Explore the App Store', href: '/app-store' }, - secondaryCta: { label: 'Read service-agent docs', href: '/docs/service-agents' }, - signal: { - value: '24%', - body: 'of API teams surveyed said they currently design their APIs for agent consumption.', - source: 'Postman State of the API 2025', - href: 'https://www.postman.com/state-of-api/2025/', - }, - problemTitle: 'A capable agent still needs a map of what exists.', - problemBody: 'Tools are often scattered across configuration files, custom servers, and human-oriented documentation. That makes capability discovery brittle and duplicates work across every agent framework. Pilot separates the capability from the harness: apps expose typed methods locally, while service agents advertise structured commands over the network.', - capabilities: [ - { label: 'Install', title: 'A signed app catalogue', body: 'Agents can inspect, install, and call packaged capabilities with typed methods and declared requirements.' }, - { label: 'Discover', title: 'A live service directory', body: 'Specialist agents publish searchable identities and explain available commands through a common help surface.' }, - { label: 'Compose', title: 'One addressable capability layer', body: 'Local apps and remote services can participate in the same workflow without pretending they have the same execution model.' }, - ], - steps: [ - { title: 'Search by the task', body: 'Find an app or specialist service by category, name, or capability.' }, - { title: 'Inspect before use', body: 'Review typed methods, integrity state, protection mode, and requested grants.' }, - { title: 'Call through one local interface', body: 'The daemon brokers the app or routes the request to a trusted service agent.' }, - { title: 'Compose complementary capabilities', body: 'A research, communication, or execution tool becomes one step in a larger agent workflow.' }, - ], - proof: ['Signed catalogue manifests', 'Typed app methods', 'Searchable specialist directory', 'Universal help and structured data conventions'], - related: ['secure-agent-runtime', 'live-data-for-agents', 'agent-ready-apis'], - }, - { - slug: 'secure-agent-runtime', - footerLabel: 'Secure agent runtime', - group: 'Build', - hue: 24, - eyebrow: 'Agent security', - metaTitle: 'Secure Agent App Runtime and Tooling | Pilot Protocol', - description: 'Run agent applications with signed manifests, pinned hashes, explicit grants, supervised processes, audit records, and local content scanning.', - heroLead: 'Give powerful agent tools', - heroEmphasis: 'hard boundaries.', - lede: 'Treat every tool as software with an identity, an integrity state, and a defined authority envelope. Pilot verifies apps at launch, scopes their access, supervises execution, and can scan content before it reaches the agent.', - audience: 'For application-security and agent-platform teams reviewing what autonomous tools may access or execute.', - primaryCta: { label: 'Review the security model', href: '/trust' }, - secondaryCta: { label: 'See app permissions', href: '/docs/app-store' }, - signal: { - value: '1 in 7', - body: 'developer environments using an agent tool server had at least one confirmed security finding in a large 2026 ecosystem study.', - source: 'Snyk Agentic Supply Chain Report 2026', - href: 'https://snyk.io/lp/state-of-agentic-dev-supply-chain-report/', - }, - problemTitle: 'Tool access is part of the agent threat model.', - problemBody: 'An agent tool can hold credentials, read files, reach remote services, or launch a process. A convenient configuration is not the same thing as a security boundary. Pilot’s app runtime makes the package, binary, grants, and execution state inspectable, while AEGIS adds a local screening layer for prompt injection and related content risks.', - capabilities: [ - { label: 'Verify', title: 'Signed and hash-pinned packages', body: 'The catalogue signature is checked and the installed binary hash is revalidated whenever the app launches.' }, - { label: 'Constrain', title: 'Explicit capability grants', body: 'Filesystem, network, process, signing, and audit access can be declared and reviewed per app.' }, - { label: 'Inspect', title: 'Local content screening', body: 'AEGIS can scan commands, files, tool results, memory, and skills for injection, impersonation, and obfuscation patterns.' }, - ], - steps: [ - { title: 'Inspect the manifest', body: 'Review the publisher, methods, required grants, protection mode, and integrity state.' }, - { title: 'Grant only the required authority', body: 'The local policy stays narrower than the app’s possible capability surface.' }, - { title: 'Verify every launch', body: 'Pilot checks the pinned artifact before supervising the app process.' }, - { title: 'Retain an execution trail', body: 'App calls and policy-relevant actions can be written to the local audit surface.' }, - ], - proof: ['Catalogue public-key verification', 'SHA-256 binary pinning', 'Per-app grants and guarded mode', 'Local AEGIS screening and audit'], - related: ['agent-capability-store', 'isolated-agent-compute', 'private-agent-network'], - }, - { - slug: 'grounded-agent-search', - footerLabel: 'Cosift search + research', - group: 'Build', - hue: 125, - eyebrow: 'Cosift', - metaTitle: 'Cosift: Agent Search, Answers and Research | Pilot', - description: 'Use Cosift for structured web search, clean retrieval, cited answers, and bounded multi-step research through one agent-callable API or self-hosted stack.', - heroLead: 'Cosift turns a web corpus into', - heroEmphasis: 'an agent-callable research surface.', - lede: 'Search ranked documents, fetch cleaned contents, generate answers with attached sources, or run bounded multi-step research. Use the live public corpus through Pilot, or operate the complete Cosift stack on your own infrastructure.', - audience: 'For agent builders who need retrieval, citations, and research as a callable product rather than another search pipeline to assemble.', - primaryCta: { label: 'Install through Pilot', href: '/apps/io.pilot.cosift' }, - secondaryCta: { label: 'Read the Cosift API', href: 'https://cosift.pilotprotocol.network/docs' }, - productName: 'Cosift', - productUrl: 'https://cosift.pilotprotocol.network/', - sourceUrl: 'https://github.com/pilot-protocol/cosift', - dateModified: '2026-09-17', - review: { - label: 'Product evidence', - name: 'Cosift source + live API', - date: '2026-09-17', - dateLabel: 'Reviewed 17 September 2026', - href: 'https://github.com/pilot-protocol/cosift', - linkLabel: 'Inspect Cosift source', - }, - proofHeading: { lead: 'Cosift ships as inspectable code.', emphasis: 'The details are not implied.' }, - signal: { - value: '15M+', - body: 'documents are indexed by the live public Cosift instance, with BM25, dense, and hybrid retrieval available at the time of this snapshot.', - source: 'Cosift public instance stats', - href: 'https://cosift.pilotprotocol.network/stats', - }, - problemTitle: 'Cosift packages the whole path from crawl to citation.', - problemBody: 'The product is a self-hostable Go service for crawling, indexing, retrieval, synthesis, and evaluation, plus a thin Pilot adapter for agent calls. Its public instance is ready to query, while a private deployment can keep the corpus, model endpoints, and query boundary under the operator’s control.', - capabilities: [ - { label: 'Search', title: 'Ranked documents in structured JSON', body: 'BM25 works without model dependencies; dense HNSW and hybrid RRF add semantic retrieval when embeddings are configured.' }, - { label: 'Answer', title: 'One synthesis with attached sources', body: 'Cosift retrieves a bounded evidence set and returns a direct, cited answer rather than an untraceable block of prose.' }, - { label: 'Research', title: 'Bounded multi-step investigation', body: 'A research call plans sub-queries, retrieves and fuses evidence, then synthesizes a cited report within explicit limits.' }, - ], - steps: [ - { title: 'Install or self-host', body: 'Use the published public backend immediately, or run the crawler, index, and models in your own environment.' }, - { title: 'Discover the method surface', body: 'cosift.help returns every agent method, parameter set, method kind, and expected latency class locally.' }, - { title: 'Choose the required depth', body: 'Call search for ranked hits, answer for one cited synthesis, or research for a larger multi-step question.' }, - { title: 'Inspect the effective path', body: 'Keep retriever labels, warnings, sources, and timing in the workflow instead of discarding them after generation.' }, - ], - proof: ['Single-binary crawler, index, and API', 'BM25, HNSW dense, hybrid RRF, and reranking', 'Cited answer and bounded research methods', 'SQLite or multi-million-document Pebble backend'], - related: ['live-data-for-agents', 'web-access-for-agents', 'isolated-agent-compute'], - }, - { - slug: 'web-access-for-agents', - footerLabel: 'Web access for agents', - group: 'Build', - hue: 315, - eyebrow: 'Web operations', - metaTitle: 'Reliable Web Access for AI Agents | Pilot Protocol', - description: 'Combine real Chrome interaction, clean webpage extraction, and reusable site guidance to give AI agents a more dependable web surface.', - heroLead: 'Give agents more than', - heroEmphasis: 'a brittle browser loop.', - lede: 'Use the right web surface for each task: clean Markdown when the agent only needs to read, a real Chrome session when it must interact, and task-level site guidance when a workflow should become repeatable.', - audience: 'For automation and operations teams whose agents need to read and act across existing websites.', - primaryCta: { label: 'Explore web apps', href: '/app-store#cat-web' }, - secondaryCta: { label: 'Talk through a workflow', href: '/contact?topic=product' }, - signal: { - value: 'Live web', - body: 'benchmarks continue to find recurring failures from pop-ups, navigation changes, authentication boundaries, and other open-web instability.', - source: 'BrowserArena research', - href: 'https://arxiv.org/abs/2510.02418', - }, - problemTitle: 'Not every web task should be solved with pixels.', - problemBody: 'Browser agents often use one expensive interaction loop for reading, navigation, and submission. That increases latency and exposes the agent to more untrusted page content than necessary. Pilot’s complementary web apps let a workflow begin with clean extraction, move to typed guidance, and open an interactive browser only for the steps that require it.', - capabilities: [ - { label: 'Read', title: 'Web pages as clean Markdown', body: 'Plainweb turns a URL into compact content for extraction, summarization, and downstream research.' }, - { label: 'Act', title: 'A real Chrome execution surface', body: 'Otto connects the agent to browser tabs for extraction, screenshots, and supported site interactions.' }, - { label: 'Repeat', title: 'Task-specific site guidance', body: 'Bowmark stores concise navigation knowledge and improves it with feedback from completed workflows.' }, - ], - steps: [ - { title: 'Read before opening a browser', body: 'Use clean extraction for content-only tasks and reduce unnecessary interaction.' }, - { title: 'Load task guidance', body: 'Apply a known site path when the destination and workflow are understood.' }, - { title: 'Escalate to Chrome', body: 'Use the interactive surface for forms, authenticated sessions, or visual state.' }, - { title: 'Capture what worked', body: 'Feed successful task knowledge back into a reusable navigation guide.' }, - ], - proof: ['Clean URL-to-Markdown extraction', 'Real Chrome extension and relay', 'Screenshots and page extraction', 'Reusable site-task guidance with feedback'], - related: ['grounded-agent-search', 'sales-agent-stack', 'agent-email-phone'], - }, - { - slug: 'isolated-agent-compute', - footerLabel: 'Isolated agent compute', - group: 'Build', - hue: 82, - eyebrow: 'Execution and data', - metaTitle: 'Isolated Local Compute for AI Agents | Pilot Protocol', - description: 'Run agent-generated code in hardware-isolated microVMs or containers with local SQL and data services available through typed app methods.', - heroLead: 'Let agents execute.', - heroEmphasis: 'Keep the host out of reach.', - lede: 'Move generated code and stateful work into an explicit execution environment. Pilot apps expose isolated microVMs, containers, and local data services as typed capabilities the agent can inspect and invoke.', - audience: 'For coding-agent and platform teams that need useful execution without handing the agent an unrestricted host shell.', - primaryCta: { label: 'Explore Smol', href: '/apps/io.pilot.smol' }, - secondaryCta: { label: 'Browse compute apps', href: '/app-store#cat-infra' }, - signal: { - value: '94%', - body: 'of surveyed teams use containers somewhere in their agent infrastructure, while security remains the most common scaling concern.', - source: 'Docker State of Agentic AI 2026', - href: 'https://www.docker.com/blog/state-of-agentic-ai-key-findings/', - }, - problemTitle: 'Execution is useful precisely because it is dangerous.', - problemBody: 'Coding agents need to run commands, inspect artifacts, and persist working data. Running everything directly on a developer machine combines the broadest authority with the least repeatability. Pilot separates the agent call from the execution substrate, allowing teams to choose microVM isolation, a container, or a purpose-built database app for the task.', - capabilities: [ - { label: 'Isolate', title: 'Hardware-isolated microVMs', body: 'Smol runs workloads in local or cloud microVMs with an explicit lifecycle and brokered control surface.' }, - { label: 'Package', title: 'Container execution', body: 'The Docker app provides a familiar unit for repeatable tools, dependencies, and disposable environments.' }, - { label: 'Persist', title: 'Typed local data services', body: 'SQLite, DuckDB, PostgreSQL, MySQL, and Redis cover transactional, analytical, and in-memory workloads.' }, - ], - steps: [ - { title: 'Choose the isolation level', body: 'Match a microVM, container, or data process to the workload and threat model.' }, - { title: 'Declare the required authority', body: 'App grants expose the files, process calls, and network access the tool requires.' }, - { title: 'Run through typed methods', body: 'The agent invokes a bounded operation instead of receiving a permanent unrestricted shell.' }, - { title: 'Destroy or retain deliberately', body: 'Ephemeral compute and persistent data have separate, visible lifecycles.' }, - ], - proof: ['Local and cloud microVM execution', 'Docker lifecycle methods', 'Five local database engines', 'Signed apps with explicit grants'], - related: ['secure-agent-runtime', 'grounded-agent-search', 'agent-integration'], - }, - { - slug: 'agent-email-phone', - footerLabel: 'Email, phone and SMS', - group: 'Operate', - hue: 350, - eyebrow: 'Agent communications', - metaTitle: 'Email, Phone and SMS for AI Agents | Pilot Protocol', - description: 'Give AI agents provisioned email, inbox, phone, voice, SMS, and conversation capabilities through typed Pilot applications.', - heroLead: 'Give agents a place', - heroEmphasis: 'people can reach.', - lede: 'Provision real communication endpoints for workflows that cannot stay inside a chat box. Agents can receive and reply to email, work with conversations, send messages, and use phone capabilities through typed applications.', - audience: 'For support, operations, and workflow teams that need agents to participate in existing communication channels.', - primaryCta: { label: 'Explore AgentPhone', href: '/apps/io.pilot.agentphone' }, - secondaryCta: { label: 'Talk to the team', href: '/contact?topic=product' }, - signal: { - value: '87%', - body: 'of consumers surveyed communicate with businesses across multiple channels, with phone remaining important for support and time-sensitive needs.', - source: 'Twilio Communications Blueprint', - href: 'https://www.twilio.com/en-us/report/the-communications-blueprint/overview/chapter-1', - }, - problemTitle: 'A workflow is not automated if the handoff stops at the inbox.', - problemBody: 'Many operational processes eventually require an email response, a text update, or a phone conversation. Connecting each channel through an unrelated automation stack fragments context and credentials. Pilot packages communication endpoints as agent-callable apps so they can participate alongside search, company data, and internal systems.', - capabilities: [ - { label: 'Email', title: 'Provisioned inbox and sending', body: 'Primitive provides account, inbox, send, receive, search, reply, and conversation-level methods.' }, - { label: 'Phone', title: 'Voice and number management', body: 'AgentPhone exposes phone-number and calling capabilities through a typed local application interface.' }, - { label: 'Message', title: 'SMS and conversations', body: 'The same communication surface supports messaging and conversation history for follow-up workflows.' }, - ], - steps: [ - { title: 'Provision an endpoint', body: 'Create or connect the email or phone identity the workflow will use.' }, - { title: 'Define the communication task', body: 'Give the agent a narrow action such as monitor, draft, reply, notify, or call.' }, - { title: 'Combine context from other apps', body: 'Search, customer data, or company intelligence can inform the interaction.' }, - { title: 'Keep the channel history', body: 'Conversation methods preserve the thread needed for later steps and human review.' }, - ], - proof: ['Email account and inbox lifecycle', 'Send, receive, reply, and search', 'Phone numbers, voice calls, and SMS', 'Typed conversation methods'], - related: ['sales-agent-stack', 'agent-integration', 'grounded-agent-search'], - }, - { - slug: 'sales-agent-stack', - footerLabel: 'Sales agent stack', - group: 'Operate', - hue: 48, - eyebrow: 'Revenue operations', - metaTitle: 'Sales Intelligence and Outreach Agents | Pilot Protocol', - description: 'Combine people and company intelligence, specialist APIs, web research, email, and phone into a composable sales-agent workflow.', - heroLead: 'From account research', - heroEmphasis: 'to a real conversation.', - lede: 'Build a sales agent from complementary capabilities instead of another monolithic platform: identify the company, enrich the people, research the account, and continue through email or phone.', - audience: 'For revenue-operations and sales-engineering teams testing where agents can remove research and coordination work.', - primaryCta: { label: 'Explore company intelligence', href: '/apps/io.pilot.sixtyfour' }, - secondaryCta: { label: 'Discuss a sales workflow', href: '/contact?topic=product' }, - signal: { - value: '40%', - body: 'is the average share of a seller’s week spent selling, according to a survey of more than four thousand sales professionals.', - source: 'Salesforce State of Sales 2026', - href: 'https://www.salesforce.com/sales/state-of-sales/', - }, - problemTitle: 'Prospecting work is spread across too many disconnected tools.', - problemBody: 'A useful account brief can require company enrichment, people data, public web research, internal context, drafting, and channel follow-up. Each handoff adds another copy-and-paste boundary. Pilot lets a team compose these steps through typed apps while retaining the option to substitute a capability as the workflow evolves.', - capabilities: [ - { label: 'Discover', title: 'People and company intelligence', body: 'Sixtyfour supports discovery, enrichment, and research across people and organizations.' }, - { label: 'Expand', title: 'Specialist API access', body: 'Orthogonal routes narrowly scoped requests to a broad set of paid data and enrichment APIs.' }, - { label: 'Engage', title: 'Email, phone, and web actions', body: 'Primitive, AgentPhone, and the web stack carry the workflow from preparation into an approved interaction.' }, - ], - steps: [ - { title: 'Define the account profile', body: 'Start with a market, company, or person that matches the campaign hypothesis.' }, - { title: 'Enrich and research', body: 'Combine structured intelligence with current web and internal knowledge.' }, - { title: 'Prepare the next action', body: 'Draft a brief, message, or call plan using the collected context.' }, - { title: 'Continue in the chosen channel', body: 'Use a provisioned email or phone capability under the workflow’s approval rules.' }, - ], - proof: ['Company and contact enrichment', 'Specialist API routing', 'Grounded web research', 'Email, SMS, and phone capabilities'], - related: ['agent-email-phone', 'web-access-for-agents', 'live-data-for-agents'], - }, - { - slug: 'agent-commerce', - footerLabel: 'Agent commerce', - group: 'Operate', - hue: 150, - eyebrow: 'Payments and identity', - metaTitle: 'Agent Commerce with Bounded Spending | Pilot Protocol', - description: 'Combine trusted agent identities, payment requests, verification, and bounded multichain USDC spending for agent-commerce experiments.', - heroLead: 'Let agents transact', - heroEmphasis: 'inside a boundary.', - lede: 'Move from a recommendation to a verifiable exchange. Pilot combines trusted peer relationships with a guarded wallet that can request, send, and verify USDC under explicit spending limits.', - audience: 'For commerce and procurement builders exploring machine-to-machine transactions without starting from an unrestricted wallet.', - primaryCta: { label: 'Explore Wallet', href: '/apps/io.pilot.wallet' }, - secondaryCta: { label: 'Talk through the controls', href: '/contact?topic=governance' }, - signal: { - value: '1 in 3', - body: 'consumers surveyed expect to use shopping agents regularly, while permissions, spending controls, and human override remain central trust requirements.', - source: 'Visa Earning Trust in Agentic Commerce 2026', - href: 'https://corporate.visa.com/en/products/intelligent-commerce/earning-trust-report.html', - }, - problemTitle: 'A payment needs more context than a destination address.', - problemBody: 'Agent commerce introduces questions about who requested the action, what was approved, how much may be spent, and whether settlement occurred. Pilot’s current wallet surface supports bounded payment operations and verification, while the network supplies persistent identities and signed requests around the workflow. Higher-order enterprise approval lifecycle remains a separate productization track.', - capabilities: [ - { label: 'Identify', title: 'A persistent network counterparty', body: 'Pilot peers communicate through signed identities and explicit trust relationships rather than anonymous endpoints.' }, - { label: 'Bound', title: 'A guarded wallet with spend limits', body: 'Wallet exposes request, payment, balance, and verification methods with configurable spending boundaries.' }, - { label: 'Verify', title: 'Check settlement programmatically', body: 'The workflow can validate payment state before continuing to delivery or the next business action.' }, - ], - steps: [ - { title: 'Establish the counterparties', body: 'Resolve and trust the agents participating in the exchange.' }, - { title: 'Create the payment request', body: 'Bind the amount and destination to the workflow’s business context.' }, - { title: 'Apply the wallet boundary', body: 'Keep the requested action inside the configured spend limit and guarded app grants.' }, - { title: 'Verify before continuing', body: 'Confirm the transfer state programmatically before goods, data, or service access changes hands.' }, - ], - proof: ['Guarded local wallet app', 'USDC on Base, Ethereum, and Polygon', 'Payment request and verification methods', 'Per-wallet spending limits'], - related: ['private-agent-network', 'agent-integration', 'secure-agent-runtime'], - }, - { - slug: 'agent-ready-apis', - footerLabel: 'Publish agent-ready APIs', - group: 'Connect', - hue: 235, - eyebrow: 'For API publishers', - metaTitle: 'Publish Agent-Ready APIs and Services | Pilot Protocol', - description: 'Package an API as a typed, discoverable Pilot app or network service so agents can understand and invoke it with less custom integration work.', - heroLead: 'Turn your API into a capability', - heroEmphasis: 'agents can find.', - lede: 'Keep the service you already operate. Add a typed agent-facing surface, a discoverable identity, and a distribution path through Pilot’s application catalogue or specialist service network.', - audience: 'For API companies and platform teams that want agent distribution without rebuilding the underlying product.', - primaryCta: { label: 'Publish an app', href: '/publish' }, - secondaryCta: { label: 'Read the app contract', href: '/docs/app-store' }, - signal: { - value: '65%', - body: 'of organizations surveyed generate revenue from APIs, yet only 24% currently design those APIs for agents.', - source: 'Postman State of the API 2025', - href: 'https://www.postman.com/state-of-api/2025/', - }, - problemTitle: 'A documented API is not automatically an agent product.', - problemBody: 'Human-oriented reference pages leave the agent to infer authentication, method intent, parameter shape, and safe operating limits. A Pilot app can broker an existing API behind typed methods and declared grants. A network service can publish its own address and structured command surface. Both approaches give the publisher a clearer agent-facing contract.', - capabilities: [ - { label: 'Describe', title: 'Typed methods and schemas', body: 'Define what the capability does, which arguments it accepts, and how the result is returned.' }, - { label: 'Distribute', title: 'Catalogue or network discovery', body: 'Ship a signed local app or operate a specialist service with a searchable Pilot identity.' }, - { label: 'Operate', title: 'Keep control of the upstream', body: 'The publisher retains the existing API, commercial model, and service operations behind the agent-facing adapter.' }, - ], - steps: [ - { title: 'Choose local app or hosted service', body: 'Use an app for brokered local access or a service agent for an addressable network capability.' }, - { title: 'Define a narrow agent contract', body: 'Expose task-oriented methods rather than mirroring every raw upstream endpoint.' }, - { title: 'Declare authority and dependencies', body: 'Make credentials, files, network domains, and process requirements inspectable.' }, - { title: 'Publish and iterate', body: 'Distribute through the catalogue or directory and improve the contract from real agent calls.' }, - ], - proof: ['Typed manifest schema', 'Signed catalogue distribution', 'Searchable service identity', 'Structured help and data responses'], - related: ['agent-capability-store', 'agent-integration', 'secure-agent-runtime'], - }, - { - slug: 'live-data-for-agents', - footerLabel: 'Live data for agents', - group: 'Build', - hue: 65, - eyebrow: 'Structured research', - metaTitle: 'Live Structured Data for AI Research | Pilot Protocol', - description: 'Give research agents structured access to public, scientific, geographic, financial, security, and reference data through specialist services.', - heroLead: 'Give research agents', - heroEmphasis: 'live structured context.', - lede: 'Query specialist services for current public data, combine the results with grounded retrieval, and analyze them locally—without teaching every agent a different upstream API convention.', - audience: 'For analysts, researchers, and agent builders who need current structured context alongside model reasoning.', - primaryCta: { label: 'Explore service agents', href: '/docs/service-agents' }, - secondaryCta: { label: 'See grounded search', href: '/solutions/grounded-agent-search' }, - signal: { - value: '24.4%', - body: 'of reported agent deployments focus on research and data analysis, making it one of the largest production use-case categories.', - source: 'LangChain State of Agent Engineering 2026', - href: 'https://www.langchain.com/state-of-agent-engineering', - }, - problemTitle: 'The model may know the domain, but not today’s answer.', - problemBody: 'Research agents need current prices, filings, weather, geographic facts, scientific records, vulnerabilities, and other changing data. Integrating each upstream independently creates a long tail of keys, schemas, and error handling. Pilot’s specialist directory normalizes discovery and common commands while keeping each data source’s scope and upstream limitations visible.', - capabilities: [ - { label: 'Discover', title: 'Specialists by category', body: 'Find services across reference, science, government, finance, news, transit, security, health, and other domains.' }, - { label: 'Query', title: 'Structured command surfaces', body: 'Common help, data, summary, and JSON conventions reduce the amount of bespoke tool knowledge an agent needs.' }, - { label: 'Analyze', title: 'Compose with search and local data', body: 'Cosift, DuckDB, databases, and market-intelligence apps turn live observations into a larger research workflow.' }, - ], - steps: [ - { title: 'Find the relevant specialist', body: 'Search the live directory by capability or domain rather than starting from a vendor list.' }, - { title: 'Inspect its current command surface', body: 'Use the service help response to understand parameters and available data.' }, - { title: 'Collect structured results', body: 'Query one or several specialists while retaining source-specific status and limits.' }, - { title: 'Ground and analyze', body: 'Combine live data with indexed knowledge or local analytical tools for the final result.' }, - ], - proof: ['Hundreds of directory service records', 'Dozens of specialist categories', 'Common help and structured-data conventions', 'Composition with Cosift and local databases'], - related: ['grounded-agent-search', 'agent-capability-store', 'sales-agent-stack'], - }, -]; - -export const solutionGroups = (['Connect', 'Build', 'Operate'] as const).map((name) => ({ - name, - solutions: solutions.filter((solution) => solution.group === name), -})); - -export const solutionsBySlug = new Map(solutions.map((solution) => [solution.slug, solution])); diff --git a/src/layouts/BlogLayout.astro b/src/layouts/BlogLayout.astro index 6e4f810b..78136297 100644 --- a/src/layouts/BlogLayout.astro +++ b/src/layouts/BlogLayout.astro @@ -77,25 +77,6 @@ const related = collectionPosts .slice(0, 3); const funnelCtaGroups = [ - { - slugs: new Set([ - 'why-ai-agents-need-network-stack', - 'pilot-vs-tcp-grpc-nats-comparison', - 'direct-communication-protocols-ai-agents-guide', - 'ai-agent-discovery-process-p2p-networks', - 'how-pilot-protocol-works', - 'pilot-vs-tailscale-nebula-zerotier-ai-agents', - 'connect-ai-agents-behind-nat-without-vpn', - 'build-agent-swarm-self-organizes', - 'peer-to-peer-agent-communication-no-server', - 'overlay-networking-secure-ai-agent-communication-explained', - ]), - eyebrow: 'For agent platform teams', - title: 'Map the network your agents actually need', - body: 'Review addressing, private discovery, peer trust, direct paths, and encrypted relay fallback as one deployment model.', - href: '/solutions/private-agent-network', - label: 'Explore private agent networks', - }, { slugs: new Set([ 'zero-dependency-encryption-x25519-aes-gcm', @@ -106,8 +87,8 @@ const funnelCtaGroups = [ eyebrow: 'For security reviewers', title: 'Separate implemented controls from deployment policy', body: 'Inspect the cryptographic boundary, trust lifecycle, metadata exposure, operational controls, and stated limitations.', - href: '/trust', - label: 'Open the Trust Center', + href: '/security/', + label: 'Read the security overview', }, { slugs: new Set([ @@ -118,33 +99,9 @@ const funnelCtaGroups = [ eyebrow: 'For API and tool publishers', title: 'Turn one useful service into an agent capability', body: 'Package typed methods, declare required authority, and make the capability discoverable without replacing the upstream product.', - href: '/solutions/agent-ready-apis', + href: '/publish', label: 'See the publisher path', }, - { - slugs: new Set([ - 'distributed-rag-without-central-knowledge-base', - 'scriptorium-replace-agentic-active-research-ready-intelligence', - ]), - eyebrow: 'For knowledge and research teams', - title: 'Evaluate grounded search on your own sources', - body: 'Compare lexical, dense, and hybrid retrieval while preserving citations and control over the index and model endpoints.', - href: '/solutions/grounded-agent-search', - label: 'Explore grounded agent search', - }, - { - slugs: new Set([ - 'enterprise-identity-integration-pilot-protocol', - 'enterprise-private-networks-roadmap', - 'enterprise-phase-3-rbac-policies-audit-fleet', - 'enterprise-production-complete-identity-directory-audit-export', - ]), - eyebrow: 'For enterprise AI teams', - title: 'Review the controls for private agent networks', - body: 'Roles, external identity validation, network policy, key lifecycle, blueprints, and audit export for networks you operate.', - href: '/docs/enterprise', - label: 'Read the enterprise documentation', - }, ]; const funnelCta = funnelCtaGroups.find((group) => group.slugs.has(currentSlug)); @@ -293,7 +250,7 @@ const faqSectionId = headingIds.has('frequently-asked-questions') )}
About this article -

Published by the Pilot Protocol team. Product claims are scoped to the availability labels and technical references linked in the article; deployment behavior can vary by version and environment.

+

Published by the Pilot Protocol team. Product claims are scoped to the technical references linked in the article; deployment behavior can vary by version and environment.

How we publish · Suggest a correction · Technical references

diff --git a/src/layouts/PlainLayout.astro b/src/layouts/PlainLayout.astro index 47a75585..172c9c4f 100644 --- a/src/layouts/PlainLayout.astro +++ b/src/layouts/PlainLayout.astro @@ -15,17 +15,12 @@ function styledRoute(pathname: string): string { '/plain/app-store': '/app-store', '/plain/docs': '/docs/', '/plain/mcp': '/for/mcp', - '/plain/networks': '/for/networks', '/plain/p2p': '/for/p2p', - '/plain/plans': '/plans', '/plain/publish': '/publish', - '/plain/setups': '/for/setups', '/plain/skills': '/for/skills', - '/plain/trust': '/trust', }; if (directRoutes[plainRoute]) return directRoutes[plainRoute]; - if (plainRoute.startsWith('/plain/setups/')) return `/for${plainRoute.slice('/plain'.length)}`; if (plainRoute.startsWith('/plain/')) return plainRoute.slice('/plain'.length) || '/'; return '/'; } @@ -53,12 +48,14 @@ const styledCanonical = new URL(

[ Switch to styled version → ]