software-development
The primary plugin. Contains all citizen developer skills: build-fullstack-app, td-industries-style-guide, and pre-push-secret-scan.
Developer Guide — Claude Code & Plugins · Version 1.0 · 2026
This guide covers how to use Claude Code and the TD-published plugins to build, validate, and deploy your citizen application — with every TD guardrail built in from the first keystroke.
The Citizen Developer Program website explains the lifecycle, roles, and review process. This page covers the hands-on development phase — how to use the tools to build the thing.
Claude Code is your AI pair programmer. The TD plugins are the instruction sets that tell Claude exactly how TD applications must be structured, styled, secured, and deployed.
When you use the plugins, Claude follows TD’s approved patterns automatically — the right folder structure, authentication wiring, code quality checks, and security scans all happen without you having to ask.
TD Industries publishes two plugins: software-development and td-governance. Enterprise users have them automatically.
If you are on the TD Claude Enterprise subscription, the plugins are already available through the managed marketplace. No installation required. Open Claude Code and type /plugin to confirm software-development is listed.
If you need to install manually, run these two commands in any Claude Code session:
The td-governance plugin installs automatically alongside software-development.
The td-governance plugin intercepts any request to build an application before Claude writes a single file. It redirects you to the standard skill. This is not optional — it exists so every citizen app starts from the same approved baseline.
The primary plugin. Contains all citizen developer skills: build-fullstack-app, td-industries-style-guide, and pre-push-secret-scan.
A mandatory guardrail plugin pinned org-wide. Triggers automatically when you ask Claude to build an app and redirects to the standard workflow. Users cannot opt out.
A skill is a set of instructions that Claude Code loads on demand to guide it through a specific task using TD’s approved patterns.
| Skill | Plugin | How to Invoke | What It Does |
|---|---|---|---|
| build-fullstack-app | software-development | /build-fullstack-app <name> <description> |
Creates one monorepo — a single {app-name}/ folder with ui/ and api/ subfolders — with a React/Vite/MUI frontend and Express/TypeScript backend. Includes MSAL authentication, GitHub Actions CI/CD, validation tooling, git hooks, and auto-maintained release notes. The primary skill for all new applications. |
| td-industries-style-guide | software-development | /td-industries-style-guide or auto-invoked during UI work |
TD visual standards — TDI Navy and Blue palette, Inter typography, MUI component patterns, button/input/alert patterns. Auto-invoked during any UI work by build-fullstack-app; invoke manually when reviewing or applying styling. |
| pre-push-secret-scan | software-development | Automatic — runs before every commit and push | Scans every file being committed for API keys, tokens, passwords, connection strings, and private keys. Blocks the operation and lists every finding until resolved. Cannot be skipped under any circumstances. |
Everything starts with one command. The skill handles the rest.
When you ask Claude Code to build an app — in any phrasing — the td-governance plugin intercepts the request before Claude writes a single file and tells you:
The only exceptions are one-off static HTML pages with no backend, modifications to an existing TD app already in the standard structure, or cases where you explicitly state you are building outside the standard (e.g., a throwaway prototype).
Verifies Node.js 24+, npm 11+, and Git. Installs missing tools with your permission before continuing.
Confirms the app name, key data entities, and main pages. No files are created until you confirm.
my-app/ui/)React + Vite + TypeScript + MUI + Tailwind, with TD’s visual style applied. Pre-wired to talk to the API.
my-app/api/)Express 5 + TypeScript with hardcoded mock data and MSAL authentication middleware.
ESLint, TypeScript checking, and a validate script added to both the ui/ and api/ folders. Git hooks run checks automatically on every commit.
Claude runs a security review and the secret scan against the generated code. Will not proceed if either finds a blocking issue.
GitHub Actions deploy files added to the repo. Used automatically when your app deploys — no action needed from you now.
Claude verifies ~20 items and summarizes how to run the app locally.
After scaffolding, Claude will ask whether you want to install dependencies and run both apps. Say yes. Claude will start the API on port 3000 and the UI on port 5173.
Open http://localhost:5173 in your browser of choice. Authentication is automatically bypassed locally — you are signed in as “Dev User” without a Microsoft login. All your development and testing happens here before anything goes to Azure.
The plugins encode the same checks the AI App Review group performs. Building with them means your app arrives at review already meeting the bar.
The pre-push-secret-scan skill runs automatically before every git commit and git push. It cannot be skipped — even if you tell Claude to “just push it.”
When a finding is detected Claude blocks the operation, lists every finding (with the secret redacted), explains the risk, and suggests how to fix it.
.env files locally and Azure Key Vault / GitHub Secrets in production. The scaffold creates .env.example files documenting required variables without containing real values.Every app built with the scaffold is pre-wired for Microsoft Entra ID (formerly Azure AD) single sign-on using MSAL. Locally, authentication is bypassed automatically. In production, every user must authenticate through TD’s identity provider.
All API calls from the UI must use the authFetch helper in src/api.ts, which automatically attaches the user’s Entra token to every request. The API middleware validates the token on every call.
fetch() for API calls. Use authFetch. The scaffold wires this correctly — do not change the auth pattern without IT involvement.Tenant and client IDs must be read from environment variables (VITE_AAD_TENANT_ID, VITE_AAD_CLIENT_ID) — never as literal strings in source code. The security review step checks for hardcoded Entra GUIDs.
Application data must not be stored in browser localStorage or sessionStorage. The scaffold’s final checklist verifies this. MSAL’s internal authentication cache is the only permitted exception.
localStorage will be rejected at AI App Review. If your app needs persistence, contact IT to provision a database.The scaffold installs tooling that enforces code quality on every commit:
ui/ and api/ folders are fully typed. The validate script runs tsc --noEmit and blocks commits on type errors.eslint --fix on staged files automatically, then validates. Commits are blocked if issues cannot be auto-fixed.src/types/index.ts must be identical between UI and API repos. Mismatches are a primary source of runtime bugs.any types — the final checklist verifies there are no TypeScript any types in the codebase.Run this in both the ui/ and api/ folders before submitting for review. It runs typecheck, lint, and validate in sequence.
Testing is your responsibility. Reviewers check safety, not functionality. Users finding bugs after deployment means you own the fix.
Walk through every user-facing screen and flow yourself — including the happy path, empty inputs, wrong inputs, the back button, and error conditions. If you can find it by clicking around, so can a user.
Ask Claude to write unit tests for the business logic it just wrote — calculations, validation, data transforms. These are cheap to generate and catch regressions when you make changes later.
Have at least one other person who has never seen the app run it locally and try the main flows. They will click the wrong button and ask the questions a real user would ask — before review, not after.
The program is designed for simple tools, automations, and lightweight applications. If your app grows to need complex database architecture, multi-system integrations, or broad organizational rollout, review it with the Product Team before continuing. A short conversation early saves weeks of misdirected development.
Run through this before requesting AI App Review. Incomplete submissions are returned.
Product Team signoff not required before deployment — but access must be restricted to that group. If the user base later grows beyond 5, Product Team approval is required before expanding access.
Product Team signoff is required before deployment. Bring a description of the problem the app solves, confirmation it does not duplicate an existing app, and manager approval.
Your first deployment is self-service through Runway. After that, every change ships through a Pull Request — and you keep ownership the whole way.
When your app runs locally and you’re ready to share it, deploy it yourself through Runway — TD’s self-service deployment portal. No terminal, no gh commands, and no waiting on IT to create repos for you.
Go to runway.tdindustries.com, sign in with your TD account, and click Ship a new app.
App name in kebab-case plus a one-line description. If your app needs to store data, check “My app needs a Postgres database.”
Drag your whole my-app/ folder onto the upload area. Runway automatically excludes node_modules, dist, and .env, scans for secrets, and shows you exactly what will be submitted.
Click Submit. An admin reviews your request — you don’t need to do anything else.
On approval, Runway creates the GitHub repo under TDICitizenDev, commits your code, registers your app’s sign-in, and deploys both ui/ and api/. You get an email when it’s live.
http://localhost:5173 before you submit. If it doesn’t work locally, it won’t work hosted.Runway handles the first deployment. After that your code lives in a GitHub repo under TDICitizenDev and normal git takes over. Every change follows this path — no exceptions.
Branch, make changes, and test at http://localhost:5173.
All changes go through a PR. Direct pushes to main are not permitted.
The review group approves the PR.
A Change Management ticket is approved.
The PR is merged to main and the pipeline redeploys both ui/ and api/ automatically.
main. main is protected — every change, including small bug fixes, goes through a Pull Request. This is a hard rule of the Citizen Developer Program.Claude handles the technical work. IT handles the infrastructure. When you need a human, here’s who to contact.
| What you need | Who to contact |
|---|---|
| Node.js, Git, or Claude Code setup | IT service desk |
| Database provisioning, SSO configuration, data source integration | Application Development / Platform Team via IT service desk |
| Code modularization (large app growing complex) | Application Development via IT service desk |
| Security incident or suspected vulnerability | IT service desk — mark as urgent |
| Plugin issues, skill questions, PR review questions | AI App Review group via Microsoft Teams |
| App scope grown beyond citizen dev — ready for Application Development | Product Team intake process (link on the program site) with manager approval |
Contact the TDIndustries IT team through the standard IT service desk, or reach out directly to the AI App Review group via Microsoft Teams.