The App SDK was designed from the ground up to enable AI-assisted development. It uses React and
TypeScript, tools which LLMs understand well. Documentation is available in numerous LLM-friendly
formats. Additionally, we provide several other tools to make building with AI easier.This guide provides an overview of how to use these tools, as well as our advice on how to build
the best possible apps with AI.
AGENTS.md and CLAUDE.md
AGENTS.md describes a standard interface for providing instructions to code-writing AI
agents. AGENTS.md is supported by most of the major AI agents and IDEs, including Cursor, VSCode,
Devin, Codex, Jules, Copilot and Zed.Every new app comes bootstrapped with a default AGENTS.md file. We additionally supply a CLAUDE.md
file to provide instructions for Claude Code users.These files are pre-populated with best-practices and context on the App SDK, and will prevent a
range of common issues that can arise when building apps with AI.We also recommend modifying these files to provide additional context about your specific project.
Providing documentation context to AI
The documentation you are currently reading comes with numerous features to ensure that AI can
read it too.
Markdown URLs
By appending .md to the end of any URL, you will be redirected to a Markdown version of the page
in question. Try it for this page here.This can be useful when you want to quickly provide a specific page of documentation to an AI agent.
For example:
Update this action so that we display an error toast if the user is not subscribed to a premium plan.Lookup how to use toasts here: https://docs.attio.com/sdk/notifications/show-toast.md
Context menu
At the top-right of every page, we provide a context menu with various options for reading the
content with AI.
Copy page - Copies the content of the current page to your clipboard using Markdown.
View as Markdown - Redirects you to the Markdown URL for the current page.
Open in ChatGPT - Opens the current page in ChatGPT so that you can ask questions about the content.
Open in Claude - Opens the current page in Claude so that you can ask questions about the content.
Copy MCP Server - Copies the URL for the docs MCP server to your clipboard (see below).
Connect to Cursor - Opens Cursor settings to connect to the docs MCP server (see below).
Connect to VSCode - Opens VSCode settings to connect to the docs MCP server (see below).
The Attio Documentation MCP
Attio provides an MCP server so that agents may autonomously search our documentation.The URL for the MCP server is: https://docs.attio.com/mcp.
Through experimentation, we have found that the Documentation MCP is the most effective way to
provide the content of this site to AI agents.
Enabling for Claude Code
By default, new apps are pre-configured to use the MCP server in Claude Code via a .mcp.json
file. To enable this MCP server, please start a new Claude Code session and confirm your usage of
the MCP.To enable the MCP server in Claude Code for pre-existing apps, please configure a new or
pre-existing .mcp.json file with the following content:
By default, new apps are pre-configured to use the MCP server in Cursor via a .cursor/mcp.json
file. To enable this MCP server, please head to Cursor Settings > Tools & MCP and then
enable the Attio server.To enable the MCP server in Cursor for pre-existing apps, please click the “Connect to Cursor”
button in the context menu and follow the instructions. You may also add or modify a
.cursor/mcp.json file manually.
Enabling in VSCode
To enable the MCP server in VSCode, please click the “Connect to VSCode” button in the context menu
and follow the instructions.
Context7
Context7 is an AI-first documentation repository and search tool.If you are already using the Context7 MCP to provide documentation to your agents from a variety of
sources, Attio is also well-indexed by Context7. You can find the link to the latest version of the
documentation at https://context7.com/websites/attio.
llms.txt and llms-full.txt
llms.txt is a standard interface for providing information from the web to
LLMs.Attio’s docs provide two llms.txt files:
llms.txt - A concise summary of the content of the docs
llms-full.txt - A detailed summary of the content of the docs
The AI docs agent
docs.attio.com comes with a built-in AI agent to respond to your queries. To use the agent:
Open the search menu by clicking it at the top of the page or by using the keyboard shortcut
Command + K (Mac) or Ctrl + K (Windows).
Type your query into the search bar.
Select the “Ask AI assistant” option from the menu.
Writing effective prompts
Attio’s AGENTS.md and CLAUDE.md files will provide a baseline level of context and best-practices
for your agents. However, you will also need to write specific prompts for building the features
particular to your app.The following tips will help you write these prompts effectively.
Describe features in terms of App SDK functionality
Before writing your prompt, ensure you understand the general functionality provided by the App SDK.
You should then write your prompt in terms of this functionality.For example, rather than stating that you want to build a feature to add people to a sequence in
your mail sequencing service, instead specify that you want to use a record action with an ‘Add to
Sequence’ button.
Starter template context
The default template used when you bootstrap a new app comes with many useful code examples. Try
explicitly asking your agent to look at any examples that are similar to the feature you are building.
Utilize a planning phase
Before committing to an implementation, ask your agent to write a plan. Many agents now include a
built-in planning feature, but asking your agent to populate a PLAN.md or similar can be as, if
not more, effective.Once you have a plan, you can modify it and provide feedback. When you are happy, ask your agent to
implement the plan as a separate step.
Specify edge cases
An important component of writing high-quality apps is to ensure that your apps handle edge cases
and errors. Call this out explicitly in your prompt, especially if you are aware of particular error
cases for your design.
Provide especially clear context when communicating with external APIs
We have found that LLMs are particularly prone to hallucinating specific API interfaces. When
calling external APIs, we always recommend providing exact API documentation in the form of
examples, Markdown descriptions and OpenAPI specs. Additionally, we recommend reviewing all
AI-generated API calls in detail to ensure correctness.
Rely on automated checks
New apps come with a range of commands for automatic linting, type checking and validation. We
recommend encouraging your agents to run these checks so that they may fix their own mistakes.
Always review your work
AI can make mistakes. Always review your code carefully and run manual tests to ensure it works as
expected. AI can be helpful here too, and we have found a lot of success in using AI not just as a
code author, but also as a reviewer.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Attio Docs","colors":{"primary":"#3b6be8","light":"#f1f3f5"},"logo":{"light":"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max\u0026auto=format\u0026n=uDPxmqB0ooRQJQ39\u0026q=85\u0026s=9af1b9c979be94d84881d4779d7eb31f","dark":"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/dark.svg?fit=max\u0026auto=format\u0026n=uDPxmqB0ooRQJQ39\u0026q=85\u0026s=52a2e543a1cd72afbc860cc48259bd57"},"favicon":"https://mintcdn.com/attio/DVPA9KuK1yKhf6bD/favicon.svg?fit=max\u0026auto=format\u0026n=DVPA9KuK1yKhf6bD\u0026q=85\u0026s=b9d65163aef9a3430f212095aff95ec4","background":{"color":{"light":"#fff","dark":"#191b1f"}},"footer":{"socials":{"x":"https://x.com/Attio","website":"https://attio.com"}},"seo":{"indexing":"navigable"},"fonts":{"heading":{"family":"Inter","weight":100},"body":{"family":"Inter"}},"styling":{"codeblocks":"system","latex":true},"integrations":{"ga4":{"measurementId":"G-PZRKGLEPJ3"},"intercom":{"appId":"cqp3eh0z"}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Developer console","icon":"terminal","href":"https://build.attio.com/"},{"anchor":"Support","icon":"headset","href":"https://attio.com/help"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"attio","hasAudioNarration":false,"actualSubdomain":"attio","customDomains":["docs.attio.com"],"gitSource":{"type":"github","owner":"attio","repo":"developer-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af762a5eb2a7b185bb11c98","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"REST API","count":226},{"language":"default","tag":"Endpoint reference","count":165},{"language":"default","tag":"App SDK","count":149},{"language":"default","tag":"Core endpoints","count":107},{"language":"default","tag":"Components","count":62},{"language":"default","tag":"Standard objects","count":46},{"language":"default","tag":"Webhook reference","count":34},{"language":"default","tag":"Guides","count":22},{"language":"default","tag":"Attribute types","count":18},{"language":"default","tag":"Forms","count":18}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"*{--font-weight-headings-custom: 500}th{text-align:left}:not(pre)>code{padding:0.125rem}.mermaid-inline button{width:100%;display:flex;justify-content:center;align-items:center}.mermaid-inline button>a{width:100%}img[alt~=\"logo\"]{width:90px}.rounded-xl{border-radius:10px}.rounded-2xl{border-radius:10px}.rounded-\\[14px\\][data-component-part=\"code-block-root\"]{border-radius:8px}#navbar div>a[href=\"/sdk/guides/creating-an-app\"]{position:relative}#navbar div>a[href=\"/sdk/guides/creating-an-app\"]::after{content:\"Alpha\";display:inline-block;font-size:0.7rem;font-weight:600;color:#F97514;background-color:rgb(249, 117, 20, 0.1);padding:0.1rem 0.4rem;border-radius:4px;margin-left:0.5rem}#navigation-items>ul>li>a[href=\"/sdk/guides/creating-an-app\"]{position:relative}#navigation-items>ul>li>a[href=\"/sdk/guides/creating-an-app\"]::after{content:\"Alpha\";display:inline-block;font-size:0.7rem;font-weight:600;color:#0066ff;background-color:rgba(0, 102, 255, 0.1);padding:0.1rem 0.4rem;border-radius:4px;margin-left:0.5rem}"}],"page":{"pagePath":"sdk/guides/ai","slug":"/sdk/guides/ai","pageMetadata":{"title":"AI-assisted development","description":"Learn how to build apps faster with AI","href":"/sdk/guides/ai"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to build apps faster with AI\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The App SDK was designed from the ground up to enable AI-assisted development. It uses React and\nTypeScript, tools which LLMs understand well. Documentation is available in numerous LLM-friendly\nformats. Additionally, we provide several other tools to make building with AI easier.`}),`\n`,_jsx(_components.p,{children:`This guide provides an overview of how to use these tools, as well as our advice on how to build\nthe best possible apps with AI.`}),`\n`,_jsxs(Heading,{level:`2`,id:`agents-md-and-claude-md`,children:[_jsx(_components.code,{children:`AGENTS.md`}),` and `,_jsx(_components.code,{children:`CLAUDE.md`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://agents.md/`,children:_jsx(_components.code,{children:`AGENTS.md`})}),` describes a standard interface for providing instructions to code-writing AI\nagents. `,_jsx(_components.code,{children:`AGENTS.md`}),` is supported by most of the major AI agents and IDEs, including Cursor, VSCode,\nDevin, Codex, Jules, Copilot and Zed.`]}),`\n`,_jsxs(_components.p,{children:[`Every new app comes bootstrapped with a default `,_jsx(_components.code,{children:`AGENTS.md`}),` file. We additionally supply a `,_jsx(_components.code,{children:`CLAUDE.md`}),`\nfile to provide instructions for Claude Code users.`]}),`\n`,_jsx(_components.p,{children:`These files are pre-populated with best-practices and context on the App SDK, and will prevent a\nrange of common issues that can arise when building apps with AI.`}),`\n`,_jsx(_components.p,{children:`We also recommend modifying these files to provide additional context about your specific project.`}),`\n`,_jsx(Heading,{level:`2`,id:`providing-documentation-context-to-ai`,children:`Providing documentation context to AI`}),`\n`,_jsx(_components.p,{children:`The documentation you are currently reading comes with numerous features to ensure that AI can\nread it too.`}),`\n`,_jsx(Heading,{level:`3`,id:`markdown-urls`,children:`Markdown URLs`}),`\n`,_jsxs(_components.p,{children:[`By appending `,_jsx(_components.code,{children:`.md`}),` to the end of any URL, you will be redirected to a Markdown version of the page\nin question. Try it for this page `,_jsx(_components.a,{href:`https://docs.attio.com/sdk/guides/ai.md`,children:`here`}),`.`]}),`\n`,_jsx(_components.p,{children:`This can be useful when you want to quickly provide a specific page of documentation to an AI agent.\nFor example:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Update this action so that we display an error toast if the user is not subscribed to a premium plan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Lookup how to use toasts here: https://docs.attio.com/sdk/notifications/show-toast.md`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`context-menu`,children:`Context menu`}),`\n`,_jsx(_components.p,{children:`At the top-right of every page, we provide a context menu with various options for reading the\ncontent with AI.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Copy page`}),` - Copies the content of the current page to your clipboard using Markdown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`View as Markdown`}),` - Redirects you to the Markdown URL for the current page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Open in ChatGPT`}),` - Opens the current page in ChatGPT so that you can ask questions about the content.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Open in Claude`}),` - Opens the current page in Claude so that you can ask questions about the content.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Copy MCP Server`}),` - Copies the URL for the docs MCP server to your clipboard (see below).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Connect to Cursor`}),` - Opens Cursor settings to connect to the docs MCP server (see below).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Connect to VSCode`}),` - Opens VSCode settings to connect to the docs MCP server (see below).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`the-attio-documentation-mcp`,children:`The Attio Documentation MCP`}),`\n`,_jsx(_components.p,{children:`Attio provides an MCP server so that agents may autonomously search our documentation.`}),`\n`,_jsxs(_components.p,{children:[`The URL for the MCP server is: `,_jsx(_components.code,{children:`https://docs.attio.com/mcp`}),`.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Through experimentation, we have found that the Documentation MCP is the most effective way to\nprovide the content of this site to AI agents.`})}),`\n`,_jsx(Heading,{level:`4`,id:`enabling-for-claude-code`,children:`Enabling for Claude Code`}),`\n`,_jsxs(_components.p,{children:[`By default, new apps are pre-configured to use the MCP server in Claude Code via a `,_jsx(_components.code,{children:`.mcp.json`}),`\nfile. To enable this MCP server, please start a new Claude Code session and confirm your usage of\nthe MCP.`]}),`\n`,_jsxs(_components.p,{children:[`To enable the MCP server in Claude Code for pre-existing apps, please configure a new or\npre-existing `,_jsx(_components.code,{children:`.mcp.json`}),` file with the following content:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mcpServers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attio-docs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://docs.attio.com/mcp\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`enabling-in-cursor`,children:`Enabling in Cursor`}),`\n`,_jsxs(_components.p,{children:[`By default, new apps are pre-configured to use the MCP server in Cursor via a `,_jsx(_components.code,{children:`.cursor/mcp.json`}),`\nfile. To enable this MCP server, please head to `,_jsx(_components.strong,{children:`Cursor Settings`}),` > `,_jsx(_components.strong,{children:`Tools \u0026 MCP`}),` and then\nenable the Attio server.`]}),`\n`,_jsxs(_components.p,{children:[`To enable the MCP server in Cursor for pre-existing apps, please click the “Connect to Cursor”\nbutton in the context menu and follow the instructions. You may also add or modify a\n`,_jsx(_components.code,{children:`.cursor/mcp.json`}),` file manually.`]}),`\n`,_jsx(Heading,{level:`4`,id:`enabling-in-vscode`,children:`Enabling in VSCode`}),`\n`,_jsx(_components.p,{children:`To enable the MCP server in VSCode, please click the “Connect to VSCode” button in the context menu\nand follow the instructions.`}),`\n`,_jsx(Heading,{level:`3`,id:`context7`,children:`Context7`}),`\n`,_jsx(_components.p,{children:`Context7 is an AI-first documentation repository and search tool.`}),`\n`,_jsxs(_components.p,{children:[`If you are already using the Context7 MCP to provide documentation to your agents from a variety of\nsources, Attio is also well-indexed by Context7. You can find the link to the latest version of the\ndocumentation at `,_jsx(_components.a,{href:`https://context7.com/websites/attio`,children:`https://context7.com/websites/attio`}),`.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`llms-txt-and-llms-full-txt`,children:[_jsx(_components.code,{children:`llms.txt`}),` and `,_jsx(_components.code,{children:`llms-full.txt`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://llmstxt.org/`,children:_jsx(_components.code,{children:`llms.txt`})}),` is a standard interface for providing information from the web to\nLLMs.`]}),`\n`,_jsxs(_components.p,{children:[`Attio’s docs provide two `,_jsx(_components.code,{children:`llms.txt`}),` files:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://docs.attio.com/llms.txt`,children:_jsx(_components.code,{children:`llms.txt`})}),` - A concise summary of the content of the docs`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://docs.attio.com/llms-full.txt`,children:_jsx(_components.code,{children:`llms-full.txt`})}),` - A detailed summary of the content of the docs`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-ai-docs-agent`,children:`The AI docs agent`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`docs.attio.com`}),` comes with a built-in AI agent to respond to your queries. To use the agent:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the search menu by clicking it at the top of the page or by using the keyboard shortcut\n`,_jsx(_components.code,{children:`Command + K`}),` (Mac) or `,_jsx(_components.code,{children:`Ctrl + K`}),` (Windows).`]}),`\n`,_jsx(_components.li,{children:`Type your query into the search bar.`}),`\n`,_jsx(_components.li,{children:`Select the “Ask AI assistant” option from the menu.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`writing-effective-prompts`,children:`Writing effective prompts`}),`\n`,_jsxs(_components.p,{children:[`Attio’s `,_jsx(_components.code,{children:`AGENTS.md`}),` and `,_jsx(_components.code,{children:`CLAUDE.md`}),` files will provide a baseline level of context and best-practices\nfor your agents. However, you will also need to write specific prompts for building the features\nparticular to your app.`]}),`\n`,_jsx(_components.p,{children:`The following tips will help you write these prompts effectively.`}),`\n`,_jsx(Heading,{level:`3`,id:`describe-features-in-terms-of-app-sdk-functionality`,children:`Describe features in terms of App SDK functionality`}),`\n`,_jsx(_components.p,{children:`Before writing your prompt, ensure you understand the general functionality provided by the App SDK.\nYou should then write your prompt in terms of this functionality.`}),`\n`,_jsx(_components.p,{children:`For example, rather than stating that you want to build a feature to add people to a sequence in\nyour mail sequencing service, instead specify that you want to use a record action with an ‘Add to\nSequence’ button.`}),`\n`,_jsx(Heading,{level:`3`,id:`starter-template-context`,children:`Starter template context`}),`\n`,_jsx(_components.p,{children:`The default template used when you bootstrap a new app comes with many useful code examples. Try\nexplicitly asking your agent to look at any examples that are similar to the feature you are building.`}),`\n`,_jsx(Heading,{level:`3`,id:`utilize-a-planning-phase`,children:`Utilize a planning phase`}),`\n`,_jsxs(_components.p,{children:[`Before committing to an implementation, ask your agent to write a plan. Many agents now include a\nbuilt-in planning feature, but asking your agent to populate a `,_jsx(_components.code,{children:`PLAN.md`}),` or similar can be as, if\nnot more, effective.`]}),`\n`,_jsx(_components.p,{children:`Once you have a plan, you can modify it and provide feedback. When you are happy, ask your agent to\nimplement the plan as a separate step.`}),`\n`,_jsx(Heading,{level:`3`,id:`specify-edge-cases`,children:`Specify edge cases`}),`\n`,_jsx(_components.p,{children:`An important component of writing high-quality apps is to ensure that your apps handle edge cases\nand errors. Call this out explicitly in your prompt, especially if you are aware of particular error\ncases for your design.`}),`\n`,_jsx(Heading,{level:`3`,id:`provide-especially-clear-context-when-communicating-with-external-apis`,children:`Provide especially clear context when communicating with external APIs`}),`\n`,_jsx(_components.p,{children:`We have found that LLMs are particularly prone to hallucinating specific API interfaces. When\ncalling external APIs, we always recommend providing exact API documentation in the form of\nexamples, Markdown descriptions and OpenAPI specs. Additionally, we recommend reviewing all\nAI-generated API calls in detail to ensure correctness.`}),`\n`,_jsx(Heading,{level:`3`,id:`rely-on-automated-checks`,children:`Rely on automated checks`}),`\n`,_jsx(_components.p,{children:`New apps come with a range of commands for automatic linting, type checking and validation. We\nrecommend encouraging your agents to run these checks so that they may fix their own mistakes.`}),`\n`,_jsx(Heading,{level:`3`,id:`always-review-your-work`,children:`Always review your work`}),`\n`,_jsx(_components.p,{children:`AI can make mistakes. Always review your code carefully and run manual tests to ensure it works as\nexpected. AI can be helpful here too, and we have found a lot of success in using AI not just as a\ncode author, but also as a reviewer.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"AI-assisted development","description":"Learn how to build apps faster with AI","href":"/sdk/guides/ai"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"AGENTS.md and CLAUDE.md","slug":"agents-md-and-claude-md","depth":2,"children":[]},{"title":"Providing documentation context to AI","slug":"providing-documentation-context-to-ai","depth":2,"children":[{"title":"Markdown URLs","slug":"markdown-urls","depth":3,"children":[]},{"title":"Context menu","slug":"context-menu","depth":3,"children":[]},{"title":"The Attio Documentation MCP","slug":"the-attio-documentation-mcp","depth":3,"children":[]},{"title":"Enabling for Claude Code","slug":"enabling-for-claude-code","depth":4,"children":[]},{"title":"Enabling in Cursor","slug":"enabling-in-cursor","depth":4,"children":[]},{"title":"Enabling in VSCode","slug":"enabling-in-vscode","depth":4,"children":[]},{"title":"Context7","slug":"context7","depth":3,"children":[]},{"title":"llms.txt and llms-full.txt","slug":"llms-txt-and-llms-full-txt","depth":3,"children":[]}]},{"title":"The AI docs agent","slug":"the-ai-docs-agent","depth":2,"children":[]},{"title":"Writing effective prompts","slug":"writing-effective-prompts","depth":2,"children":[{"title":"Describe features in terms of App SDK functionality","slug":"describe-features-in-terms-of-app-sdk-functionality","depth":3,"children":[]},{"title":"Starter template context","slug":"starter-template-context","depth":3,"children":[]},{"title":"Utilize a planning phase","slug":"utilize-a-planning-phase","depth":3,"children":[]},{"title":"Specify edge cases","slug":"specify-edge-cases","depth":3,"children":[]},{"title":"Provide especially clear context when communicating with external APIs","slug":"provide-especially-clear-context-when-communicating-with-external-apis","depth":3,"children":[]},{"title":"Rely on automated checks","slug":"rely-on-automated-checks","depth":3,"children":[]},{"title":"Always review your work","slug":"always-review-your-work","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"attio","siteName":"Attio Docs","title":"AI-assisted development - Attio Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-05T14:18:27.760Z","originalFileLocation":"sdk/guides/ai.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to build apps faster with AI\">\u003cmeta data-mint-head name=\"application-name\" content=\"Attio Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"AI-assisted development - Attio Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to build apps faster with AI\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Attio Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.attio.com/sdk/guides/ai\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://attio.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=AI-assisted+development\u0026amp;description=Learn+how+to+build+apps+faster+with+AI\u0026amp;theme=b65e792f04e0c661de294233\u0026amp;signature=8b36ec6f221960eacf1a292dc76d58650e88f2e284c061a90b67297db7af11b1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"AI-assisted development - Attio Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to build apps faster with AI\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://attio.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=AI-assisted+development\u0026amp;description=Learn+how+to+build+apps+faster+with+AI\u0026amp;theme=b65e792f04e0c661de294233\u0026amp;signature=8b36ec6f221960eacf1a292dc76d58650e88f2e284c061a90b67297db7af11b1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Attio Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3b6be8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.attio.com/sdk/guides/ai\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdk/guides/ai.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.attio.com/#organization\",\"name\":\"Attio Docs\",\"url\":\"https://docs.attio.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max\u0026auto=format\u0026n=uDPxmqB0ooRQJQ39\u0026q=85\u0026s=9af1b9c979be94d84881d4779d7eb31f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.attio.com#website\",\"name\":\"Attio Docs\",\"url\":\"https://docs.attio.com\",\"publisher\":{\"@id\":\"https://docs.attio.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.attio.com/sdk/guides/ai#webpage\",\"url\":\"https://docs.attio.com/sdk/guides/ai\",\"name\":\"AI-assisted development\",\"description\":\"Learn how to build apps faster with AI\",\"dateModified\":\"2026-08-05T14:18:27.760Z\",\"isPartOf\":{\"@id\":\"https://docs.attio.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.attio.com/sdk/guides/ai#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.attio.com/sdk/guides/ai#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.attio.com/sdk/guides/creating-an-app\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI-assisted development\",\"item\":\"https://docs.attio.com/sdk/guides/ai\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.attio.com/sdk/guides/ai#article\",\"headline\":\"AI-assisted development\",\"name\":\"AI-assisted development\",\"description\":\"Learn how to build apps faster with AI\",\"url\":\"https://docs.attio.com/sdk/guides/ai\",\"mainEntityOfPage\":{\"@id\":\"https://docs.attio.com/sdk/guides/ai#webpage\"},\"dateModified\":\"2026-08-05T14:18:27.760Z\",\"publisher\":{\"@id\":\"https://docs.attio.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.attio.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Attio Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Attio Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/sdk/guides/ai.md","siteName":"Attio Docs","nav":{"global":{"anchors":[{"anchor":"Developer console","icon":"terminal","href":"https://build.attio.com/"},{"anchor":"Support","icon":"headset","href":"https://attio.com/help"}]},"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/docs/overview"}]},{"tab":"App SDK","groups":[{"group":"Introduction","pages":[{"title":"App SDK","href":"/sdk/overview"},{"title":"SDK concepts","href":"/sdk/deep-dives/overview"}]},{"group":"Guides","pages":[{"title":"Creating an app","href":"/sdk/guides/creating-an-app"},{"title":"Querying Attio data","href":"/sdk/guides/querying-attio-data"},{"title":"Making HTTP requests","href":"/sdk/guides/making-http-requests"},{"title":"Authenticating to external services","href":"/sdk/guides/authenticating-to-external-services"},{"title":"Building forms","href":"/sdk/guides/building-forms"},{"title":"Using charts","href":"/sdk/guides/using-charts"},{"title":"Defining app settings","href":"/sdk/guides/adding-workspace-settings"},{"title":"Building app pages","href":"/sdk/guides/building-app-pages"},{"title":"Receiving HTTP requests","href":"/sdk/guides/receiving-http-requests"},{"title":"Cleaning up on uninstall","href":"/sdk/guides/cleaning-up-on-uninstall"},{"title":"Debugging your app","description":"How to debug your app using logging in frontend and server environments","href":"/sdk/guides/debugging-your-app"},{"title":"AI-assisted development","href":"/sdk/guides/ai"},{"title":"Migration: Folder structure","description":"Convert an existing app to the folder-based layout with attio migrate folder-structure","href":"/sdk/guides/folder-structure-migration"},{"title":"Building workflow blocks","href":"/guides/building-workflow-blocks"}]},{"group":"Extensions","pages":[{"title":"App structure","href":"/sdk/extensions/overview"},{"title":"Record action","sidebarTitle":"Record action","href":"/sdk/extensions/record-action"},{"title":"Bulk record action","sidebarTitle":"Bulk record action","href":"/sdk/extensions/bulk-record-action"},{"title":"Record widget","sidebarTitle":"Record widget","href":"/sdk/extensions/record-widget"},{"title":"Record tab","sidebarTitle":"Record tab","href":"/sdk/extensions/record-tab"},{"title":"Object action","sidebarTitle":"Object action","href":"/sdk/extensions/object-action"},{"group":"Text selection","pages":[{"title":"Call recording transcript text action","sidebarTitle":"Call recording transcript","href":"/sdk/extensions/call-recording-transcript-text-action"},{"title":"Call recording insight text action","sidebarTitle":"Call recording insights","href":"/sdk/extensions/call-recording-insight-text-action"},{"title":"Call recording summary text action","sidebarTitle":"Call recording summary","href":"/sdk/extensions/call-recording-summary-text-action"}]}]},{"group":"Pages","pages":[{"title":"Pages","sidebarTitle":"Overview","href":"/sdk/pages/overview"},{"title":"Extensions.definePage()","href":"/sdk/pages/define-page"}]},{"group":"Workflow blocks","pages":[{"title":"Workflow blocks","sidebarTitle":"Overview","href":"/sdk/workflow-blocks/overview"},{"title":"File structure","href":"/sdk/workflows/file-structure"},{"group":"Defining a block","pages":[{"title":"Block definition","href":"/sdk/workflows/define-workflow-block"},{"title":"Config schema","href":"/sdk/workflows/config-schema"},{"title":"Outcome schema","href":"/sdk/workflows/outcome-schema"}]},{"title":"Configurator","href":"/sdk/workflows/configurator"},{"title":"Block lifecycle","href":"/sdk/workflows/block-lifecycle"},{"group":"Step handlers","pages":[{"title":"Executing a step","href":"/sdk/workflows/define-workflow-block-execute"},{"title":"Finishing a deferred step","href":"/sdk/workflows/define-workflow-block-resume-callback"}]},{"group":"Trigger handlers","pages":[{"title":"Registering a trigger","href":"/sdk/workflows/define-workflow-block-activate"},{"title":"Receiving a trigger event","href":"/sdk/workflows/define-workflow-block-on-trigger-callback"},{"title":"Deactivating a trigger","href":"/sdk/workflows/define-workflow-block-deactivate"}]}]},{"group":"Notifications","pages":[{"title":"Notifying the user","href":"/sdk/notifications/notifications"},{"title":"alert()","href":"/sdk/notifications/alert"},{"title":"confirm()","href":"/sdk/notifications/confirm"},{"title":"showToast()","href":"/sdk/notifications/show-toast"}]},{"group":"Dialogs","pages":[{"title":"showDialog()","href":"/sdk/dialogs/show-dialog"},{"title":"\u003cDialogList />","href":"/sdk/dialogs/dialog-list"}]},{"group":"Navigation","pages":[{"title":"Navigation","sidebarTitle":"Overview","href":"/sdk/navigation/overview"},{"title":"\u003cAttioLink />","href":"/sdk/navigation/attio-link"},{"title":"navigate()","href":"/sdk/navigation/navigate"}]},{"group":"Components","pages":[{"title":"\u003cAvatar />","href":"/sdk/components/avatar"},{"title":"\u003cBadge />","href":"/sdk/components/badge"},{"title":"\u003cBanner />","href":"/sdk/components/banner"},{"title":"\u003cButton />","href":"/sdk/components/button"},{"title":"\u003cCard />","href":"/sdk/components/card"},{"title":"\u003cDescriptionList />","href":"/sdk/components/description-list"},{"title":"\u003cDivider />","href":"/sdk/components/divider"},{"title":"\u003cEmptyState />","href":"/sdk/components/empty-state"},{"title":"\u003cGrid />","href":"/sdk/components/grid"},{"title":"\u003cImage />","href":"/sdk/components/image"},{"title":"\u003cJson />","href":"/sdk/components/json"},{"title":"\u003cLink />","href":"/sdk/components/link"},{"title":"\u003cLoadingState />","href":"/sdk/components/loading-state"},{"title":"\u003cSection />","href":"/sdk/components/section"},{"title":"\u003cStack />","href":"/sdk/components/stack"},{"title":"\u003cStatusBadge />","href":"/sdk/components/status-badge"},{"title":"\u003cTable />","href":"/sdk/components/table"},{"title":"experimental_useDataTable()","href":"/sdk/components/data-table"},{"title":"\u003cTextBlock />","href":"/sdk/components/text-block"},{"title":"\u003cTypography />","href":"/sdk/components/typography"},{"group":"Charts","pages":[{"title":"\u003cChart.Bar />","href":"/sdk/components/charts/bar"},{"title":"\u003cChart.Line />","href":"/sdk/components/charts/line"},{"title":"\u003cChart.Pie />","href":"/sdk/components/charts/pie"},{"title":"\u003cChart.Metric />","href":"/sdk/components/charts/metric"},{"title":"\u003cChart.Funnel />","href":"/sdk/components/charts/funnel"},{"title":"\u003cChart.Loading />","href":"/sdk/components/charts/loading"}]},{"group":"Forms","pages":[{"title":"\u003cAttioRecordCombobox />","href":"/sdk/components/forms/attio-record-combobox"},{"title":"\u003cAttioUserCombobox />","href":"/sdk/components/forms/attio-user-combobox"},{"title":"\u003cCheckbox />","href":"/sdk/components/forms/checkbox"},{"title":"\u003cCombobox />","href":"/sdk/components/forms/combobox"},{"title":"\u003cDateTimeInput />","href":"/sdk/components/forms/date-time-input"},{"title":"\u003cFieldset />","href":"/sdk/components/forms/fieldset"},{"title":"\u003cForm />","href":"/sdk/components/forms/form"},{"title":"\u003cInputGroup />","href":"/sdk/components/forms/input-group"},{"title":"\u003cNumberInput />","href":"/sdk/components/forms/number-input"},{"title":"\u003cPlainDateInput />","href":"/sdk/components/forms/plain-date-input"},{"title":"\u003cRadioGroup />","href":"/sdk/components/forms/radio-group"},{"title":"\u003cSubmitButton />","href":"/sdk/components/forms/submit-button"},{"title":"\u003cTextInput />","href":"/sdk/components/forms/text-input"},{"title":"\u003cTextArea />","href":"/sdk/components/forms/text-area"},{"title":"\u003cToggle />","href":"/sdk/components/forms/toggle"},{"title":"\u003cWithState />","href":"/sdk/components/forms/with-state"}]},{"group":"Workspace settings","pages":[{"title":"\u003cAttioUserCombobox />","href":"/sdk/components/workspace-settings/attio-user-combobox"},{"title":"\u003cButton />","href":"/sdk/components/workspace-settings/button"},{"title":"\u003cCheckbox />","href":"/sdk/components/workspace-settings/checkbox"},{"title":"\u003cCombobox />","href":"/sdk/components/workspace-settings/combobox"},{"title":"\u003cFieldset />","href":"/sdk/components/workspace-settings/fieldset"},{"title":"\u003cForm />","href":"/sdk/components/workspace-settings/form"},{"title":"\u003cInputGroup />","href":"/sdk/components/workspace-settings/input-group"},{"title":"\u003cNumberInput />","href":"/sdk/components/workspace-settings/number-input"},{"title":"\u003cRadioGroup />","href":"/sdk/components/workspace-settings/radio-group"},{"title":"\u003cRichTextInput />","href":"/sdk/components/workspace-settings/rich-text-input"},{"title":"\u003cSection />","href":"/sdk/components/workspace-settings/section"},{"title":"\u003cTextInput />","href":"/sdk/components/workspace-settings/text-input"},{"title":"\u003cToggle />","href":"/sdk/components/workspace-settings/toggle"},{"title":"\u003cWithState />","href":"/sdk/components/workspace-settings/with-state"}]},{"group":"Widgets","pages":[{"title":"\u003cWidget.TextWidget />","href":"/sdk/components/widgets/text-widget"},{"title":"\u003cWidget.Title />","href":"/sdk/components/widgets/title"},{"title":"\u003cWidget.Text.Primary />","href":"/sdk/components/widgets/text-primary"},{"title":"\u003cWidget.Text.Secondary />","href":"/sdk/components/widgets/text-secondary"},{"title":"\u003cWidget.Loading />","href":"/sdk/components/widgets/loading"},{"title":"\u003cWidget.Decoration />","href":"/sdk/components/widgets/decoration"}]}]},{"group":"Forms","pages":[{"title":"Form schema","href":"/sdk/forms/form-schema"},{"title":"useForm()","href":"/sdk/forms/use-form"}]},{"group":"Icons","pages":[{"title":"AttioIcon","href":"/sdk/icons"}]},{"group":"Settings","pages":[{"title":"Workspace settings","href":"/sdk/settings/overview"},{"title":"Settings.defineWorkspaceSchema()","href":"/sdk/settings/define-workspace-schema"},{"title":"Settings.defineWorkspacePage()","href":"/sdk/settings/define-workspace-page"},{"title":"Settings.useForm()","href":"/sdk/settings/use-form"},{"title":"Settings.useSettings()","href":"/sdk/settings/use-settings"},{"title":"Settings.getSettings()","href":"/sdk/settings/get-settings"},{"title":"Settings.setSettings()","href":"/sdk/settings/set-settings"}]},{"group":"GraphQL","pages":[{"title":"GraphQL","href":"/sdk/graphql/graphql"},{"title":"runQuery()","href":"/sdk/graphql/run-query"},{"title":"useQuery()","href":"/sdk/graphql/use-query"}]},{"group":"Data fetching","pages":[{"title":"useAsyncCache()","href":"/sdk/data-fetching/use-async-cache"},{"title":"React Query","href":"/sdk/data-fetching/react-query"}]},{"group":"Server","pages":[{"title":"Server functions","mode":"wide","href":"/sdk/server/server-functions"},{"title":"Attio API Token","href":"/sdk/server/attio-api-token"},{"title":"Environment Variables","href":"/sdk/server/environment-variables"},{"title":"Available Globals","href":"/sdk/server/available-globals"},{"group":"Connections","pages":[{"title":"Connections","href":"/sdk/server/connections/connections"},{"title":"getUserConnection()","href":"/sdk/server/connections/get-user-connection"},{"title":"getWorkspaceConnection()","href":"/sdk/server/connections/get-workspace-connection"}]},{"group":"Events","pages":[{"title":"Events","href":"/sdk/server/events/events"},{"title":"connection-added","href":"/sdk/server/events/connection-added"},{"title":"connection-removed","href":"/sdk/server/events/connection-removed"}]},{"group":"Webhooks","pages":[{"title":"Webhook Handlers","href":"/sdk/server/webhooks/webhook-handlers"},{"title":"createWebhookHandler()","href":"/sdk/server/webhooks/create-webhook-handler"},{"title":"deleteWebhookHandler()","href":"/sdk/server/webhooks/delete-webhook-handler"},{"title":"updateWebhookHandler()","href":"/sdk/server/webhooks/update-webhook-handler"}]},{"title":"KV Store","href":"/sdk/server/kv-store"},{"title":"timingSafeEqual","href":"/sdk/server/timing-safe-equal"}]},{"group":"System","pages":[{"title":"platform","href":"/sdk/system/platform"}]},{"group":"Legacy","pages":[{"title":"App configuration file","sidebarTitle":"app.ts","href":"/sdk/entry-points/app-ts"},{"group":"Settings (legacy)","pages":[{"title":"Workspace settings schema","href":"/sdk/settings/app-settings-schema"},{"title":"useWorkspaceSettingsForm()","href":"/sdk/settings/use-workspace-settings-form"},{"title":"useWorkspaceSettings()","href":"/sdk/settings/use-workspace-settings"},{"title":"getWorkspaceSettings()","href":"/sdk/settings/get-workspace-settings"},{"title":"getWorkspaceSetting()","href":"/sdk/settings/get-workspace-setting"},{"title":"setWorkspaceSetting()","href":"/sdk/settings/set-workspace-setting"}]}]}]},{"tab":"REST API","pages":[{"title":"REST API","href":"/rest-api/overview"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/overview"}]},{"tab":"SQL","pages":[{"title":"SQL","href":"/sql/overview"}]},{"tab":"Share","pages":[{"title":"Share","href":"/share/the-publication-lifecycle"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/app-sdk"}]}]},"basePath":"","title":"AI-assisted development - Attio Docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}