Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ description: Look up Base documentation with a compact directory-grouped index b
- [Base Chain](./base-chain/llms.txt) — Bridge tokens and messages between Base and Solana Mainnet
- [Get Started](./get-started/llms.txt)
- [Ledger](./ledger/llms.txt) — Base Ledgers let enterprises launch their own private payments products on Base. It allows you to build a private payments environment connected to Base. Balances, transactions, and transfers stay off public block explorers, while funds settle on Base.
- [Static](./static/llms.txt)

## Tools available for AI assistants

Expand Down
30 changes: 15 additions & 15 deletions docs/ai-agents/skills/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ version: 0.1.0

## Detection

The Base MCP exposes its tools to the harness when connected. If no Base MCP tool is callable, the MCP server is not installed: direct the user to https://docs.base.org/ai-agents/quickstart (or load [references/install.md](references/install.md) for app-specific steps) and stop.
The Base MCP exposes its tools to the harness when connected. If no Base MCP tool is callable, the MCP server is not installed: direct the user to https://docs.base.org/ai-agents/quickstart (or load [references/install.md](./references/install.md) for app-specific steps) and stop.

If Base MCP tools are available, load [references/tone.md](references/tone.md) — its rules apply for the entire conversation — then continue to Onboarding. If — and only if — sibling files aren't readable (e.g. you were handed just this `SKILL.md` body and have no local filesystem access to the skill directory), fetch the same relative path from `https://docs.base.org/ai-agents/skills/references/tone.md` using the `web_request` tool from Base MCP. The same fallback applies to every other reference and plugin link in this file (see "Loading referenced files" below).
If Base MCP tools are available, load [references/tone.md](./references/tone.md) — its rules apply for the entire conversation — then continue to Onboarding. If — and only if — sibling files aren't readable (e.g. you were handed just this `SKILL.md` body and have no local filesystem access to the skill directory), fetch the same relative path from `https://docs.base.org/ai-agents/skills/references/tone.md` using the `web_request` tool from Base MCP. The same fallback applies to every other reference and plugin link in this file (see "Loading referenced files" below).

## Onboarding

Expand All @@ -38,11 +38,11 @@ Two patterns deserve their own references because they span multiple tools:

| Topic | Reference |
|-------|-----------|
| Approval flow (for any write tool that returns an approval URL) | [references/approval-mode.md](references/approval-mode.md) |
| Batched contract calls (EIP-5792) | [references/batch-calls.md](references/batch-calls.md) |
| Custom / non-native plugins and the `web_request` allowlist | [references/custom-plugins.md](references/custom-plugins.md) |
| Platform install steps | [references/install.md](references/install.md) |
| Tone and language rules | [references/tone.md](references/tone.md) |
| Approval flow (for any write tool that returns an approval URL) | [references/approval-mode.md](./references/approval-mode.md) |
| Batched contract calls (EIP-5792) | [references/batch-calls.md](./references/batch-calls.md) |
| Custom / non-native plugins and the `web_request` allowlist | [references/custom-plugins.md](./references/custom-plugins.md) |
| Platform install steps | [references/install.md](./references/install.md) |
| Tone and language rules | [references/tone.md](./references/tone.md) |

### Loading referenced files

Expand All @@ -58,19 +58,19 @@ Plugins currently maintained alongside this skill (the **native plugins**):

