Skip to main content
RapidDev - Software Development Agency
build-ai-agent

How to Build an AI Agent with ChatGPT

A custom GPT is the no-code way to build an AI agent inside ChatGPT: Instructions define its job, Knowledge gives it reference files, and an Action calls a real API through a pasted OpenAPI schema, no code. This guide builds a resume-screening GPT that checks a candidate ATS status through an Action and recommends a next step, but never updates the ATS; a recruiter does that by hand. Budget 20-30 minutes on ChatGPT Plus or higher.

What you'll learn

  • Build a custom GPT's Instructions, Knowledge, and Capabilities from the Configure tab, no code required
  • Give a GPT a real tool call by pasting an OpenAPI schema into an Action instead of writing a backend yourself
  • Keep an API key out of the conversation entirely by setting Action authentication once in the builder
  • Write instructions that stop a GPT from claiming to have done something its Action can't actually do
Book a free consultation
4.9Clutch rating ⭐
1,000+Happy partners
20+Countries served
200+Team members
Beginner10 min read20-30 minChatGPT Plus, Pro, Business, Enterprise, or Edu (Custom GPTs require a paid plan), browser onlyLast updated November 2026RapidDev Engineering Team
TL;DR

A custom GPT is the no-code way to build an AI agent inside ChatGPT: Instructions define its job, Knowledge gives it reference files, and an Action calls a real API through a pasted OpenAPI schema, no code. This guide builds a resume-screening GPT that checks a candidate ATS status through an Action and recommends a next step, but never updates the ATS; a recruiter does that by hand. Budget 20-30 minutes on ChatGPT Plus or higher.

Quick facts about this guide
FactValue
ToolChatGPT
DifficultyBeginner
Time required20-30 min
CompatibilityChatGPT Plus, Pro, Business, Enterprise, or Edu (Custom GPTs require a paid plan), browser only
Last updatedNovember 2026

What you'll build

You'll build a resume-screening GPT for a small hiring team. A recruiter pastes a resume into the chat, and the GPT scores it against a rubric stored in its Knowledge, then calls an Action to check whether that candidate already has a status in the company's applicant tracker. It returns a recommendation, move to interview, hold, or pass, but it never writes that decision back anywhere. The Action it calls is read-only on purpose, so the worst a mistake can do is give a wrong recommendation, not change a real record.

A custom GPT is built entirely from the chatgpt.com/create screen: a Create tab where you describe it in plain language, and a Configure tab where you set its Instructions (its system prompt), Knowledge (files it can reference), Capabilities (web browsing, canvas, image generation, code interpreter, each a toggle), and Actions, where pasting an OpenAPI schema turns a real HTTP endpoint into something the GPT can call mid-conversation. OpenAI's own Agent Builder canvas, the drag-and-drop tool some older guides mention, is being retired on November 30, 2026; a custom GPT is the long-term no-code path for this kind of single-purpose assistant, and ChatGPT Workspace Agents (Business, Enterprise, and Edu accounts) is the natural-language path when you need the agent shared across a team with its own connectors.

Choose a custom GPT when the job is one clear task with a small number of tools and you want anyone on your team to use it from inside ChatGPT with no setup on their end. If you need the agent to run unattended on a schedule or react to a webhook, Workspace Agents or a code-first SDK is the better fit.

