From ed42f717a8abf7cb162977e413fd75fc1298dd56 Mon Sep 17 00:00:00 2001 From: Uddhav <255779543+letstokenize@users.noreply.github.com> Date: Tue, 17 Mar 2026 18:40:11 -0700 Subject: [PATCH] docs: sync restructured AI page, sidebar, CLI docs, and link fixes from docs-mainnet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors tempoxyz/docs-mainnet#45: - Updated homepage cards for mainnet - Restructured Using Tempo with AI page (two-card layout, llms.txt docs) - Consolidated SKILL.md URLs to tempo.xyz/SKILL.md - Fixed amp -x → amp --execute everywhere - New pages: machine payments agent quickstart, CLI download, learn/machine-payments - Sidebar: nested Ecosystem under Integrate Tempo, expanded Developer Tools, moved Changelog - Fixed broken links (.mdx extensions, wrong anchors, dead /wallet/troubleshooting) - Fixed baseUrl to skip tag on preview deploys Co-Authored-By: Uddhav <255779543+letstokenize@users.noreply.github.com> --- bun.lockb | Bin 370420 -> 370807 bytes src/pages/cli/download.mdx | 47 ++++++++ src/pages/cli/index.mdx | 6 +- src/pages/cli/wallet.mdx | 40 ++++--- src/pages/guide/getting-funds.mdx | 62 +++++------ src/pages/guide/machine-payments/agent.mdx | 103 ++++++++++++++++++ src/pages/guide/machine-payments/index.mdx | 6 + src/pages/guide/using-tempo-with-ai.mdx | 64 +++++------ src/pages/index.mdx | 48 ++++---- src/pages/learn/tempo/index.mdx | 6 + src/pages/learn/tempo/machine-payments.mdx | 121 +++++++++++++++++++++ src/pages/protocol/fees/spec-fee.mdx | 18 +-- src/pages/quickstart/integrate-tempo.mdx | 10 +- src/pages/quickstart/verify-contracts.mdx | 2 +- src/pages/wallet/index.mdx | 10 +- src/pages/wallet/recipes.mdx | 4 +- src/pages/wallet/use-with-agents.mdx | 12 +- vocs.config.ts | 116 ++++++++++---------- 18 files changed, 482 insertions(+), 193 deletions(-) create mode 100644 src/pages/cli/download.mdx create mode 100644 src/pages/guide/machine-payments/agent.mdx create mode 100644 src/pages/learn/tempo/machine-payments.mdx diff --git a/bun.lockb b/bun.lockb index f0c9da02b518610e8f4d4d51590b1004c38cfe07..3946eddd057d77e26fffc03664cfd4e146ec510b 100755 GIT binary patch delta 59936 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 delta 59514 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 | Target network (`mainnet`, `moderato`) | +| `--datadir ` | Data directory for downloaded state | +| `-u, --url ` | Download a specific snapshot URL instead of the latest | +| `--resumable` | Resume an interrupted download | +| `--minimal` | Download minimal snapshot (pruned state only) | +| `--archive` | Download full archive snapshot | + +## Examples + +Download the latest mainnet snapshot: + +```bash +tempo download --chain mainnet +``` + +Download to a specific directory: + +```bash +tempo download --chain mainnet --datadir /data/tempo +``` + +Resume an interrupted download: + +```bash +tempo download --chain mainnet --resumable +``` + +Then start your node with [`tempo node`](/cli/node). diff --git a/src/pages/cli/index.mdx b/src/pages/cli/index.mdx index 13f8e0f1..68b35f20 100644 --- a/src/pages/cli/index.mdx +++ b/src/pages/cli/index.mdx @@ -29,13 +29,13 @@ Paste this into your AI agent to set up Tempo Wallet and start making paid reque :::code-group ```bash [Claude Code] -claude -p "Read https://wallet.tempo.xyz/SKILL.md and set up tempo" +claude -p "Read https://tempo.xyz/SKILL.md and set up tempo" ``` ```bash [Amp] -amp -x "Read https://wallet.tempo.xyz/SKILL.md and set up tempo" +amp --execute "Read https://tempo.xyz/SKILL.md and set up tempo" ``` ```bash [Codex CLI] -codex exec "Read https://wallet.tempo.xyz/SKILL.md and set up tempo" +codex exec "Read https://tempo.xyz/SKILL.md and set up tempo" ``` ::: diff --git a/src/pages/cli/wallet.mdx b/src/pages/cli/wallet.mdx index d7e554be..85dc2dff 100644 --- a/src/pages/cli/wallet.mdx +++ b/src/pages/cli/wallet.mdx @@ -23,16 +23,28 @@ CLI interface for [Tempo Wallet](https://wallet.tempo.xyz), Tempo's web-based pa icon="lucide:log-in" /> + + @@ -66,9 +78,7 @@ To disconnect: tempo wallet logout ``` -## Use it - -### Check balances +## Check balances ```bash tempo wallet whoami @@ -76,7 +86,7 @@ tempo wallet whoami Shows your address, token balances, and key state. -### Manage access keys +## Manage access keys ```bash tempo wallet keys @@ -84,7 +94,7 @@ tempo wallet keys Each wallet can have multiple access keys with independent spending limits. Use these to constrain what an agent or script can spend. -### Add funds +## Add funds ```bash tempo wallet fund @@ -100,7 +110,7 @@ tempo wallet transfer For more options, see [Getting Funds on Tempo](/guide/getting-funds). -### Discover services +## Discover services ```bash tempo wallet services @@ -110,7 +120,7 @@ tempo wallet services The [Machine Payments Protocol](https://mpp.dev/overview) (MPP) lets any HTTP endpoint accept payments inline. The service directory indexes MPP-registered providers — each entry shows endpoint URLs, HTTP methods, pricing, and request schemas. Use it to find the right URL and payload for [`tempo request`](/cli/request). -### Manage payment sessions +## Manage payment sessions When you use [pay-as-you-go](/guide/machine-payments/pay-as-you-go) services, MPP opens a [session](https://mpp.dev/payment-methods/tempo/session) — a payment channel where your wallet deposits funds into an escrow contract, then pays per request using signed [vouchers](https://mpp.dev/protocol/credentials) off-chain. This avoids an on-chain transaction for every request, giving sub-100ms latency and near-zero per-request fees. diff --git a/src/pages/guide/getting-funds.mdx b/src/pages/guide/getting-funds.mdx index 337f5aa4..7e169e8c 100644 --- a/src/pages/guide/getting-funds.mdx +++ b/src/pages/guide/getting-funds.mdx @@ -3,44 +3,11 @@ title: Getting Funds on Tempo description: Bridge assets to Tempo, add funds in Tempo Wallet, or use the faucet on testnet. --- -import { Cards, Card } from 'vocs' - # Getting Funds on Tempo -You can get funds onto Tempo in three ways: - - - - - - - -## Bridge - -Use one of these supported bridges to move assets to Tempo: - -- **[LayerZero](https://layerzero.network/)**: Bridge supported assets from other chains to Tempo. -- **[Squid](https://app.squidrouter.com/)**: Swap and bridge assets to Tempo in one flow. -- **[Relay](https://relay.link/)**: Bridge assets to Tempo with low fees. - ## Tempo Wallet -[Tempo Wallet](https://wallet.tempo.xyz) is Tempo's web-based passkey wallet. You can add funds directly in the app. +[Tempo Wallet](https://wallet.tempo.xyz) is Tempo's web-based passkey wallet. You can onramp with fiat or bridge from other chains directly in the app. ### In Tempo Wallet @@ -51,7 +18,14 @@ Use one of these supported bridges to move assets to Tempo: ### With the CLI -Fund your wallet from the terminal using the [Tempo CLI](/cli): +Install the [Tempo CLI](/cli/wallet) and log in to your wallet: + +```bash +curl -fsSL https://tempo.xyz/install | bash +tempo wallet login +``` + +Then fund your wallet: ```bash tempo wallet fund @@ -61,9 +35,25 @@ tempo wallet fund Paste this into your agent to set up Tempo Wallet and add funds: +:::code-group +```bash [Claude Code] +claude -p "Read https://tempo.xyz/SKILL.md and fund my Tempo Wallet" +``` +```bash [Amp] +amp --execute "Read https://tempo.xyz/SKILL.md and fund my Tempo Wallet" ``` -Read https://wallet.tempo.xyz/SKILL.md and fund my Tempo Wallet +```bash [Codex CLI] +codex exec "Read https://tempo.xyz/SKILL.md and fund my Tempo Wallet" ``` +::: + +## Bridge + +Use one of these supported bridges to move assets to Tempo: + +- **[LayerZero](https://layerzero.network/)**: Bridge supported assets from other chains to Tempo. +- **[Squid](/ecosystem/bridges#squid)**: Swap and bridge assets to Tempo in one flow. +- **[Relay](/ecosystem/bridges#relay)**: Bridge assets to Tempo with low fees. ## Testnet Funds diff --git a/src/pages/guide/machine-payments/agent.mdx b/src/pages/guide/machine-payments/agent.mdx new file mode 100644 index 00000000..1f42106e --- /dev/null +++ b/src/pages/guide/machine-payments/agent.mdx @@ -0,0 +1,103 @@ +--- +title: Agent Quickstart +description: Use the tempo CLI to discover services, preview costs, and make paid requests from a terminal or AI agent — no SDK required. +--- + +import { Card, Cards } from 'vocs' + +# Agent quickstart + +The `tempo` CLI handles `402 Payment Required` responses the same way the client SDK does — but from a terminal, script, or AI agent, with zero integration code. + +::::steps + +### Install the CLI + +```bash +curl -fsSL https://tempo.xyz/install | bash +``` + +### Log in + +```bash +tempo wallet login +tempo wallet whoami +``` + +`login` opens a browser flow that creates or connects a Tempo wallet. `whoami` confirms readiness and prints your address and balances. + +:::tip +If your balance is zero, run `tempo wallet fund` before making requests. +::: + +### Discover services + +```bash +tempo wallet services --search ai +tempo wallet services +``` + +The service directory shows endpoint URLs, HTTP methods, pricing, and request schemas — everything you need to construct a valid request. + +### Preview cost + +```bash +tempo request --dry-run -X POST \ + --json '{"prompt":"a sunset over the ocean"}' \ + https://fal.mpp.tempo.xyz/fal-ai/flux/dev +``` + +`--dry-run` validates the request and shows the payment cost without spending. + +### Make a paid request + +```bash +tempo request -X POST \ + --json '{"prompt":"a sunset over the ocean"}' \ + https://fal.mpp.tempo.xyz/fal-ai/flux/dev +``` + +`tempo request` sends the request, intercepts the `402` challenge, signs and submits the payment, and retries with the credential — all in one command. + +:::: + +## Set up an AI agent + +Paste this into your agent to install Tempo's wallet and request skills: + +:::code-group +```txt [Claude Code] +Read https://tempo.xyz/SKILL.md and set up tempo +``` +```txt [Amp] +Read https://tempo.xyz/SKILL.md and set up tempo +``` +```txt [Codex] +Read https://tempo.xyz/SKILL.md and set up tempo +``` +::: + +Once installed, the agent can discover services, preview costs, and make paid requests within scoped spending limits. + +## Next steps + + + + + + diff --git a/src/pages/guide/machine-payments/index.mdx b/src/pages/guide/machine-payments/index.mdx index ff1b48d9..f97842c8 100644 --- a/src/pages/guide/machine-payments/index.mdx +++ b/src/pages/guide/machine-payments/index.mdx @@ -76,6 +76,12 @@ Two [intents](https://mpp.dev/protocol#payment-intents) are available on Tempo: description="Handle payment-gated resources automatically" to="/guide/machine-payments/client" /> + ⌘I / Ctrl+I) that provides: +| URL | Contents | +|---|---| +| [`/llms.txt`](https://docs.tempo.xyz/llms.txt) | Concise index of all pages with titles and descriptions | +| [`/llms-full.txt`](https://docs.tempo.xyz/llms-full.txt) | Complete documentation in a single file | -- **Open in ChatGPT/Claude**: Opens the current page context in popular AI assistants -- **Copy page for AI**: Copies the page content as Markdown to your clipboard -- **View as Markdown**: Opens the raw Markdown version of the current page -- **Copy MCP URL**: Copies the MCP server URL for AI assistant configuration +### MCP server -### MCP Server - -The docs include a built-in [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that allows AI assistants to navigate documentation and source code programmatically. +The docs include a built-in [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for programmatic navigation of documentation and source code. :::code-group ```bash [Claude Code] claude mcp add --transport http tempo https://docs.tempo.xyz/api/mcp ``` ```bash [Codex CLI] -codex mcp add vercel --url https://docs.tempo.xyz/api/mcp +codex mcp add tempo --url https://docs.tempo.xyz/api/mcp ``` ```bash [Amp] amp mcp add tempo https://docs.tempo.xyz/api/mcp ``` ::: -#### Connecting AI Assistants - -Configure your AI assistant to connect to the MCP server: +Or configure manually: ```json { diff --git a/src/pages/index.mdx b/src/pages/index.mdx index 686293bb..53e6cba2 100644 --- a/src/pages/index.mdx +++ b/src/pages/index.mdx @@ -12,37 +12,43 @@ Tempo is a general-purpose blockchain optimized for payments. Tempo is designed Tempo was designed in close collaboration with an exceptional group of [design partners](https://tempo.xyz/ecosystem) who are helping to validate the system against real payment workloads. -Whether you're new to stablecoins, ready to start building, or looking for partners to help you integrate, these docs will help you get started with Tempo. +These docs cover everything from creating a wallet to building payment systems on Tempo. - + + diff --git a/src/pages/learn/tempo/index.mdx b/src/pages/learn/tempo/index.mdx index 7b06ecb5..0603147a 100644 --- a/src/pages/learn/tempo/index.mdx +++ b/src/pages/learn/tempo/index.mdx @@ -47,4 +47,10 @@ Explore the key features that make Tempo purpose-built for payments: icon="lucide:eye-off" title="Privacy" /> + diff --git a/src/pages/learn/tempo/machine-payments.mdx b/src/pages/learn/tempo/machine-payments.mdx new file mode 100644 index 00000000..dcae26cd --- /dev/null +++ b/src/pages/learn/tempo/machine-payments.mdx @@ -0,0 +1,121 @@ +--- +description: The Machine Payments Protocol (MPP) is an open standard for machine-to-machine payments, co-authored by Stripe and Tempo. +--- + +import { Cards, Card } from 'vocs' + +# Machine Payments [Programmable payments for agents and services] + +Agents can write code, coordinate services, and execute complex workflows. What they can't do, until now, is pay for things. + +The [Machine Payments Protocol](https://mpp.dev) (MPP) is an open standard for machine-to-machine payments, co-authored by Stripe and Tempo. MPP lets any client (agents, apps, or humans) pay for any service inline with their HTTP request. No API keys, no billing accounts, no signup flows. + +MPP is live on Tempo Mainnet and works with stablecoins on Tempo, cards via Stripe, and Bitcoin via Lightning, with more payment methods coming. + +## How it works + +A client requests a paid resource. The server responds with `402 Payment Required` and a challenge describing the price. The client pays, retries with a credential, and the server returns the resource with a receipt. + +The entire flow happens in a single request cycle. No redirects, no webhooks, no out-of-band settlement. + +## What agents can do today + +Give your agent a wallet and it can transact autonomously across the internet: + + + + + + + + +## Sessions: OAuth for money + +Sessions let an agent authorize spending once, then make many payments without a separate on-chain transaction for each one. + +When an agent opens a session, it deposits funds into escrow. As the agent consumes resources (an API call, a model inference, a data query), payments stream continuously via signed vouchers off-chain. The server periodically settles the accumulated vouchers on-chain. + +Thousands of small transactions collapse into a single settlement. True pay-per-use at internet scale. + +| | **Charge** | **Session** | +|---|---|---| +| **Pattern** | One-time payment per request | Continuous pay-as-you-go | +| **Latency** | ~500ms (on-chain confirmation) | Near-zero (off-chain vouchers) | +| **Best for** | Single API calls, content access | LLM APIs, metered services, token streaming | +| **On-chain cost** | Per request | Amortized across many requests | + +## The Payments Directory + +The [Payments Directory](https://mpp.dev) catalogs MPP-compatible services that any agent can transact with automatically. At launch, the directory includes integrations with more than 100 services spanning model providers, developer infrastructure, compute platforms, and data services. + +Service providers can integrate MPP to monetize their APIs and become discoverable to agents. Use cases include pay-per-call APIs, monetized MCP servers, gated content, and multi-service agent workflows. + +## An open, rail-agnostic standard + +MPP is not tied to any single payment rail. The same protocol supports: + +- **Stablecoins on Tempo**: TIP-20 token transfers with instant finality +- **Cards via Stripe**: Visa, Mastercard, and other card networks +- **Bitcoin via Lightning**: Payments over the Lightning Network +- **Custom methods**: Anyone can build a [payment method](https://mpp.dev/payment-methods/custom) for their rail + +The core [Payment HTTP Authentication Scheme](https://paymentauth.org) is submitted to the IETF for standardization. Payment method specifications are separate documents that anyone can author and publish independently. + +## Why Tempo + +Tempo's infrastructure is purpose-built for the transaction patterns that machine payments produce: + +- **~500ms deterministic finality**: Fast enough for synchronous request/response flows +- **Sub-cent fees**: Low enough for micropayments and per-request billing +- **Payment lanes**: Dedicated transaction routing that stays reliable under load +- **Fee sponsorship**: Servers cover gas so clients only need stablecoins +- **Parallel nonces**: Payment transactions don't block other account activity + +## Get started + + + + + + + diff --git a/src/pages/protocol/fees/spec-fee.mdx b/src/pages/protocol/fees/spec-fee.mdx index f9c6a5df..a3f09dd9 100644 --- a/src/pages/protocol/fees/spec-fee.mdx +++ b/src/pages/protocol/fees/spec-fee.mdx @@ -13,7 +13,7 @@ This spec lays out how fees work on Tempo, including how fees are calculated, wh Tempo has no native token. Transaction fees are paid directly in USD-denominated stablecoins. This design removes the need for users or applications to hold volatile assets for gas, keeping the entire payment experience USD-native. -Users can pay gas fees in any [TIP-20](/protocol/tip20/spec) token whose currency is USD, as long as that stablecoin has sufficient liquidity on the enshrined [fee AMM](/protocol/fees/spec-fee-amm.mdx) against the token that the current validator wants to receive. +Users can pay gas fees in any [TIP-20](/protocol/tip20/spec) token whose currency is USD, as long as that stablecoin has sufficient liquidity on the enshrined [fee AMM](/protocol/fees/spec-fee-amm) against the token that the current validator wants to receive. In determining *which* token a user pays fees in, we want to maximize customizability (so that wallets or users can implement more sophisticated UX than is possible at the protocol layer), minimize surprise (particularly surprises in which a user pays fees in a stablecoin they did not expect to), and have sane default behavior so that users can begin using basic functions like payments even using wallets that are not customized for Tempo support. @@ -59,11 +59,11 @@ The protocol executes the max fee deduction and refund atomically. If insufficie ## Fee payer -Tempo supports *sponsored transactions* in which the `fee_payer` is a different address from the `tx.origin` of the transaction. This is supported by Tempo's [new transaction type](/protocol/transactions/spec-tempo-transaction.mdx), which has a `fee_payer_signature` field. +Tempo supports *sponsored transactions* in which the `fee_payer` is a different address from the `tx.origin` of the transaction. This is supported by Tempo's [new transaction type](/protocol/transactions/spec-tempo-transaction), which has a `fee_payer_signature` field. If no `fee_payer_signature` is provided, then the `fee_payer` of the transaction is its sender (`tx.origin`). -If the `fee_payer_signature` field is set, then it is used to derive the `fee_payer` for the transaction, as described in the [transaction spec](/protocol/transactions/spec-tempo-transaction.mdx). +If the `fee_payer_signature` field is set, then it is used to derive the `fee_payer` for the transaction, as described in the [transaction spec](/protocol/transactions/spec-tempo-transaction). For purposes of [fee token preferences](#fee-token-preferences), the `fee_payer` is the account that chooses the fee token. @@ -107,13 +107,13 @@ The protocol checks preferences at each of these levels, stopping at the first o * The token must be a TIP-20 token whose currency is USD. * The user must have sufficient balance in that token to pay the `gasLimit` on the transaction at the transaction's `gasPrice`. -* There must be sufficient liquidity on the [fee AMM](/protocol/fees/spec-fee-amm.mdx), as discussed in that specification. +* There must be sufficient liquidity on the [fee AMM](/protocol/fees/spec-fee-amm), as discussed in that specification. If no preference is specified at the transaction, account, or contract level, the protocol falls back to [pathUSD](#pathusd). ### Transaction level -Tempo's [new transaction type](/protocol/transactions/spec-tempo-transaction.mdx), allows transactions to specify a `fee_token` on the transaction. This overrides any preferences set at the account, contract, or validator level. +Tempo's [new transaction type](/protocol/transactions/spec-tempo-transaction), allows transactions to specify a `fee_token` on the transaction. This overrides any preferences set at the account, contract, or validator level. For [sponsored transactions](#fee-payer), the `tx.origin` address does not sign over the `fee_token` field (allowing the `fee_payer` to choose the fee token). @@ -125,7 +125,7 @@ To set its preference, the account can call the `setUserToken` function on the F At this step, the protocol does one more check: -* If the transaction is not a [Tempo transaction](/protocol/transactions/spec-tempo-transaction.mdx) *and* the transaction is a top-level call to the `setUserToken` function on the FeeManager, then the protocol checks the `token` argument to the function: +* If the transaction is not a [Tempo transaction](/protocol/transactions/spec-tempo-transaction) *and* the transaction is a top-level call to the `setUserToken` function on the FeeManager, then the protocol checks the `token` argument to the function: * If that token is a TIP-20 whose currency is USD, that token is used as the fee token (unless the transaction specifies a `fee_token` at the [transaction level](#transaction-level)). * If that token is not a TIP-20 or its currency is not USD, the transaction is invalid. @@ -139,14 +139,14 @@ If the top-level call of a transaction is to one of the following functions on a then that TIP-20 token is used as the user's fee token for that transaction (unless there is a preference specified at the [transaction](#transaction-level) or [account](#account-level) level). -For [Tempo transactions](/protocol/transactions/spec-tempo-transaction.mdx), this rule applies only if _all_ top-level calls are to the same TIP-20 contract, and each such call is to one of the functions listed above, with `fee_payer == tx.origin`. +For [Tempo transactions](/protocol/transactions/spec-tempo-transaction), this rule applies only if _all_ top-level calls are to the same TIP-20 contract, and each such call is to one of the functions listed above, with `fee_payer == tx.origin`. ### Stablecoin DEX contract -If the top-level call of a transaction is to the [Stablecoin DEX](/protocol/exchange/spec.mdx) contract, the function being called is either `swapExactAmountIn` or `swapExactAmountOut`, and the `tokenIn` argument to that function is the address of a TIP-20 token for which the currency is USD, then the `tokenIn` argument is used as the user's fee token for the transaction (unless there is a preference specified at the [transaction](#transaction-level) or [account](#account-level) level). +If the top-level call of a transaction is to the [Stablecoin DEX](/protocol/exchange/spec) contract, the function being called is either `swapExactAmountIn` or `swapExactAmountOut`, and the `tokenIn` argument to that function is the address of a TIP-20 token for which the currency is USD, then the `tokenIn` argument is used as the user's fee token for the transaction (unless there is a preference specified at the [transaction](#transaction-level) or [account](#account-level) level). -For [Tempo transactions](/protocol/transactions/spec-tempo-transaction.mdx), this rule applies only if there is only one top-level call in the transaction. +For [Tempo transactions](/protocol/transactions/spec-tempo-transaction), this rule applies only if there is only one top-level call in the transaction. ### pathUSD diff --git a/src/pages/quickstart/integrate-tempo.mdx b/src/pages/quickstart/integrate-tempo.mdx index 359bbaa6..80a58a8e 100644 --- a/src/pages/quickstart/integrate-tempo.mdx +++ b/src/pages/quickstart/integrate-tempo.mdx @@ -19,16 +19,10 @@ Tempo is fully compatible with the Ethereum Virtual Machine (EVM), targeting the description="Learn how to connect to the Tempo Testnet with your wallet or programmatically." to="/quickstart/connection-details" /> - diff --git a/src/pages/quickstart/verify-contracts.mdx b/src/pages/quickstart/verify-contracts.mdx index 3eccc4ed..bbab73ca 100644 --- a/src/pages/quickstart/verify-contracts.mdx +++ b/src/pages/quickstart/verify-contracts.mdx @@ -232,7 +232,7 @@ View the full API documentation at [contracts.tempo.xyz/docs](https://contracts. ## Troubleshooting :::tip -If you encounter unexpected failures, you might be running an older version of Foundry/Forge, or you might not be running Tempo's Foundry fork. See the [Foundry setup guide](/sdk/foundry/index.mdx) for installation instructions. +If you encounter unexpected failures, you might be running an older version of Foundry/Forge, or you might not be running Tempo's Foundry fork. See the [Foundry setup guide](/sdk/foundry) for installation instructions. ::: ### Verification Failed diff --git a/src/pages/wallet/index.mdx b/src/pages/wallet/index.mdx index 1171c808..cb40bfca 100644 --- a/src/pages/wallet/index.mdx +++ b/src/pages/wallet/index.mdx @@ -56,9 +56,17 @@ The CLI is designed for non-interactive use. Two features matter here: To set up an AI agent (Claude Code, Amp, Codex) with wallet and request capabilities: +:::code-group +```bash [Claude Code] +claude -p "Read https://tempo.xyz/SKILL.md and set up tempo" ``` -Read https://wallet.tempo.xyz/SKILL.md and set up tempo +```bash [Amp] +amp --execute "Read https://tempo.xyz/SKILL.md and set up tempo" ``` +```bash [Codex CLI] +codex exec "Read https://tempo.xyz/SKILL.md and set up tempo" +``` +::: This installs `tempo-wallet` and `tempo-request` skills automatically. The agent can then discover services, preview costs, and make paid requests within scoped spending limits. diff --git a/src/pages/wallet/recipes.mdx b/src/pages/wallet/recipes.mdx index 40ac24ed..a1f03253 100644 --- a/src/pages/wallet/recipes.mdx +++ b/src/pages/wallet/recipes.mdx @@ -109,7 +109,7 @@ tempo wallet services tempo wallet fund ``` -If issues persist, continue with [Troubleshooting](/wallet/troubleshooting). +If issues persist, continue with [Troubleshooting](/cli/wallet). ## End-to-End Script Pattern @@ -130,5 +130,5 @@ tempo request --json '{"input":"hello"}' ## See Also 1. [Reference](/wallet/reference) -2. [Troubleshooting](/wallet/troubleshooting) +2. [CLI Reference](/cli/wallet) 3. [Use with Agents](/wallet/use-with-agents) diff --git a/src/pages/wallet/use-with-agents.mdx b/src/pages/wallet/use-with-agents.mdx index 643fdf62..6ea8d57a 100644 --- a/src/pages/wallet/use-with-agents.mdx +++ b/src/pages/wallet/use-with-agents.mdx @@ -11,9 +11,17 @@ Paste this into your agent to set up Tempo Wallet: +:::code-group +```bash [Claude Code] +claude -p "Read https://tempo.xyz/SKILL.md and set up tempo" ``` -Read https://wallet.tempo.xyz/SKILL.md and set up tempo +```bash [Amp] +amp --execute "Read https://tempo.xyz/SKILL.md and set up tempo" ``` +```bash [Codex CLI] +codex exec "Read https://tempo.xyz/SKILL.md and set up tempo" +``` +::: ## Auto-installed Skills @@ -33,4 +41,4 @@ This works in supported skill-enabled agents including **Claude Code**, **Amp**, ## Troubleshooting -If agent runs fail, continue with [Troubleshooting](/wallet/troubleshooting). +If agent runs fail, continue with [Troubleshooting](/cli/wallet). diff --git a/vocs.config.ts b/vocs.config.ts index ab5a5340..0846af13 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -1,14 +1,13 @@ import { Changelog, defineConfig, McpSource } from 'vocs/config' import { createFeedbackAdapter } from './src/lib/feedback-adapter' +// Only set baseUrl in production — Vocs injects a tag from this value, +// which causes all links to resolve to the absolute URL on preview deployments. const baseUrl = (() => { + if (process.env.VERCEL_ENV && process.env.VERCEL_ENV !== 'production') return '' if (URL.canParse(process.env.VITE_BASE_URL)) return process.env.VITE_BASE_URL - // VERCEL_BRANCH_URL is the stable URL for the branch (e.g., next.docs.tempo.xyz) - // VERCEL_URL is the deployment-specific URL which causes CORS issues with custom domains if (process.env.VERCEL_ENV === 'production') return `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}` - if (process.env.VERCEL_BRANCH_URL) return `https://${process.env.VERCEL_BRANCH_URL}` - if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}` return '' })() @@ -67,10 +66,6 @@ export default defineConfig({ text: 'Home', link: '/', }, - { - text: 'Changelog', - link: '/changelog', - }, { text: 'Using Tempo with AI', link: '/guide/using-tempo-with-ai', @@ -82,10 +77,6 @@ export default defineConfig({ text: 'Getting Funds on Tempo', link: '/guide/getting-funds', }, - { - text: 'Use Tempo Transactions', - link: '/guide/tempo-transaction', - }, { text: 'Create & Use Accounts', collapsed: true, @@ -220,6 +211,10 @@ export default defineConfig({ text: 'Client quickstart', link: '/guide/machine-payments/client', }, + { + text: 'Agent quickstart', + link: '/guide/machine-payments/agent', + }, { text: 'Server quickstart', link: '/guide/machine-payments/server', @@ -252,12 +247,12 @@ export default defineConfig({ link: '/quickstart/connection-details', }, { - text: 'Get Faucet Funds', - link: '/quickstart/faucet', + text: 'Use Tempo Transactions', + link: '/guide/tempo-transaction', }, { - text: 'Developer Tools', - link: '/ecosystem', + text: 'Get Testnet Faucet Funds', + link: '/quickstart/faucet', }, { text: 'EVM Differences', @@ -279,47 +274,47 @@ export default defineConfig({ text: 'Contract Verification', link: '/quickstart/verify-contracts', }, - ], - }, - { - text: 'Tempo Ecosystem Infrastructure', - collapsed: true, - items: [ - { - text: 'Overview', - link: '/ecosystem', - }, - { - text: 'Bridges', - link: '/ecosystem/bridges', - }, - { - text: 'Data & Analytics', - link: '/ecosystem/data-analytics', - }, { - text: 'Block Explorers', - link: '/ecosystem/block-explorers', - }, - { - text: 'Wallets', - link: '/ecosystem/wallets', - }, - { - text: 'Smart Contract Libraries', - link: '/ecosystem/smart-contract-libraries', - }, - { - text: 'Node Infrastructure', - link: '/ecosystem/node-infrastructure', - }, - { - text: 'Security & Compliance', - link: '/ecosystem/security-compliance', - }, - { - text: 'Orchestration', - link: '/ecosystem/orchestration', + text: 'Ecosystem', + collapsed: true, + items: [ + { + text: 'Overview', + link: '/ecosystem', + }, + { + text: 'Bridges', + link: '/ecosystem/bridges', + }, + { + text: 'Data & Analytics', + link: '/ecosystem/data-analytics', + }, + { + text: 'Block Explorers', + link: '/ecosystem/block-explorers', + }, + { + text: 'Wallets', + link: '/ecosystem/wallets', + }, + { + text: 'Smart Contract Libraries', + link: '/ecosystem/smart-contract-libraries', + }, + { + text: 'Node Infrastructure', + link: '/ecosystem/node-infrastructure', + }, + { + text: 'Security & Compliance', + link: '/ecosystem/security-compliance', + }, + { + text: 'Orchestration', + link: '/ecosystem/orchestration', + }, + ], }, ], }, @@ -522,7 +517,6 @@ export default defineConfig({ }, { text: 'Tempo Developer Tools', - collapsed: true, items: [ { text: 'CLI', @@ -663,6 +657,10 @@ export default defineConfig({ text: 'Network Upgrades and Releases', link: '/guide/node/network-upgrades', }, + { + text: 'Changelog', + link: '/changelog', + }, ], }, // { @@ -764,6 +762,10 @@ export default defineConfig({ text: 'Privacy', link: '/learn/tempo/privacy', }, + { + text: 'Machine Payments', + link: '/learn/tempo/machine-payments', + }, ], }, ],