Carl Wilcocks / Curriculum vitae
Carl Wilcocks
AI Engineer | Agents, skills and integrations
Profile
I graduated in Industrial Engineering in December 2025 and now work as a fullstack developer on a three-person team. My work includes a production agent for class action loss calculations, Claude skills used by the operations team, and AWS and Salesforce integrations. I also co-founded Eidetic, a Shopify app we developed to within a few weeks of App Store submission.
Experience
Fullstack Developer · WTax · Global tax reclaim firm
Jan 2026 – Present
Part of a three-person development team building on AWS and Salesforce for a global withholding tax reclaim firm.
Agent engineering
- Sole engineer on an AI agent that calculates recognised losses for securities class action settlements. It reduced each case from days of manual work to about 10 minutes. Used on around 30 production cases, with results matching law-firm-verified losses to the cent.
- Built the agent to write a case-specific Python calculator, then check it through static review, sandboxed Code Interpreter runs and property-based invariants. Failed checks feed into the next attempt. In model comparisons, GLM-4.7 needed 4–5 attempts; Claude Opus passed on the first or second.
- Co-built the surrounding pipeline across 12 Step Functions state machines. It extracts notices from Salesforce with Textract, invokes the agent, runs the calculator in a temporary Lambda with up to 40 concurrent runs, returns results to Salesforce and removes the Lambda.
Claude skills and connectors
- Built and tested 10+ Claude skills for manual operations tasks, comparing results with and without each skill and revising it. The e-filing skill reduced completing class action templates from about a day to a few minutes plus human review. The whole operations team uses it.
- Connected Salesforce to Claude through a read-only MCP app. Operations staff use it for reporting, and developers use it to give Claude live context when building Salesforce features.
- Led the rollout of a dedicated Claude organisation for the securities class action division. As admin, distribute skills across Claude Code, Desktop and chat, including a OneDrive-synced folder symlinked into Claude Code. Selected skills also run in Codex.
Salesforce and AWS development
- Built Lightning record pages in App Builder and later as Lightning Web Components. Added an OAuth 2.0-secured route from Salesforce to Step Functions using API Gateway, Lambda and Cognito, plus a DynamoDB distributed lock with EventBridge Scheduler to prevent concurrent case-processing runs from colliding.
Loss Calculator agentHow I built it
Calculating losses across different settlements
Every securities class action settlement publishes its own Plan of Allocation: eligibility windows, per-share inflation tables and edge cases. Each case needs its own calculator. Manual calculation took days, with a wide margin of error. An earlier Claude skill improved results, but sometimes exceeded the context window.
The production system makes the model write a case-specific Python calculator once. A deterministic harness validates it, then a frozen script computes the losses. The same inputs produce the same outputs, with a trace from each number back to its rule.
Inputs and audit records
The invocation has two fields: caseId and bucket. The runtime fetches its inputs from S3, starts a fresh session for each run and works to completion while Step Functions waits. It returns a Lambda-ready final_script.py plus every attempt, prompt, response and validation result.
The surrounding system uses 12 Step Functions state machines, one Lambda action router and one AgentCore runtime per environment: development, UAT and production. All use the same CI pipeline.
Pass → freeze and ship. Fail → feed the error into the next attempt. Five unsuccessful attempts → escalate; nothing ships.
The checks run in code and limit the number of attempts. They do not use a golden reference file or ask another model to grade the numbers.
Model benchmarking
Observed attempts needed to pass this harness:
AgentCore services used
- Runtime: generation runs for minutes and drives a live sandbox.
- Code Interpreter: executes the proposed code inside the validation boundary.
- Identity: each environment has a role scoped to its own bucket, preventing development runs from writing production cases.
- Observability: the S3 audit trail makes attempts and validation results replayable months later.
- No Memory: settlement logic must never bleed across cases.
- No Gateway: the inputs and output are files; there is no external tool to wrap.
Running the validated calculator
The frozen script is zipped into a new Lambda created during execution, named for the case and run, with a role scoped to one bucket. Once active, the pipeline fans out across four clients and ten account files, with up to 40 concurrent runs. Each lot gains a reason, loss per share and lot total. Results roll up from account to client to Salesforce, and the Lambda is deleted on success or failure.
The pipeline checks that the output file exists. Reruns reuse the frozen calculator unless a fresh one is requested; notices without a usable Plan of Allocation are flagged.
Results: around 30 production cases; about 10 minutes per case; results match law-firm-verified losses to the cent.
My contribution: sole engineer on the agentic part and about half of the surrounding pipeline.
Stack: Amazon Bedrock AgentCore · Strands Agents SDK · Claude Opus · Step Functions · Lambda · S3 · Textract · Salesforce · Python.
Skills & adoptionHow I built it
Building and testing skills
I start with a manual operations task, build a skill for it, then compare the same task with and without the skill. I revise it before distributing it to the team.
I built 10+ Claude skills and led the dedicated Claude organisation rollout for the securities class action division. As administrator, I distribute skills across Claude Code, Desktop and chat, with a OneDrive-synced folder symlinked into Claude Code. Selected skills also run in Codex.
E-filing: completing class action templates fell from about a day to a few minutes plus human review. The whole operations team of 2–3 people uses the skill.
Testing was a with/without comparison and iteration against the real task.
Salesforce & ClaudeHow I built it
Salesforce reporting and development
I connected a read-only Salesforce app to Claude through MCP. The operations team uses it to run organisation reporting directly from Claude; developers use it to give Claude live context when building new Salesforce features.
The connector was configured, with default read permissions.