Prerequisites

  • ChatGPT Plus, Pro, Business, Enterprise, or Edu (Custom GPTs aren't available on the Free tier)
  • Your hiring rubric or screening criteria as a text or PDF file
  • A read-only API endpoint for checking candidate status in your applicant tracker (or a mock endpoint for testing)
  • No coding experience required beyond pasting a schema OpenAI's docs or your ATS vendor already provides

Step-by-step guide

1

Start the GPT and describe its job

Go to chatgpt.com/create (or Explore GPTs > Create in the sidebar) and use the Create tab to describe what you're building in plain language: a resume screener that checks a rubric and looks up ATS status. The builder drafts a first version of the name, description, and instructions from that description; you'll refine all of it in the Configure tab next rather than accepting the draft as final.

typescript
1Create tab prompt:
2"Build a GPT that screens resumes against our hiring rubric, checks whether the candidate already has a status in our applicant tracker, and recommends move to interview, hold, or pass. It should never claim to update the tracker itself."

Expected result: A draft GPT with a name, description, and starter instructions, ready to edit in the Configure tab.

2

Write the real instructions in the Configure tab

Switch to the Configure tab and replace the drafted instructions with explicit rules, especially the one that matters most: it recommends, it doesn't execute. State the exact three outcomes it can return so it doesn't invent a fourth, and tell it to call the status-check Action before giving any recommendation, not after.

typescript
1Instructions:
2"You are a resume-screening assistant for our hiring team. For every resume, score it against the rubric in your Knowledge, then call get_candidate_status to check their current ATS stage before recommending one of exactly three outcomes: move to interview, hold, or pass. State your reasoning in 3-5 bullets. You never update the applicant tracker yourself; a recruiter does that by hand after reading your recommendation."

Expected result: The Configure tab shows your instructions saved, replacing the auto-generated draft.

3

Upload the rubric as Knowledge

In the Configure tab's Knowledge section, upload the file with your scoring criteria. This is what the GPT reads before scoring, instead of relying on whatever general hiring advice it already knows. Keep it to the one document that matters; a Knowledge section stuffed with unrelated company files just gives the model more to sift through on every run.

typescript
1Configure -> Knowledge -> Upload files
2hiring-rubric.pdf

Expected result: hiring-rubric.pdf appears under Knowledge, and a test question about a specific rubric criterion gets answered correctly from it.

4

Turn off capabilities you don't need

In Capabilities, leave Web Browsing off since this GPT has no reason to search the open internet about a candidate, and leave Code Interpreter and Image Generation off too. Fewer enabled capabilities means less for the model to consider before deciding what to do next, and one less way a resume-screening tool could end up doing something unrelated to its job.

typescript
1Capabilities:
2Web Browsing: off
3Canvas: off
4Image Generation: off
5Code Interpreter: off

Expected result: All four Capabilities toggles are off, leaving only Knowledge and the Action you're about to add.

5

Add the status-check Action

In the Actions section, select Create new action and paste an OpenAPI schema describing your read-only candidate-status endpoint. Set Authentication to API Key and enter your ATS's key here, not in the instructions or Knowledge; OpenAI stores it with the Action and the GPT never shows it to whoever is chatting with it. Use the Test button in this panel before moving on.

typescript
1Actions -> Create new action -> paste schema (see complete_code)
2Authentication: API Key
3Auth Type: Bearer
4Key: [your ATS read-only API key]

Expected result: The Test panel for get_candidate_status returns a real status for a known candidate ID, and the key field shows as saved, not visible in plain text again.

6

Test the full flow before publishing

Paste a real (or test) resume into the preview panel on the right and watch it score against the rubric, call get_candidate_status, and return one of the three allowed recommendations. Try a resume for a candidate who doesn't exist in the tracker yet, and confirm it handles a missing-candidate response from the Action without inventing a status.

typescript
1Test prompt (preview panel):
2[paste a resume]
3"Screen this candidate."

Expected result: A scored recommendation citing specific rubric criteria, with a visible Action call to get_candidate_status in the response trace.

7

Publish it scoped to your team, not the GPT Store

Click Share in the top right, and choose Only me while you're still testing, then Only people with a link or your Business workspace once it's ready, since this GPT is wired to an internal ATS key and has no reason to be public or listed in the GPT Store. If you're on a Business or Enterprise workspace, an admin can publish it as workspace-only from the same panel.

typescript
1Share -> Who can access
2Only me (testing) -> Only people in my workspace (production)

Expected result: The GPT is reachable by your team through its shared link and does not appear in public GPT Store search results.

Complete working example

candidate-status-action.json
1{
2 "openapi": "3.1.0",
3 "info": {
4 "title": "Candidate Status API",
5 "version": "1.0.0",
6 "description": "Read-only lookup of a candidate's current stage in the applicant tracker."
7 },
8 "servers": [
9 {
10 "url": "https://ats.example-company.com/api"
11 }
12 ],
13 "paths": {
14 "/candidates/{candidate_id}/status": {
15 "get": {
16 "operationId": "get_candidate_status",
17 "summary": "Get a candidate's current ATS stage by ID or email",
18 "parameters": [
19 {
20 "name": "candidate_id",
21 "in": "path",
22 "required": true,
23 "schema": {
24 "type": "string"
25 },
26 "description": "Candidate ID or email address as it appears in the tracker"
27 }
28 ],
29 "responses": {
30 "200": {
31 "description": "Candidate found",
32 "content": {
33 "application/json": {
34 "schema": {
35 "type": "object",
36 "properties": {
37 "candidate_id": {
38 "type": "string"
39 },
40 "stage": {
41 "type": "string",
42 "enum": [
43 "new",
44 "screening",
45 "interview",
46 "offer",
47 "rejected"
48 ]
49 },
50 "last_updated": {
51 "type": "string",
52 "format": "date-time"
53 }
54 }
55 }
56 }
57 }
58 },
59 "404": {
60 "description": "No existing record for this candidate",
61 "content": {
62 "application/json": {
63 "schema": {
64 "type": "object",
65 "properties": {
66 "error": {
67 "type": "string"
68 }
69 }
70 }
71 }
72 }
73 }
74 }
75 }
76 }
77 }
78}

Common mistakes

Why it's a problem: Putting the ATS API key in the Instructions field 'so the GPT remembers it'

How to avoid: Keys belong in the Action's own Authentication settings, never in Instructions or Knowledge, where they could end up quoted back in a chat response.

Why it's a problem: Letting the instructions say the GPT can 'update the candidate's status if asked'

How to avoid: If the Action only exposes a GET endpoint, the GPT can't actually do that; leaving the door open in the instructions just invites it to claim success on a call that doesn't exist.

Why it's a problem: Publishing to Everyone or the GPT Store out of habit

How to avoid: A GPT wired to an internal API key has no reason to be public. Use Only me or your workspace, and treat the GPT Store option as reserved for GPTs with no credentials attached.

Why it's a problem: Testing only with a candidate who exists in the ATS

How to avoid: Always test the 404 case too. A GPT that hasn't seen a missing-candidate response will sometimes guess a plausible-sounding status instead of saying it couldn't find one.

Why it's a problem: Leaving unrelated capabilities like Web Browsing or Code Interpreter turned on by default

How to avoid: Turn off anything the task doesn't need. It narrows what the model might reach for when a prompt is ambiguous.

Best practices

  • Keep Actions read-only wherever the consequence of a wrong call matters; let a human make the write happen in the real system.
  • Scope the Action's API key to the narrowest permission your ATS or backend allows, ideally a dedicated read-only key.
  • State the exact set of allowed outputs (here, exactly three recommendation types) instead of letting the model phrase its own open-ended conclusion.
  • Upload only the reference file the task actually needs to Knowledge; a cluttered Knowledge base dilutes what the model retrieves.
  • Test the Action's failure and empty-result cases explicitly, not just its happy path, before publishing.
  • Default new GPTs to Only me, then your workspace, and reserve public GPT Store listing for tools with no internal credentials wired in.

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I have a custom GPT with instructions to screen resumes against a rubric and a get_candidate_status Action (OpenAPI schema below) that only reads ATS data. Help me design a second, separate Action for scheduling an interview slot, and instructions for when the GPT should suggest using it versus just recommending next steps. [paste complete_code]

Build AI Agents Prompt

In the GPT Configure tab, open Instructions and ask the builder chat: 'Add a rule that if get_candidate_status returns a 404, the GPT should say the candidate isn't in the tracker yet instead of guessing a stage.'

Frequently asked questions

Is Agent Builder the right way to build an AI agent in ChatGPT in 2026?

No. Agent Builder (the AgentKit canvas) is being retired on November 30, 2026. Custom GPTs, covered in this guide, remain the no-code path; the OpenAI Agents SDK is the code-first replacement for what Agent Builder used to do.

Do I need to know how to code to add an Action to a custom GPT?

No, but you do need an OpenAPI schema for the endpoint you're calling, which your API provider or backend developer can usually generate. Pasting that schema into the Actions panel is the only technical step, and most ATS and SaaS vendors already publish one.

What's the difference between a custom GPT and a ChatGPT Workspace Agent?

A custom GPT is built by one person through the Configure tab and Actions, and anyone with access opens it like any other GPT. A Workspace Agent, available on Business, Enterprise, and Edu accounts, is set up through a natural-language conversation that configures its tools and connectors for you, and is meant to be shared and run persistently across a team.

Can my GPT actually update our applicant tracker instead of just recommending a next step?

Only if you add a second Action that exposes a write endpoint, and at that point you should gate it the same way the Claude Agent SDK and n8n guides do: require explicit confirmation in the conversation, or better, leave the write to a human acting on the GPT's recommendation, which is what this guide does.

Where is the API key for my Action actually stored?

OpenAI stores it with the Action's configuration, not in the conversation or the instructions text. It's never shown back to whoever is chatting with the GPT, which is why it should never also be pasted into the Instructions field as a backup.

Does a custom GPT remember past candidates between separate chats?

Not by default. Each new chat starts fresh unless the person using it is on a plan with memory enabled generally for their account; Knowledge files are available every time, but conversation history isn't carried over automatically.

Can someone build this for me instead of configuring it myself?

Yes. RapidDev builds production agents on custom GPTs, the OpenAI Agents SDK, and Claude, including the Action schemas and approval boundaries most tutorials skip. A free 30-minute consultation is the fastest way to scope your version.

RapidDev

Talk to an Expert

Our team has built 1,000+ apps. Get personalized help with your project.

Book a free consultation
Matt Graham

Written by

Matt Graham · CEO & Founder, RapidDev

1,000+ client projects delivered. Columbia University & Harvard Business School alumnus, U.S. Navy veteran. About the author →

Learning is great. Shipping is faster with help.

Our engineers have built 1,000+ apps on your platform and the tools around it. If your project needs to be live sooner than your learning curve allows — book a free consultation.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.