Using Claude Code
Claude Code is Anthropic's official
CLI for Claude. It's our recommended tool for modifying ARK products
because every ARK repo ships with a CLAUDE.md that configures it
for the codebase out of the box.
You don't have to use Claude Code — see Using ChatGPT & Others if you prefer another tool — but this is the path with the least friction.
Why Claude Code for ARK products
Claude Code reads files, edits files, runs commands, and iterates on failures without you copy-pasting anything. When it starts a session, it automatically reads:
- The repo's
CLAUDE.md(project conventions, guardrails) - Any linked docs the
CLAUDE.mdreferences - The files it decides are relevant to your request
That means for an ARK product, Claude Code starts every session already knowing:
- The project structure (where features live, what naming conventions are)
- Which files are off-limits (license validation, fingerprint markers)
- How to run the dev server, tests, and migrations
- When to pause and ask before making non-trivial schema or architecture changes
You get AI-assisted development that respects the codebase's rules.
Setting up Claude Code
1. Install Claude Code
Follow the install instructions at claude.com/claude-code. At time of writing, the install is one command on macOS and Linux:
curl -fsSL https://claude.ai/install.sh | shVerify the install:
claude --version2. Sign in
claude /loginYou'll be prompted for an Anthropic account. A Claude subscription (Pro, Max, or Team) includes Claude Code usage. You can also use an Anthropic API key directly if you prefer pay-as-you-go.
3. Clone your ARK repo
After you complete a purchase, you receive a GitHub invitation to your fingerprinted repo. Accept it, then clone:
git clone git@github.com:arkteams/track-a1b2c3.git
cd track-a1b2c34. Start a session
From inside the repo directory:
claudeClaude Code reads CLAUDE.md automatically on first prompt. You'll
see it reference the conventions in its responses — that's the
signal that the project context loaded correctly.
The CLAUDE.md file and why it matters
Every ARK product ships with a CLAUDE.md at the repo root. It's
roughly 200–400 lines and covers:
- Product identity — what this codebase is, what it does, what it explicitly isn't
- Behavioral principles — how to make decisions in this repo ("read the docs first," "don't touch the license validator," etc.)
- Decision autonomy — what Claude can do without asking, and what requires a pause-and-confirm
- Hard guardrails — security, coding, and process rules with no exceptions
- Satellite doc triggers — which deeper docs to open for which
kinds of task ("touching the schema? read
docs/database.md")
This file is why AI-assisted changes to ARK products work on the first try instead of the fifth. It front-loads the context Claude needs so every session doesn't start from zero.
Don't delete or "clean up" CLAUDE.md
If you've customized the product heavily and think the guardrails don't apply anymore, don't remove them. Instead, add your own section at the bottom with your buyer-specific conventions:
---
## Buyer Customizations
### Our conventions
- We use `@/features/` import alias, never relative paths
- All new tables get a `company_id` column for our multi-tenant setup
- Slack notifications go through `lib/notify.ts`, not `lib/slack.ts`
### What we've already changed
- Renamed "Deal" to "Opportunity" throughout the UI (Dec 2025)
- Added custom dashboard at `/dashboard/exec` (Jan 2026)
- Forked Pulse's Slack integration to use Teams insteadYour additions layer on top of the ARK-provided guardrails. Claude reads both and honors both.
Example workflow: "I want to add a feature"
Let's walk through a full Claude Code session end to end. The goal: add a "health score" field to companies in Track that updates nightly based on recent activity.
Step 1: Describe the change clearly
From inside your Track repo:
claudeThen paste a prompt like this:
I want to add a health score to companies in Track.
What it should do:
- Integer 0–100 stored on each company row
- Computed nightly by an Edge Function based on: days since last activity (lower score for older), count of open tasks (lower for more), total deal value (higher for more)
- Displayed as a colored badge on the company list view: green ≥ 70, yellow 40–69, red < 40
Before you start, read
CLAUDE.md, then look atsrc/features/companies/andsupabase/functions/to understand how similar things are built. Then propose a plan and wait for me to confirm before writing code.
Step 2: Review the plan
Claude will respond with something like:
Here's my plan:
- Add a migration
supabase/migrations/20260416_health_score.sqlthat adds ahealth_score integer default 0column tocompanies.- Create an Edge Function at
supabase/functions/compute-company-health/that reads companies, recentactivities, and opentasks, computes the score, and bulk-updates.- Add a pg_cron schedule to run it nightly at 3am.
- Add a
HealthBadgecomponent atsrc/features/companies/HealthBadge.tsx.- Wire the badge into the company list at
src/features/companies/CompanyList.tsx.Files I'll touch:
- supabase/migrations/20260416_health_score.sql (new)
- supabase/functions/compute-company-health/index.ts (new)
- src/features/companies/HealthBadge.tsx (new)
- src/features/companies/CompanyList.tsx (edit — one row in render)
Let me know if you want changes before I implement.
This is the review point. Read the plan. If anything's off — wrong file, wrong column type, missing an index — say so now. Fixing a plan costs one sentence; fixing finished code costs a refactor.
Step 3: Let it implement
Once you approve, Claude writes the files, runs npm run build to
confirm TypeScript is clean, and summarizes what it did.
Step 4: Test locally
npm run devClick through the UI. Does the badge render? Does the color match
the score? Open localhost:3000/companies and check.
For the Edge Function, deploy it to a dev branch Supabase project first:
npx supabase functions deploy compute-company-healthThen manually invoke it and verify rows update:
npx supabase functions invoke compute-company-healthStep 5: Apply the migration to production
If everything looks good locally, open your production Supabase project and run the migration SQL in the SQL editor. Migrations are intentionally not auto-applied — you decide when schema changes hit production.
Step 6: Commit and push
Claude can do this for you:
Commit the changes with a clear message and push to
main.
Or do it yourself:
git add .
git commit -m "Add nightly health score to companies"
git pushVercel rebuilds automatically on push. Within a minute or two, the badge is live.
Step 7: (Optional) Record the change
If you want to keep a changelog of your modifications — which is a
good idea once you have more than two or three — add a line to your
repo's CUSTOMIZATIONS.md (create it if it doesn't exist):
## 2026-04-16 — Company health score
- Added `companies.health_score` column
- Added `compute-company-health` Edge Function (nightly at 3am UTC)
- Added `HealthBadge` to the company list viewThis helps both you (six months from now, when you wonder what you changed) and Claude (in future sessions, it reads this too).
Tips for productive Claude Code sessions
- Scope each session. One feature per session produces clean commits and is easy to roll back.
- Let Claude read first. "Before you code, read X, Y, Z" is almost always worth the tokens. Context-free code is hit-or-miss.
- Stop-gate risky changes. For anything schema- or security-adjacent, ask for a plan first, not code.
- Use
git statusas a lie detector. If Claude says "I've added a health score column" andgit statusshows no migration file, prompt again: "I don't see a migration. Show megit status." - Commit often. After each working change, commit. If the next
prompt breaks something,
git reset --hard HEADis your undo.
Where to go next
- Which Files to Share — a per-product map of what matters for different kinds of change
- Example Modifications — six concrete walkthroughs like the one above
- Best Practices — habits for keeping modifications clean as your deployment matures