Before you start
This guide takes you from nothing to your own Workday Extend app, built and deployed with Claude's help. Plan on an afternoon: about 2–3 hours of work, plus up to an hour waiting for Workday's email. It was written after doing every step for real (October 2026); the Watch out notes are mistakes that cost us time.
What you'll end up with
- A personal developer account on Workday's Developer Site (developer.workday.com).
- A personal development tenant: your own private, free copy of Workday, full of fake demo employees, safe to experiment in.
- Claude Code on your computer, able to build, check, upload and deploy Extend apps for you, and to ask Workday's own Developer Agent for help.
- Your first Extend app (a custom app that runs inside Workday), open in your tenant.
- Optionally, Claude reading your tenant's demo data (people, teams, time off) directly.
What you need
- A Mac you can install software on. Windows and Linux work too, but the commands here are for a Mac.
- A web browser (Chrome works well).
- A personal email address (for example Gmail or iCloud) for the Workday account. Don't use your work email.
- A Claude subscription that includes Claude Code.
- Optional: a GitHub account, to keep your app's history online.
The steps at a glance
- Get a personal developer account (15 min).
- Request your tenant and sign in to it (15 min, plus waiting for the email).
- Install Claude Code, wdcli, VS Code and the Developer Agent (30–45 min). You can do this while you wait for step 2's email.
- Sign wdcli in (10 min).
- Connect Claude Code to Workday (10 min).
- Build your first app with Claude (30–60 min).
- Check, upload and deploy it (10 min).
- Switch on security in the tenant and open your app (10 min).
After that: how Claude can also read your tenant's data, how to give Claude a memory of your project (CLAUDE.md), how to make changes later, and a troubleshooting table.
Words you'll see
- Tenant: one Workday system. Yours has a short name called the tenant alias, for example
abcdefgh_extdev. This guide writes<your-alias>wherever you put yours. - Demo user: the fake employee you sign in to your tenant as. On personal tenants it's usually
lmcneil(Logan McNeil, a Chief HR Officer with a team). - Extend app: an app you build that lives inside Workday, with its own pages and, if you want, its own data.
- wdcli: Workday's command-line tool. It creates, checks, uploads and deploys your app, and it's also how Claude Code talks to Workday.
- Developer Agent: Workday's own AI coding assistant for Extend, which runs inside VS Code. Claude can send it questions.
- MCP server: a plug-in that gives Claude Code extra tools. You'll add one for Workday.
- Terminal: the app where you type commands (on a Mac: Applications → Utilities → Terminal). In the Claude desktop app you can also just ask Claude to run a command for you.
How to use this guide: do the steps in order, and don't skip the Check at the end of each one. Workday changes its screens from time to time; if a button's name doesn't match exactly, look for the closest one. When you're stuck, paste the error into Claude and ask what to do.
Step 1: Get a personal developer account (15 minutes)
Your developer account is your login to Workday's Developer Site, where you request a tenant and download Workday's tools.
- Go to https://developer.workday.com in your browser.
- Choose to sign up for a personal developer account (Workday also calls this the Open Developer Platform). Don't pick an enterprise option: that's for companies that already run Workday.
- Fill in your name and your personal email address, not your work email. Accept the terms.
- Open the confirmation email Workday sends you and confirm your address. Check your spam folder if it doesn't arrive.
- Sign in to developer.workday.com with your new account.
Why a personal email: this account belongs to you, not your employer, and it stays yours if you change jobs.
Write down the email you used. You'll sign in with it again in Step 4.
Check: you can sign in to developer.workday.com and open the menu at the top left, which has a Console section.
Step 2: Get your personal tenant (15 minutes, plus waiting for an email)
Your tenant is your own practice Workday. You request it on the Developer Site, and Workday emails you when it's ready.
- On developer.workday.com, open the menu at the top left → Console → Tenants.
- Click + under Development Tenants to request a new tenant.
- Wait for the email saying your tenant is ready. It usually takes about 15 minutes. Check your spam folder. While you wait, you can start Step 3.
- Click the sign-in link in the email and sign in as the demo user it names, usually
lmcneil(Logan McNeil). - Set a new password straight away, and save it in your password manager.
- Click around as a normal user: your profile, your team, the org chart. This fake data is what your app will show later.
- Back on developer.workday.com, open Console → Tenants and write down your tenant alias (it looks like
abcdefgh_extdev). You'll need it in Steps 4, 7 and 8. - In the browser, note the start of your tenant's web address while you're signed in, for example
https://something.wd119.myworkday.com/<your-alias>/.... That's your tenant host, used in Step 8.
House rules for personal tenants
- Change the password within 72 hours of the email, or the account goes stale.
- The tenant is deleted after 7 days with no sign-in. Sign in at least once a week to keep it.
- You can have one active tenant at a time, and at most two created within 6 hours. Deleting a tenant can't be undone.
- Everything in it is fake demo data. Don't put real personal data in it.
Check: you can sign in to your tenant in the browser as your demo user, and you have your tenant alias and tenant host written down.
Step 3: Install the tools (30–45 minutes)
You need five things on your computer: Claude Code, Python, Workday's wdcli, VS Code, and Workday's Developer Agent extension for VS Code. You can do this step while you wait for the tenant email.
Claude Code. Install the Claude desktop app from https://claude.ai/download, sign in, and open the Code tab. That's where you'll talk to Claude about your app. (Claude Code also runs in Terminal as
claude, and inside VS Code.)Python 3 and git (used for signing in to Workday's data, and for version history). Open Terminal and run:
python3 --version git --versionIf either says it isn't installed, run
xcode-select --installand follow the prompts, then try again.wdcli (Workday's command-line tool).
Sign in to developer.workday.com, go to https://developer.workday.com/downloads, download WDCLI for macOS, and run the installer.
If macOS blocks it ("cannot be opened"), go to System Settings → Privacy & Security, scroll down, and click Open Anyway.
Close Terminal, open it again, and check:
wdcli versionYou should see a version number (we used 1.9.43).
If you see
command not found, wdcli'sbinfolder isn't on your PATH. Ask Claude to find where wdcli was installed and add it to~/.zshrcfor you, or add the lineexport PATH="/path/to/wdcli/bin:$PATH"yourself.Tell wdcli you have a personal account, so you never forget the flag in Step 4:
echo 'export WDCLI_ENVIRONMENT=personal' >> ~/.zshrc
VS Code. Download it from https://code.visualstudio.com, drag it into Applications, and open it. Then press Cmd-Shift-P, type Shell Command: Install 'code' command in PATH, and press Return. This lets you open folders in VS Code from Terminal with
code ..Workday Developer Agent extension. Go to https://developer.workday.com/developer-agent, choose VS Code, and follow the steps there. If you're given a
.vsixfile, press Cmd-Shift-P in VS Code, choose Extensions: Install from VSIX…, and pick the file. You'll sign in to it after Step 4, because it shares wdcli's login.A folder for your work. Make a folder for your apps, for example
workday-appsin your home folder. In the Claude desktop app, start a new Code session and choose that folder. Pick a local session (on your computer), not a cloud one: only a local session can use wdcli and VS Code.
Check: python3 --version, git --version and wdcli version all print a version, and VS Code shows a Workday Developer Agent icon in its side bar.
Step 4: Sign wdcli in (10 minutes)
wdcli needs two separate sign-ins: one to your developer account (to create and upload apps), and one to your tenant (to deploy them). You type these yourself, because they open a browser page where you enter your password.
Sign in to your developer account:
wdcli auth login -e personalA browser page opens. Sign in with the personal email from Step 1.
Watch out: a plain
wdcli auth login(without-e personal) signs you in to Workday's enterprise environment. Everything after it then fails or shows nothing.Check it worked:
wdcli whoami wdcli tenant listwhoamishows your name and account, andtenant listshows your tenant alias.Sign in to your tenant, using your tenant alias:
wdcli tenant login <your-alias>A browser page opens. Sign in as your demo user (for example
lmcneil).Watch out: leave Terminal alone until it says
Success: token saved. If you close the browser tab or press Enter too early, nothing is saved, and the next deploy says "Authentication required" even though you thought you'd signed in.Sign in to the Developer Agent. In VS Code, open the Workday Developer Agent panel and sign in. It uses the same login as wdcli.
The tenant sign-in expires after a while. Whenever a deploy says "Authentication required", run step 3 again and wait for Success: token saved.
Check: wdcli tenant list shows your alias, Terminal said Success: token saved after the tenant login, and the Developer Agent panel in VS Code shows you as signed in.
Step 5: Connect Claude Code to Workday (10 minutes)
wdcli has a built-in connection for AI assistants, called an MCP server. Adding it to Claude Code lets Claude hand questions and tasks to Workday's Developer Agent.
Add the server. Run this in Terminal (or ask Claude in your Code session to run it):
claude mcp add --scope user workday -- wdcli mcpWatch out: keep
--scope user. Without it, the server only works in the folder where you ran the command, and Claude in any other folder won't see it.Start a new Claude Code session in your apps folder, so it picks up the new server.
Open the same folder in VS Code (File → Open Folder, or
code .in Terminal from that folder), and make sure the Developer Agent panel is signed in. Claude's Workday tool only works while VS Code is open on the folder Claude is working in.Test it. Ask Claude: "Can you connect to the Workday MCP?" It should say it has a tool that sends tasks to the Workday Developer Agent. You can also run
claude mcp listin Terminal and look forworkday: wdcli mcp - ✔ Connected.
Where Claude Code can do this
| Where you run Claude Code | Works? |
|---|---|
| Claude desktop app, local session on your apps folder | Yes, with VS Code open on the same folder |
claude in Terminal or in VS Code's terminal |
Yes |
| A cloud session, or a claude.ai chat | No: it can't reach wdcli or VS Code on your computer |
How the pieces fit: Claude Code writes and checks your app's files and runs wdcli. When it needs Workday-specific knowledge, such as the exact syntax for a page formula or a field name in your tenant, it asks the Developer Agent, which has Workday's documentation. Anything the Developer Agent wants to change shows up in VS Code for you to approve.
Good to know: if Claude tries to read Workday's documentation directly, it gets "MCP features are only available to the Workday Developer Agent". That's expected: Workday keeps its docs for the Developer Agent, so Claude asks the agent instead.
What it isn't: this connection is only for building Extend apps (connection A). It doesn't let Claude read your tenant's data. For that, see The three ways Claude connects to Workday below (connections B and C).
Check: Claude confirms it can see the Workday Developer Agent tool.
Step 6: Build your first app with Claude (30–60 minutes)
Start small: one page that shows your team. You describe it in plain English, and Claude builds it.
Make sure VS Code is open on your apps folder and the Developer Agent is signed in (Step 5).
Ask Claude for the app. In your Code session, type something like this, with your own app name:
"Create a new Workday Extend app called Team Explorer with
wdcli app create. It should have one page that shows me, my manager and my direct reports, using the Workday common API. Add a security domain called TeamExplorerAccess and a task so it shows up in Workday search. Use the Workday Developer Agent to check any PMD syntax or field names you're unsure of, then validate it. Set the folder up as a git repository and commit as you go."Claude creates the app. It runs a command like this:
wdcli app create "Team Explorer" --app-type EXTEND --ciThis registers the app with Workday and downloads a folder for it. The folder's name ends with a short code for your account, for example
teamExplorer_abc123. That full name is your app ID, used in Steps 7 and 8.Claude fills in the app's files. You don't need to edit them, but it helps to know what they are:
File What it does appManifest.jsonThe app's ID and name. wdcli writes this; leave it alone. presentation/*.pmdOne file per page: what's on it and where its data comes from. presentation/*.amdThe list of pages, and the Workday APIs the app uses. presentation/*.smdSite settings, such as signing in through Workday. model/*.securitydomainWho's allowed in. You switch this on in Step 8. model/*.taskMakes the app findable from Workday search. model/*.businessobjectOnly if your app stores its own data, like a feedback form. Approve the Developer Agent when asked. When Claude asks the Developer Agent something, VS Code may ask you to approve. Approve it there, and Claude carries on. If Claude seems stuck, look at the Developer Agent panel.
Ask questions as you go. For example: "Explain what this page shows and where the data comes from."
Tips for a first app
- Read Workday's data rather than storing your own. Apps with their own data (business objects) need more security setup, and "View and Modify" access in Step 8.
- Keep it to one page. Add pages once the first one works in your tenant.
- Let the Developer Agent check field names. Field names on Workday objects can differ between tenants. Guessed names are the most common cause of a page that shows nothing.
Things that tripped us up (worth telling Claude if it hits them):
- Selection widgets return lists of IDs, so the selected value is
self.value[0], notself.value. - A picker (
instanceList) needs exactly one ofinstanceListorvalues. A search-only picker shows blank until you type; for short lists, load everyone intovalues. - Inside a horizontal
section, each child must itself be a container. Wrap each one in asection. - Business object field labels allow only letters, digits, spaces,
:and-. No brackets.
Check: Claude says the app was created and validation found no issues.
Step 7: Check, upload and deploy (10 minutes)
Three commands take your app from your computer into your tenant. Ask Claude "Validate, upload and deploy the app to my tenant" and it runs them, or run them yourself from the folder that contains your app's folder. Replace <app-id> with your app's folder name (for example teamExplorer_abc123) and <your-alias> with your tenant alias.
Validate checks the files for mistakes. It takes seconds, so run it before every upload:
wdcli app validate -d <app-id>You want:
No validation issues found.If it lists problems, paste them into Claude.Upload sends the app to Workday and builds it:
wdcli app upload <app-id> --ciYou want:
Successfully uploadedandBuild completed, then a table with a Version ID and Build ID.Deploy installs the latest build into your tenant:
wdcli app deploy --app-id <app-id> --latest-version --tenant-alias <your-alias> --ciYou want: a table with Success set to
true.
If deploy says "Authentication required": your tenant sign-in has expired, or never finished saving. Run wdcli tenant login <your-alias> again (Step 4), wait for Success: token saved, then run the deploy again. If it still fails straight after a successful login, wait a few seconds and retry once.
Watch out: validation only checks that the files are well formed. It can't tell whether the page shows the right thing, or whether a formula works when the page runs. You still open the app and look, in Step 8.
Check: the deploy table shows Success: true.
Step 8: Switch on security and open your app (10 minutes)
A freshly deployed app is locked: nobody can use it until you tell Workday who's allowed in. You do this yourself in the tenant, once per new app. Claude doesn't change security settings in a live system.
Sign in to your tenant in the browser as your demo user.
In the Workday search bar, type Workday Extend App Manager and open it.
Find your app (for example Team Explorer) and choose Configure.
Under Model Components, find your app's security domain (named like Team Explorer: Access) and click Create to make its security policy:
- Who: for a practice tenant, All Users is fine.
- What they can do: View for an app that only shows data. If people save things in the app, also tick Modify, or saving fails.
Activate the change. Search for the task Activate Pending Security Policy Changes, run it, type a short comment such as "Team Explorer access", tick Confirm, and click OK.
Watch out: this is the step people forget. Until you activate, nothing you set in step 4 above takes effect, and the app says you don't have access.
Open your app. Use any of these:
- Its web address:
https://<tenant-host>/<your-alias>/d/wday/app/<app-id>/<app-id>.htmld. The tenant host is the start of the address you noted in Step 2. Bookmark it. - Workday search: type the app's name, if Claude gave it a task (Step 6).
- The Apps menu: run the task Configure Global Navigation Menu and add your app's task, so it appears in Workday's menu.
- Its web address:
Check what it shows. Compare the page with what you see elsewhere in Workday, for example your team on your profile. If something's wrong, describe it to Claude (a screenshot helps) and ask it to fix it, then repeat Step 7.
Watch out: Extend cards for the Home page didn't show up in Home Page Configuration on a personal tenant (it probably needs a paid Extend subscription). Use the app's address or the Apps menu instead.
You only redo this step for a new app, or when an app gets a new security domain. Ordinary changes to an existing app just need Step 7.
Done: your app opens inside Workday and shows your team.
The three ways Claude connects to Workday
Claude can connect to Workday in three separate ways. Each has its own sign-in and does a different job. Steps 1–8 only need the first one, which you've already set up. The other two are optional, for when you want Claude to read or change your tenant's data (people, teams, time off).
| A. Build apps | B. Data through REST | C. Data through Workday's MCP server | |
|---|---|---|---|
| What it's for | Building, checking and deploying Extend apps | Reading (and, if you ask, changing) tenant data: workers, teams, orgs, time off, WQL reports | The same kind of data, through ready-made Workday tools such as getWorkers |
| Example request | "Round the averages on the results page and deploy" | "Who reports to me, and what are their titles?" | "Who reports to Logan McNeil and how much time off do they have?" |
| How Claude uses it | The workday MCP server (wdcli mcp), which passes tasks to the Developer Agent in VS Code |
Claude runs a script (we use wd.py) that calls Workday's REST API |
A second MCP server in Claude Code that lists Workday's tools directly |
| What you set up in the tenant | Nothing | An API client (task: Register API Client) | A registered agent (Agent Management Hub → Agent Registry) |
| Secret needed? | No | No, it uses a sign-in with no secret (PKCE) | Yes, a Client ID and Client Secret, shown only once |
| How you sign in | wdcli auth login -e personal and wdcli tenant login <alias> |
A sign-in link; you paste back the address you land on | Same as B, but for the agent's client |
| How long a login lasts | Until wdcli asks again | About an hour | About an hour; then you reconnect |
| Tested in this guide? | Yes, end to end | Yes: read our worker record and team | Tried, but not working on a personal tenant yet (see below) |
Which should you use?
- Building an Extend app: A only. Your app reads Workday data by itself when it runs, so Claude doesn't need B or C for that.
- Asking Claude questions about your tenant's data: B. It's quicker to set up, needs no secret, and is the one we've confirmed works on a personal tenant.
- Wanting Workday's own data tools inside Claude: C, once you've done B and want more, and once there's a way to register an agent on your tenant (see below). Keep the two MCP servers under different names (
workdayfor A,workday-datafor C) so they don't clash.
The word "MCP" shows up in both A and C, but they're different servers. A runs on your computer and only knows about building apps. C is Workday's hosted server and only knows about your data.
How to set up A: build apps
This is Steps 3–5 above: install wdcli, sign it in, then add it to Claude Code with claude mcp add --scope user workday -- wdcli mcp. Nothing to do in the tenant.
How to set up B: data through REST (about 20 minutes)
Register an API client inside your tenant. Workday's docs say to create it on the Developer Site under Console → API Clients, but personal accounts don't have that menu, so you do it in the tenant. Sign in as your demo user (for example
lmcneil), search for the task Register API Client, and fill it in exactly like this:Field Value Client Name claude-code(any name works)Client Grant Type Authorization Code Grant Access Token Type Bearer Redirection URI https://example.com/callbackSupport Proof Key for Code Exchange (PKCE) Ticked. This is why no client secret is ever needed. Scope (Functional Areas) Staffing, Time Off and Leave, Organizations and Roles, System, Agent System of Record Include Workday Owned Scope Ticked Click OK. Workday may still show a client secret. You won't need it, but don't put it in any file or chat.
Copy the client's details. Run the report View API Clients and open your client. Copy four values: Client ID, Authorization Endpoint, Token Endpoint and Workday REST API Endpoint. None of these are secret.
Give them to Claude. Paste the four values into chat and ask: "Save these and set up a REST sign-in to my tenant with this API client." If you don't already have a sign-in script, Claude writes one for you. Ours is called
wd.py, and it keeps these non-secret settings in a file calledtenant.env.Sign in. Claude gives you a sign-in link. Open it, sign in as your demo user, and approve. The browser lands on
https://example.com/callback?code=..., and that page may not load. Copy the whole address from the address bar and paste it to Claude. The code in it works once, expires in minutes, and is useless without a key saved on your computer, so it's safe to paste.Ask a question. For example: "Who am I, and who reports to me?" Our first answer was Logan McNeil, Chief Human Resources Officer, with two direct reports.
Check: Claude shows your own worker record. When answers start failing with "401" (after about an hour), repeat step 4.
If an answer comes back empty or with "403", the API client is missing the scope for that kind of data. Add it in the tenant (step 1), then sign in again.
How to set up C: data through Workday's MCP server (about 45 minutes)
We haven't got this route working on a personal tenant yet. Use B for data. Below is what C needs, what we tried, and the steps to follow if you do get an agent.
What C needs: an agent registered in Workday's Agent System of Record, then switched on in the tenant's Agent Management Hub. Switching it on shows a Client ID and Client Secret once. An agent is a different thing from the API client in B, although B's client has the Agent System of Record scope.
What we tried (October 2026), so you don't have to:
| Attempt | Result |
|---|---|
| Register through a Developer Site API client (Console → API Clients), as Workday's docs describe | Not possible: personal accounts don't get that menu with agent scopes |
wdcli tenant register-default-agent <alias> |
Failed with "Failed to provision reference agent for tenant", and no reason given |
| Register using B's in-tenant API client sign-in, which has the Agent System of Record scope | The agent registry (odp.agent.workday.com) rejected the sign-in (401) |
Still to check: whether the tenant has its own screen for creating an agent. Search the tenant for agent and look at Agent Management Hub and View Agent Platforms.
If you do get an agent:
- Switch it on. In Agent Management Hub → Agent Registry → your agent, turn its skills on, choose Available To (a security group your demo user is in), and set the redirect URI to
https://example.com/callback. - Save the secret straight away. Copy the Client ID, Client Secret and endpoint URLs into a password manager. Workday shows the secret once; if you lose it, you have to generate a new one.
- Put them in
workday.envyourself, never intenant.envand never pasted into chat.workday.envstays on your computer and out of git. GitHub secrets don't help here: GitHub never lets anyone read a secret back. - Sign in and connect. Ask Claude to sign in the agent (the same paste-the-address sign-in as B), list its tools, and add Workday's server to Claude Code as
workday-data, so it doesn't replace theworkdayserver from A. - Ask a question that uses the tools, for example "Use the Workday data tools to list my team."
Check: Claude lists Workday's tools (such as getWorkers) and answers from them. The login expires after about an hour, and then the server has to be reconnected.
Give Claude a memory: CLAUDE.md (10 minutes, do this once)
Claude starts every new session knowing nothing about your project. A file called CLAUDE.md in your apps folder fixes that: Claude Code reads it automatically at the start of every session, so it knows your tenant, your commands and your rules without you repeating them.
- Create it. Ask Claude: "Create a CLAUDE.md in this folder using the template from my setup guide, and fill in my tenant alias, demo user and app IDs." Or copy the template below into a file called
CLAUDE.mdyourself. - Keep it current. At the end of each working session, ask: "Update CLAUDE.md with where we left off and anything we learned." This is the single most useful habit for picking up where you left off.
- Commit it with your app, so it's backed up and travels with the code.
Template (replace everything in angle brackets):
# <Your project name>
Workday Extend apps for my personal development tenant, built with Claude Code and wdcli.
## Start of every session
1. `git pull` if I also work on another computer or in the cloud.
2. For deploys: `wdcli tenant login <your-alias>` (I sign in; wait for "Success: token saved").
3. VS Code must be open on this folder for the Workday Developer Agent hand-off.
## Tenant
- Alias: `<your-alias>`. Sign in as `<demo user, e.g. lmcneil>`.
- Tenant host: `https://<tenant-host>`.
- The tenant is deleted after 7 days without a sign-in.
- Never put passwords, client secrets or tokens in any file in this folder, or in chat.
## Apps
- `<app-id>`: <one line on what it does>.
- App address: `https://<tenant-host>/<your-alias>/d/wday/app/<app-id>/<app-id>.htmld`
## Build and deploy
wdcli auth login -e personal # personal accounts need -e personal
wdcli app validate -d <app-id>
wdcli app upload <app-id> --ci
wdcli app deploy --app-id <app-id> --latest-version --tenant-alias <your-alias> --ci
After deploying a NEW security domain, I create the policy in Workday Extend App Manager
and run Activate Pending Security Policy Changes. Claude doesn't change tenant security.
## How to work with me
- Check PMD syntax and Workday field names with the Workday Developer Agent; don't guess.
- Run validate before every upload.
- Commit after each working change. Ask before pushing to GitHub.
- After a deploy, remind me what to check in the tenant.
## Things learned the hard way
- Selection widgets return lists of IDs: use `self.value[0]`.
- <add new lessons here as you hit them>
## Where we left off (<date>)
- <what's done, what's deployed, what's not checked yet>
## Open items
- <next things to build or fix>
More tips that help you (and Claude) catch up
- Keep a
.gitignoreso secrets and sign-in tokens never get committed. Ask Claude: "Add a .gitignore for workday.env, sign-in token folders, .DS_Store and node_modules." - Put lessons in CLAUDE.md, not just in chat. When something takes more than one try (a field name, a security step, a sign-in quirk), ask Claude to add it under Things learned the hard way. Chat history doesn't carry over to new sessions; CLAUDE.md does.
- Write open items down. A short Open items list means you can start any session with "Pick up the next open item."
- Working in more than one place? Push your commits to GitHub at the end of a session and
git pullat the start of the next, or one place falls behind (we lost an hour to exactly this). - A setup checker saves time. Ask Claude to write
scripts/check-setup.sh: a read-only script that checks Python, git, wdcli, its sign-ins, theworkdayMCP server and the VS Code extension, and prints how to fix anything missing. Run it at the start of a session. - Starting a fresh session on an old project? Say: "Read CLAUDE.md and the last few commits, then tell me where we left off."
Making changes later
After the first time, a change is one request to Claude. For example: "On the results page, round the averages to one decimal. Check the syntax with the Developer Agent, then validate, upload, deploy and commit." Claude edits the files, runs Step 7, and saves the change in git. Then you open the app and check it looks right.
Each time you sit down to work
- Open VS Code on your apps folder, and start a local Claude Code session in the same folder.
- If you haven't deployed for a while, run
wdcli tenant login <your-alias>first and wait forSuccess: token saved. - Describe the change. Ask Claude to check anything Workday-specific with the Developer Agent.
- When Claude has deployed, open the app and check the change in the tenant.
- Optional: ask Claude to push the commits to GitHub, so your work is backed up.
Keep your tenant alive: sign in to it at least once a week, or it's deleted after 7 days without a sign-in.
Good habits: one change per request; ask Claude to explain anything you don't follow; and never paste passwords, client secrets or tokens into chat.
When something goes wrong
| What you see | What it means | What to do |
|---|---|---|
| Deploy says "Authentication required" | Your tenant sign-in expired, or never finished | Run wdcli tenant login <alias>, finish the browser sign-in, and wait for Success: token saved |
wdcli auth login fails or shows the wrong sign-in page |
wdcli tried the enterprise login | Use wdcli auth login -e personal |
| "command not found: wdcli" | The installer didn't finish, or Terminal needs reopening | Close and reopen Terminal; if it still fails, reinstall from developer.workday.com Downloads |
| Claude says it can't reach the Developer Agent | VS Code isn't open on the app's folder, or the extension isn't signed in | Open the folder in VS Code and sign in to the Developer Agent panel |
| Claude's Workday request seems stuck | The Developer Agent is waiting for your approval | Look at the Developer Agent panel in VS Code and approve |
| The app says you don't have access | Security isn't switched on yet | Redo Step 8, including Activate Pending Security Policy Changes |
| Saving in the app fails | The security policy only allows View | In App Manager, change the policy to View and Modify, then activate again |
| Your tenant is gone | No sign-in for 7 days | Request a new tenant on the Developer Site, then redo Steps 4, 7 and 8 |
| Validation passes but the page shows the wrong thing | Validation only checks the files are well formed | Describe what you see to Claude, and include a screenshot if you can |
| No Console → API Clients menu on the Developer Site | Personal accounts don't get it | Register the API client inside your tenant instead (task: Register API Client), as in connection B |
| "MCP features are only available to the Workday Developer Agent" | Expected: Workday keeps its docs and generator tools for the Developer Agent in VS Code | Nothing to fix. Claude passes those questions to the Developer Agent instead |
| Claude Code doesn't see the workday server in another folder | It was added without --scope user, so it only exists for one folder |
Run claude mcp add --scope user workday -- wdcli mcp, then start a new session |
| The tenant email never arrived | It's in spam, or the tenant is still being created | Check spam; check its status in Console → Tenants on developer.workday.com; request it again if it failed |
| macOS says wdcli "cannot be opened" | macOS blocks software downloaded outside the App Store | System Settings → Privacy & Security → Open Anyway |
| Data questions fail with "401" | The REST sign-in expired (about an hour) | Sign in again: connection B, step 4 |
| Data questions come back empty or with "403" | The API client is missing the scope for that kind of data | Add the scope to the API client in the tenant, then sign in again |
| A picker in your app shows nothing until you type | It's a search-only picker | Ask Claude to load the options into the picker's values list |
| Your app isn't in Workday search | It has no task, or security isn't activated yet | Ask Claude to add a task (Step 6), then redo Step 8 including the activation |