| Plugin | Reference |
|--------|-----------|
| Morpho | [plugins/morpho.md](plugins/morpho.md) |
| Moonwell | [plugins/moonwell.md](plugins/moonwell.md) |
| Uniswap | [plugins/uniswap.md](plugins/uniswap.md) |
| Avantis (hybrid) | [plugins/avantis.md](plugins/avantis.md) |
| Virtuals | [plugins/virtuals.md](plugins/virtuals.md) |
| Aerodrome (CLI-only) | [plugins/aerodrome.md](plugins/aerodrome.md) |
| Bankr | [plugins/bankr.md](plugins/bankr.md) |
| Morpho | [plugins/morpho.md](./plugins/morpho.md) |
| Moonwell | [plugins/moonwell.md](./plugins/moonwell.md) |
| Uniswap | [plugins/uniswap.md](./plugins/uniswap.md) |
| Avantis (hybrid) | [plugins/avantis.md](./plugins/avantis.md) |
| Virtuals | [plugins/virtuals.md](./plugins/virtuals.md) |
| Aerodrome (CLI-only) | [plugins/aerodrome.md](./plugins/aerodrome.md) |
| Bankr | [plugins/bankr.md](./plugins/bankr.md) |

Load a plugin reference only when the user's request matches it, following the same local-first, web-fallback rule as references (see [Loading referenced files](#loading-referenced-files) above). For a plugin's own external tools, defer to the plugin file first, then to any CLI help, API schema, or MCP tool descriptions it explicitly tells you to use.

### Native plugins vs. custom / user-supplied plugins

Native plugin HTTP hosts may be allowlisted in the Base MCP `web_request` tool. Aerodrome is CLI-only and requires a harness with shell access. Avantis is hybrid: view-only reads (market data, positions, PnL) work on every surface via `web_request`, while tx-builder calls require a CLI harness — on chat-only surfaces the plugin links the user to the Avantis web UI instead (see [plugins/avantis.md](plugins/avantis.md)). Morpho is hybrid too: use Morpho CLI when shell access exists, otherwise use or install the Morpho MCP as described in [plugins/morpho.md](plugins/morpho.md). Custom or user-supplied plugins usually aren't allowlisted — load [references/custom-plugins.md](references/custom-plugins.md) for the decision tree on which HTTP path to use (harness HTTP tool vs. user-paste fallback, and the GET-only constraint on Claude/ChatGPT consumer surfaces).
Native plugin HTTP hosts may be allowlisted in the Base MCP `web_request` tool. Aerodrome is CLI-only and requires a harness with shell access. Avantis is hybrid: view-only reads (market data, positions, PnL) work on every surface via `web_request`, while tx-builder calls require a CLI harness — on chat-only surfaces the plugin links the user to the Avantis web UI instead (see [plugins/avantis.md](./plugins/avantis.md)). Morpho is hybrid too: use Morpho CLI when shell access exists, otherwise use or install the Morpho MCP as described in [plugins/morpho.md](./plugins/morpho.md). Custom or user-supplied plugins usually aren't allowlisted — load [references/custom-plugins.md](./references/custom-plugins.md) for the decision tree on which HTTP path to use (harness HTTP tool vs. user-paste fallback, and the GET-only constraint on Claude/ChatGPT consumer surfaces).

## Installation

Expand Down
4 changes: 2 additions & 2 deletions docs/ai-agents/skills/references/approval-mode.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ In approval mode, every write call (send, swap, sign, batched calls, and any plu
- an approval URL (the field name is on the MCP response — typically `approvalUrl`)
- a request ID (typically `requestId`)
2. **Show the user the link.** Present it as **"Approve Transaction"** (or similar neutral language). Refer to the approval destination as Base Account, not as the raw URL hostname or an implementation-specific provider. Just give the user the link to click.
- Beginner-friendly phrasing: _"Open this to approve the transaction: [Approve Transaction](URL)"_
- Terse phrasing: _"[Approve Transaction](URL)"_
- Beginner-friendly phrasing: _"Open this to approve the transaction: [Approve Transaction](https://example.com/approval-url)"_
- Terse phrasing: _"[Approve Transaction](https://example.com/approval-url)"_
3. **In CLI harnesses, also open the link automatically.** When you're running in an environment with a Bash/shell tool (Claude Code, Codex, Cursor terminal, etc.), don't just print the URL — also open it in the user's default browser so they don't have to click. Always print the link too as a fallback, then run the platform-appropriate open command:
- macOS: `open "<url>"`
- Linux: `xdg-open "<url>"` (fall back to `wslview` under WSL)
Expand Down
2 changes: 1 addition & 1 deletion docs/ai-agents/skills/references/batch-calls.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ The MCP advertises the exact parameter names and types — defer to its tool des

## Approval flow

Same as any write tool: the response returns an approval URL and request ID. See [approval-mode.md](approval-mode.md).
Same as any write tool: the response returns an approval URL and request ID. See [approval-mode.md](./approval-mode.md).

## Generic orchestration

Expand Down
2 changes: 1 addition & 1 deletion docs/ai-agents/skills/references/custom-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ So for non-native plugins on Claude / ChatGPT consumer surfaces:
- For GET endpoints:
1. Construct the full URL with every query parameter encoded inline (address, amount, slippage, chain, etc.).
2. Show the URL to the user and ask them to paste it back into the chat. Once pasted, you can fetch it yourself — that's the security model these surfaces enforce.
3. Parse the response and continue the flow (e.g. map returned calldata into the batched-calls tool, then walk through the approval flow — see [approval-mode.md](approval-mode.md) and [batch-calls.md](batch-calls.md)).
3. Parse the response and continue the flow (e.g. map returned calldata into the batched-calls tool, then walk through the approval flow — see [approval-mode.md](./approval-mode.md) and [batch-calls.md](./batch-calls.md)).

## Decision summary

Expand Down
4 changes: 2 additions & 2 deletions docs/ai-agents/skills/references/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ Then start a new chat (or `/reload-mcp` in an existing one).

## Authorization (first use)

The first time a wallet tool is called, an auth modal opens for the user to authorize the Base Account. Click **Allow** once. (See the live demo on the quickstart page.) After that, write operations still require per-transaction approval — see [approval-mode.md](approval-mode.md).
The first time a wallet tool is called, an auth modal opens for the user to authorize the Base Account. Click **Allow** once. (See the live demo on the quickstart page.) After that, write operations still require per-transaction approval — see [approval-mode.md](./approval-mode.md).

---

Expand All @@ -155,5 +155,5 @@ If it replies with a wallet address, the MCP is connected. If it says it doesn't
| No browser tab for sign-in | Open `https://mcp.base.org` directly, sign in, then re-add the server. |
| "Integration not found" / "Tool not available" | Restart the app — the server may not have finished loading. |
| Integrations / Connectors tab missing | App version is too old — update to the latest. |
| `web_request` rejects a hostname | The hostname isn't in the allowlist. For native HTTP plugins, use the harness HTTP tool if one is available; for custom plugins see [custom-plugins.md](custom-plugins.md). CLI-only plugins do not use `web_request`. |
| `web_request` rejects a hostname | The hostname isn't in the allowlist. For native HTTP plugins, use the harness HTTP tool if one is available; for custom plugins see [custom-plugins.md](./custom-plugins.md). CLI-only plugins do not use `web_request`. |
| Anything else | Send the user to [https://docs.base.org/ai-agents/quickstart](https://docs.base.org/ai-agents/quickstart). |
29 changes: 0 additions & 29 deletions docs/apps/resources/templates.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -64,32 +64,3 @@ This demo serves as the ultimate reference implementation, showcasing every Mini
Modify the templates to match your specific use case and deploy using your preferred hosting solution.
</Step>
</Steps>

### More Mini App Resources

<CardGroup cols={2}>
<Card
title="Viral Mini Apps"
icon="sparkles"
href="/mini-apps/growth/build-viral-mini-apps"
>
Strategies and examples for building highly shareable, viral mini apps.
</Card>
<Card
title="Data Driven Growth"
icon="chart-bar"
href="/mini-apps/technical-guides/data-driven-growth"
>
Learn how to use analytics and Base.dev to optimize your mini app's growth.
</Card>
<Card
title="Optimize Onboarding"
icon="user-plus"
href="/mini-apps/growth/optimize-onboarding"
>
Best practices for onboarding users and maximizing retention.
</Card>

</CardGroup>


3 changes: 1 addition & 2 deletions docs/base-account/basenames/basenames-faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Currently, only one address at a time can be linked to a Basename. However, we p

### 14. I am a builder. How do I integrate Basenames to my app?

If you're a builder looking to integrate Basenames into your app, follow the [Basenames + Wagmi tutorial](/base-account/basenames/basenames-wagmi-tutorial) to get started. If you have ideas for new features or badges that you'd like to integrate with Basenames, we'd love to [hear from you](https://app.deform.cc/form/b9c1c39f-f238-459e-a765-5093ca638075/?page_number=0).
If you're a builder looking to integrate Basenames into your app, follow the [Basenames + Wagmi tutorial](/base-account/framework-integrations/wagmi/basenames) to get started. If you have ideas for new features or badges that you'd like to integrate with Basenames, we'd love to [hear from you](https://app.deform.cc/form/b9c1c39f-f238-459e-a765-5093ca638075/?page_number=0).

### 15. How do I get a Basename for my app or project?

Expand All @@ -120,4 +120,3 @@ Basenames are built using the Ethereum Name Service (ENS) protocol, leveraging i
### 17. Do Basenames work on different chains?

Yes, your Name will work on any chain as long as the app is ENSIP-10 compliant. Note that when sending money or interacting across different chains, you should ensure the receiving platform supports ENS.

2 changes: 1 addition & 1 deletion docs/base-account/guides/verify-social-accounts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ function redirectToVerifyMiniApp(provider: string) {
}
```

After verification, the user returns to your `redirect_uri` with `?success=true`. Run the check again (step 3) and it now returns 200 with a token. If you're building for the Base app, see the [Apps overview](/apps/introduction/overview) for broader app structure and lifecycle guidance.
After verification, the user returns to your `redirect_uri` with `?success=true`. Run the check again (step 3) and it now returns 200 with a token. If you're building for the Base app, see the [Apps overview](/apps) for broader app structure and lifecycle guidance.

</Step>
</Steps>
Expand Down
31 changes: 0 additions & 31 deletions docs/base-account/improve-ux/spend-permissions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -328,34 +328,3 @@ await provider.request({
],
});
```

## Example Use Case

Let's say you're building an AI agent that can autonomously purchase [Zora Creator Coins](https://docs.zora.co/coins) using secure [Spend Permissions](/base-account/improve-ux/spend-permissions) on Base.

This example demonstrates how to combine Base Account's [Spend Permissions](/base-account/improve-ux/spend-permissions) with Coinbase Developer Platform (CDP) [Server Wallets](https://docs.cdp.coinbase.com/server-wallets/v2/introduction/quickstart) and [Trade API](https://docs.cdp.coinbase.com/trade-api/quickstart) for seamless, gas-free AI agent transactions.

<Frame>

<img
src="/images/base-account/spend-permissions-agent.png"
alt="Spend Permissions Agent Interface"
/>
</Frame>

<CardGroup cols={2}>
<Card
title="Live Demo"
icon="rocket"
href="https://base-agent-spend-permissions.vercel.app"
>
Try the live application and see spend permissions in action
</Card>
<Card
title="Source Code"
icon="github"
href="https://github.com/base/demos/tree/master/base-account/agent-spend-permissions"
>
Explore the complete implementation on GitHub
</Card>
</CardGroup>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: 'Returns all transaction receipts for a block. Use pending for pre-
Returns all transaction receipts for a given block.

<Warning>
This method returns HTTP 403 on the public Base RPC endpoints (`mainnet.base.org`, `sepolia.base.org`). It requires a dedicated or third-party RPC provider. See the [node providers page](/base-chain/network-information/node-providers) for options.
This method returns HTTP 403 on the public Base RPC endpoints (`mainnet.base.org`, `sepolia.base.org`). It requires a dedicated or third-party RPC provider. See the [node providers page](/base-chain/node-operators/node-providers) for options.
</Warning>

<Tip>
Expand Down
2 changes: 1 addition & 1 deletion docs/base-chain/network-information/bridges.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ code to withdraw the assets.

### For Token Issuers

If you have an ERC-20 token deployed on Ethereum and want to enable bridging to Base, see our guide on [Bridging an L1 Token to Base](/base-chain/quickstart/bridge-token). This covers deploying your token on Base using the standard bridge contracts and getting it listed on the Superchain token list.
If you have an ERC-20 token deployed on Ethereum and want to enable bridging to Base, use the sample code repository above as a starting point for the standard bridge contracts and get your token listed on the Superchain token list.

---

Expand Down
4 changes: 1 addition & 3 deletions docs/base-chain/quickstart/deploy-on-base.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,4 @@ This will return the initial value of the Counter contract's `number` storage va
## Next Steps

- Use [wagmi](https://wagmi.sh) or [viem](https://viem.sh) to connect your frontend to your contracts.
- Learn more about interacting with your contracts in the command line using Foundry from our [Foundry tutorial](/learn/foundry/deploy-with-foundry).


- Learn more about interacting with your contracts in the command line using Foundry from the [Foundry scripting guide](https://www.getfoundry.sh/forge/scripting).
4 changes: 2 additions & 2 deletions docs/base-chain/specs/protocol/bridging/withdrawals.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ stored in the `sentMessages` mapping, as well as the hash itself.

### Addresses are not Aliased on Withdrawals

When a contract makes a deposit, the sender's address is [aliased](deposits#address-aliasing). The same is not true
When a contract makes a deposit, the sender's address is [aliased](./deposits#address-aliasing). The same is not true
of withdrawals, which do not modify the sender's address. The difference is that:

- on L2, the deposit sender's address is returned by the `CALLER` opcode, meaning a contract cannot easily tell if the
Expand All @@ -114,7 +114,7 @@ recognize that having the same address does not imply that a contract on L2 will
## The Optimism Portal Contract

The Optimism Portal serves as both the entry and exit point to the Base L2. It is a contract which inherits from
the [OptimismPortal](deposits#deposit-contract) contract, and in addition provides the following interface for
the [OptimismPortal](./deposits#deposit-contract) contract, and in addition provides the following interface for
withdrawals:

- [`WithdrawalTransaction` type]
Expand Down
4 changes: 2 additions & 2 deletions docs/base-chain/specs/protocol/consensus/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ While this process is conceptually a pure function from the L1 chain to the L2 c
L2 chain is extended whenever new L1 blocks are added to the L1 chain. Similarly, the L2 chain re-organizes whenever the
L1 chain [re-organizes][g-reorg].

For a complete specification of the L2 block derivation, refer to the [L2 block derivation document](derivation).
For a complete specification of the L2 block derivation, refer to the [L2 block derivation document](./derivation).

The rollup node RPC surface is specified in the [RPC](rpc) document.
The rollup node RPC surface is specified in the [RPC](./rpc) document.

## Protocol Version tracking

Expand Down
4 changes: 2 additions & 2 deletions docs/base-chain/specs/protocol/consensus/p2p.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Specification of the rollup node peer-to-peer network, covering no

## Overview

The [rollup node](index) has an optional peer-to-peer (P2P) network service to improve the latency between
The [rollup node](./index) has an optional peer-to-peer (P2P) network service to improve the latency between
the view of sequencers and the rest of the network by bypassing the L1 in the happy case,
without relying on a single centralized endpoint.

Expand Down Expand Up @@ -308,7 +308,7 @@ A node may apply the block to their local engine ahead of L1 availability, if it

- The application of the block is reversible, in case of a conflict with delayed L1 information
- The subsequent forkchoice-update ensures this block is recognized as "unsafe"
(see [fork choice updated](derivation#engine-api-usage))
(see [fork choice updated](./derivation#engine-api-usage))

#### Branch selection

Expand Down
Loading
Loading