Less admin. More time for customers.

Automate the work that's costing your business time and sales.

Customer requests, quotes, follow-ups and system updates can consume your team's day. I build AI-powered workflows around the tools you already use, with checks and approvals where your business needs them.

An example to exploreFrom a customer request
to a quote ready for review.
The request comes in.

Customer details and job requirements are organized in your existing system.

A draft is prepared.

Your pricing rules guide the quote. Missing details are flagged for your team.

You approve before it goes out.

Review the price, scope and customer message. Approve it, make a change or hold it for a conversation.

We scope and test the workflow with your team before putting it to work.

Your existing toolsYour business rulesHuman approvalsMeasured results

What we automate

Start with the work
that keeps piling up.

These are examples we can scope and test together. We pick one repetitive task, define a useful finished result and check whether automating it is worth the investment.

01

Turn inquiries into organized next steps.

Collect customer details from incoming messages, identify missing information and prepare a response in your existing system for your team to approve.

Less retypingReady for review
02

Turn job details into quotes ready for review.

Prepare a draft using your pricing rules and customer information. Flag missing details and unusual requests before someone approves the quote.

Your pricing rulesYou approve
03

Keep follow-ups and records moving.

Prepare follow-ups for open opportunities and update customer records in your business tools. Your team controls what gets sent and handles exceptions.

Fewer missed follow-upsRecords kept current

Built around the tools
you already use.

We first check how your systems connect, what information the workflow needs and which actions require approval. We agree on running costs and limits before launch, so the work fits your day and your budget.

An example workflow

From incoming inquiry
to the next follow-up.

One process, with clear handoffs. We use this example to start the conversation. Your tools, rules and approval points determine what we build.

  1. Capture the inquiry.

    Bring a new customer email or form submission into the workflow.

  2. Organize the details.

    Prepare the customer record and flag information your team still needs.

  3. Prepare the quote.

    Draft the scope and price using your agreed rules. Hold unusual requests for review.

  4. Your team approves.

    Review the draft in an agreed channel, such as email. Approve, request changes or stop it before sending.

  5. Prepare the follow-up.

    Use the opportunity's status and your schedule to draft the next message for approval.

  6. Update the records.

    Save approved actions in your existing system and flag anything that needs a human decision.

Every result is checked against your agreed rules before anything is sent or saved. Checks can miss things, so we test with real examples and keep human review where it matters.

Discuss your workflow

Working together

One task. A measured start.

I'm Vincent Serpico. I've been writing software for more than 30 years. We start with your day-to-day work and agree on what a useful result would look like.

01 /

Find one costly task.

Walk through how it works today, how often it happens and where time or opportunities get lost. We record the starting workload and review time before deciding whether AI is a good fit.

02 /

Test one workflow.

Agree on a paid pilot with one process, a defined scope and clear success measures. I build and test it with representative work. Your team reviews outputs through a simple, agreed approval process.

03 /

Measure before expanding.

Review a weekly report in plain English: work completed, errors caught, corrections needed and time spent. Compare it with the starting process, including review time, before deciding what to expand.

Built by me · Six applications

The engineering
around the AI.

Six implementations, with their control architecture exposed: model decisions, tool contracts, feedback loops, permission gates and saved state. Follow a request through the harness and inspect the code behind the controls.

Inspect the system, not just the output.

Open a project’s engineering view to see the application harness, AI decisions and feedback paths. Select a component for its implementation, or trace an illustrative request. The diagrams start collapsed so you can explore the software first.

  • Human decision
  • Agent / model role
  • Harness code
  • Tools / state

01 / Digital Human Studio

Give a character a direction.
Build a performance.

Linux desktop app · Research prototype

Direct a virtual human by chat or by hand. Combine walking, motion clips and prop interactions into a sequence, save it as a reusable skill, and record the performance. Generate new motion from text with a separately configured local model.

Digital Human Studio showing a virtual human in a live 3D scene beside the director's assistant and room controls
Live scene and director’s assistant · Development sessionOpen full-size ↗
Explore the harness, agents & feedback loopsModel decisions, tools, checks and recovery
ENGINEERING VIEW / Digital Human StudioDirector’s tool agent + motion runtime
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
Digital Human Studio: harness and model architecture The director’s assistant selects named tools, receives command results and can inspect scene state before choosing again. The same command interface serves manual controls. The worker runs sequences and records completion, rejection and fall events. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. direction history + tools tool request scene command manual action inspect / save skills metadata / result tool error append / read ack / timeout events + state next decision read clips / compose motion log tool events record the session reply / limit STUDIO HARNESS · named tools + recorded commands The user chooses a local or cloud provider and gives a direction. Scene state and library contents are available through tools; the assistant is prompted to inspect the studio first. HUMAN / REVIEWDirector’s request Choose a provider + direction The compatible-provider adapter defaults to 12 model rounds; the Claude adapter configures 24 SDK turns. A final reply is not independent proof of a completed performance. EXIT / RESPONSEReply or turn limit Provider-specific loop limits The user can operate the scene directly. Scene Stop, assistant cancellation and ending the session are distinct actions; there is no approval prompt before each assistant tool. HUMAN / REVIEWManual scene controls Stop · pause · reset · end The adapter supplies conversation history, studio instructions and tool definitions. The Claude adapter exposes only studio tools and disables its built-in file and shell tools. HARNESS CODEConversation + tools History · studio instructions Named operation schemas One assistant chooses studio operations such as searching skills, inspecting state or running a sequence. Tool results and errors feed later decisions; motion tracking is a separate runtime. AGENT / MODELDirector’s assistant Inspect · choose · respond Local or cloud model The dispatcher rejects unknown names and catches handler errors. Individual tools check prerequisites and arguments; session launchers use a GPU lock. The host does not apply a universal approval or schema-validation gate. HARNESS CODENamed tool dispatch Session + argument checks Errors returned as data Tools inspect skill metadata and save composed sequences. The worker reads clips from a library mounted read-only; generation can add clips separately when its prerequisites are prepared. PERSISTED STATEReusable skill files Motion clips + sequences Command acknowledgements report acceptance or rejection. Waiting tools can check completion events and return final state; get_state provides a fresh scene observation. A timeout does not imply the action was undone. HARNESS CODEResults + scene state Accepted / rejected / timeout Completion or fall events Tools append timestamped commands and match worker acknowledgements. Manual controls append to the same command file. The worker owns sequence timing and execution. HARNESS CODERecorded commands commands.jsonl Match acknowledgements The worker records video, events, motion traces and a session summary. The desktop bridge logs assistant events separately. These records support inspection, not automatic resumption of an interrupted assistant turn. PERSISTED STATESession evidence Video · traces · chat logs The Isaac worker composes motion, advances sequence steps and reports outcomes. It rejects out-of-bounds destinations and blocks direction after a fall until reset. Physical tracking and direct pose playback have different behavior. TOOL / SYSTEMSimulation worker Sequence + motion composer Physical or kinematic

The assistant chooses studio operations. A separate simulation worker executes motion and reports what happened.

CONTROL ARCHITECTURE

How the system stays in control

The director’s assistant selects named tools, receives command results and can inspect scene state before choosing again. The same command interface serves manual controls. The worker runs sequences and records completion, rejection and fall events.

Evidence to inspectProvider loop · command acknowledgements · sequence completion events · recorded development sessions

Engineering boundary: Studio actions run without per-call approval. An accepted command is not a finished performance. Cancellation releases waiting tools but does not guarantee a model request or simulation has stopped; scene Stop and End session are separate controls.

Read the components and code references
Director’s request
The user chooses a local or cloud provider and gives a direction. Scene state and library contents are available through tools; the assistant is prompted to inspect the studio first. assistantSend / assistantNew
Reply or turn limit
The compatible-provider adapter defaults to 12 model rounds; the Claude adapter configures 24 SDK turns. A final reply is not independent proof of a completed performance. run_turn
Manual scene controls
The user can operate the scene directly. Scene Stop, assistant cancellation and ending the session are distinct actions; there is no approval prompt before each assistant tool. sendCommand / assistantStop
Conversation + tools
The adapter supplies conversation history, studio instructions and tool definitions. The Claude adapter exposes only studio tools and disables its built-in file and shell tools. AgentSDKAssistant / TOOL_SPECS
Director’s assistant
One assistant chooses studio operations such as searching skills, inspecting state or running a sequence. Tool results and errors feed later decisions; motion tracking is a separate runtime. OpenAICompatibleAssistant.run_turn
Named tool dispatch
The dispatcher rejects unknown names and catches handler errors. Individual tools check prerequisites and arguments; session launchers use a GPU lock. The host does not apply a universal approval or schema-validation gate. call_tool / start_session
Reusable skill files
Tools inspect skill metadata and save composed sequences. The worker reads clips from a library mounted read-only; generation can add clips separately when its prerequisites are prepared. get_skill / save_sequence
Results + scene state
Command acknowledgements report acceptance or rejection. Waiting tools can check completion events and return final state; get_state provides a fresh scene observation. A timeout does not imply the action was undone. _send / _wait_event / get_state
Recorded commands
Tools append timestamped commands and match worker acknowledgements. Manual controls append to the same command file. The worker owns sequence timing and execution. _send
Session evidence
The worker records video, events, motion traces and a session summary. The desktop bridge logs assistant events separately. These records support inspection, not automatic resumption of an interrupted assistant turn. session evidence / launcher checks
Simulation worker
The Isaac worker composes motion, advances sequence steps and reports outcomes. It rejects out-of-bounds destinations and blocks direction after a fall until reset. Physical tracking and direct pose playback have different behavior. apply_command / sequence execution

Research prototype with a local NVIDIA GPU runtime. Physical tracking can fall; kinematic playback follows poses without simulating balance or contact. Walking does not plan around obstacles.

02 / Prompt Maker

Turn a scene brief into generated media.

Creative production

Build an editable shot list, generate stills and video, and assemble the result. The application checks the plan and runs the production steps, with saved progress for review.

Prompt Maker media library with the assistant panel open
App screenshot
Explore the harness, agents & feedback loopsModel decisions, tools, checks and recovery
ENGINEERING VIEW / Prompt MakerTool agent + compiled production jobs
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
Prompt Maker: harness and model architecture A conversational agent proposes tools and scene plans. The harness validates the plan, compiles the production steps and runs the work. Results and validation errors return to the agent; job state lives separately from chat context. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. request context + tools tool / shot list valid plan review on Run validation error + reason tool result repair / continue item boundaries + heartbeat persist job status call / output optional judge selected render reply / limit BROWSER HARNESS · tool loop + deterministic job runner A request, current application state, plan and tool definitions are sent through the assistant endpoint. HUMAN / REVIEWBrief + app state Scenes · models · constraints The conversation loop limits rounds, stops repeated identical successful calls and reduces older context. These controls bound behavior; they do not establish creative quality. EXIT / RESPONSEReply or stop 60-round ceiling Repeated-call detection With jobsAsk enabled, a shot list is saved as an editable draft. Disabling it queues work; the separate start_job tool can also queue immediately. HUMAN / REVIEWShot-list review Default: edit → Run Auto-run is configurable The browser retains tool results, shrinks older context and can summarize the conversation before the next model turn. The server prepares the provider request. HARNESS CODEContext management Chat + plan + app state Fold older tool results One assistant chooses supported actions and fills scene-plan fields. The harness receives the proposal; it does not treat the model response as executable production code. AGENT / MODELAssistant / model Choose tools Propose a structured plan runTool dispatches recognized operations. For shot lists, checkShots checks prompts, model capabilities, references and audio requirements; compileShots creates the lower-level execution sequence. HARNESS CODEDispatch + plan checks Known tools · checkShots Compile valid scene plans Jobs save at item boundaries and on a heartbeat. Stale interrupted items are marked skipped for inspection; three consecutive instances of the same item error pause a job. HARNESS CODESaved job state Units · heartbeat · logs Pause / inspect / retry Results feed the next assistant decision. A tool error also prevents remaining tool calls in that same response from continuing blindly. HARNESS CODETool observations Outputs or validation errors Append results to chat The runner executes the scene plan compiled by application code. It invokes media tools, tracks units and can use an optional visual selection call. TOOL / SYSTEMCompiled job runner Generate · select · join Application-owned steps The application persists job records separately from the transient model conversation. Recovery can require inspecting an interrupted item. PERSISTED STATEPersisted jobs Saved status + item progress A separate model call can compare renders and choose an image to carry forward. This is a specialized model role, not an independent coordinating subagent. MODEL ROLEVisual selection role Compare generated images Return a selection Media operations produce actual artifacts. A completed job can include skipped items, and image selection remains model judgment. TOOL / SYSTEMMedia systems Generation workflows Stills · video · assembly

The server transports model turns. The browser validates and executes tools.

CONTROL ARCHITECTURE

How the system stays in control

A conversational agent proposes tools and scene plans. The harness validates the plan, compiles the production steps and runs the work. Results and validation errors return to the agent; job state lives separately from chat context.

Evidence to inspectScripted-model UI tests · shot-list validation · recovery tests · live-model eval harnessRead the tests ↗

Engineering boundary: Shot-list review is configurable. Saved item progress does not guarantee exact-step recovery after an interruption.

Read the components and code references
Brief + app state
A request, current application state, plan and tool definitions are sent through the assistant endpoint. POST /api/assistant
Reply or stop
The conversation loop limits rounds, stops repeated identical successful calls and reduces older context. These controls bound behavior; they do not establish creative quality. askAssistant / foldChat
Shot-list review
With jobsAsk enabled, a shot list is saved as an editable draft. Disabling it queues work; the separate start_job tool can also queue immediately. shot_list / start_job
Context management
The browser retains tool results, shrinks older context and can summarize the conversation before the next model turn. The server prepares the provider request. foldChat / askAssistant
Assistant / model
One assistant chooses supported actions and fills scene-plan fields. The harness receives the proposal; it does not treat the model response as executable production code. askAssistant
Dispatch + plan checks
runTool dispatches recognized operations. For shot lists, checkShots checks prompts, model capabilities, references and audio requirements; compileShots creates the lower-level execution sequence. checkShots / compileShots
Saved job state
Jobs save at item boundaries and on a heartbeat. Stale interrupted items are marked skipped for inspection; three consecutive instances of the same item error pause a job. loadJobs / runJobs / runJob
Tool observations
Results feed the next assistant decision. A tool error also prevents remaining tool calls in that same response from continuing blindly. askAssistant / runTool
Compiled job runner
The runner executes the scene plan compiled by application code. It invokes media tools, tracks units and can use an optional visual selection call. runJobs / runJob
Persisted jobs
The application persists job records separately from the transient model conversation. Recovery can require inspecting an interrupted item. saveJob / loadJobs
Visual selection role
A separate model call can compare renders and choose an image to carry forward. This is a specialized model role, not an independent coordinating subagent. brainPicks
Media systems
Media operations produce actual artifacts. A completed job can include skipped items, and image selection remains model judgment. compileShots

Shot-list review is on by default and can be disabled. Interrupted items may need inspection or a retry.

03 / Desktop Buddy

Carry a desktop task across files and tools.

Experimental desktop assistant

Discover tools, inspect the workspace and carry out permitted actions. The application controls execution and records progress so a person can inspect what happened.

Desktop Buddy welcome screen with task suggestions and execution controls
App screenshot
Explore the harness, agents & feedback loopsModel decisions, tools, checks and recovery
ENGINEERING VIEW / Desktop BuddyGeneral-purpose tool agent
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
Desktop Buddy: harness and model architecture The model chooses tools. A host registry validates arguments, applies execution policy, records the pending call and returns observed results. The next decision sees that feedback. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. task context + schemas tool request allowed ask approved invalid / denied → error call / result result / error next decision record outcome pending call saved before execution persist task history reply / limit DESKTOP HARNESS · application-owned execution The user supplies the task and execution mode. Planning rejects mutations; execution asks approval for designated risk categories. HUMAN / REVIEWTask + execution mode Plan / execute / preapproved The default loop allows 100 rounds and stops repeated identical failures. A final reply can mark complete; that status does not independently verify the whole objective. EXIT / RESPONSEReply, stop or wait No call · cancellation · limits Policy can require a human decision for commands, destructive actions, desktop input and other designated risks. Some workspace writes require no extra prompt. HUMAN / REVIEWHuman authorization Required by execution policy The harness loads task history and explicit memory, then compacts the request when needed. Stored history remains separate from the smaller model context. HARNESS CODEContext assembly History + memory Compact older tool results One model-driven agent can discover a relevant subset of the registry and request a named operation. It receives results or errors before choosing again. AGENT / MODELAgent / model Discover tools Choose the next call The registry checks the tool name and schema, copies the arguments being authorized and applies host policy before invoking the handler. HARNESS CODERegistry + policy Validate exact arguments Authorize the operation The agent saves the pending call before execution, then records its result. Restart marks interrupted work; unresolved side effects are not automatically replayed. HARNESS CODETask checkpoints Pending call → result Restart marks uncertainty Tool results and errors are appended to the conversation. Particular tools verify particular effects; desktop actions often need a follow-up observation. HARNESS CODEObservation + errors Tool result / failure Return to model context Registered handlers execute allowed file, browser, system, desktop and media operations. File writes use atomic replacement and readback; cancellation cannot undo past effects. TOOL / SYSTEMTool execution Bounded handlers Cancellation + audit events SQLite stores history, checkpoints, preferences and audit events. This supports inspection and recovery, rather than guaranteed exactly-once execution. PERSISTED STATESQLite state History · audit · memory These tools reach beyond the model into real systems. The host selects the handler and enforces the execution policy; the model does not directly perform the write. TOOL / SYSTEMExternal capabilities Files · browser · desktop Shell · ComfyUI

Policy → execution → observation; the model proposes each next action.

CONTROL ARCHITECTURE

How the system stays in control

The model chooses tools. A host registry validates arguments, applies execution policy, records the pending call and returns observed results. The next decision sees that feedback.

Evidence to inspectPolicy tests · cancellation tests · checkpoint recovery · file readbackRead the tests ↗

Engineering boundary: A final model reply is not an independent completion check. Shell approval grants the command the user’s privileges.

Read the components and code references
Task + execution mode
The user supplies the task and execution mode. Planning rejects mutations; execution asks approval for designated risk categories. Policy.authorize
Reply, stop or wait
The default loop allows 100 rounds and stops repeated identical failures. A final reply can mark complete; that status does not independently verify the whole objective. Agent.run
Human authorization
Policy can require a human decision for commands, destructive actions, desktop input and other designated risks. Some workspace writes require no extra prompt. Policy.authorize
Context assembly
The harness loads task history and explicit memory, then compacts the request when needed. Stored history remains separate from the smaller model context. compact / Agent.run
Agent / model
One model-driven agent can discover a relevant subset of the registry and request a named operation. It receives results or errors before choosing again. discover_tools / run_tool
Registry + policy
The registry checks the tool name and schema, copies the arguments being authorized and applies host policy before invoking the handler. Registry.execute
Task checkpoints
The agent saves the pending call before execution, then records its result. Restart marks interrupted work; unresolved side effects are not automatically replayed. task state / checkpoints
Observation + errors
Tool results and errors are appended to the conversation. Particular tools verify particular effects; desktop actions often need a follow-up observation. Agent.run
Tool execution
Registered handlers execute allowed file, browser, system, desktop and media operations. File writes use atomic replacement and readback; cancellation cannot undo past effects. Registry.execute / Files.write
SQLite state
SQLite stores history, checkpoints, preferences and audit events. This supports inspection and recovery, rather than guaranteed exactly-once execution. Store
External capabilities
These tools reach beyond the model into real systems. The host selects the handler and enforces the execution policy; the model does not directly perform the write. Registry._register

Experimental. A task report is not independent proof of completion, and stopping cannot undo completed actions.

04 / AILC CRM

Turn a CRM request into a reviewed record change.

Business software

Find the right record, collect missing details and prepare an update in plain language. A person sees the proposed change and confirms before the app applies it.

AILC CRM dashboard and assistant showing a proposed contact update with Confirm Update and Cancel controls
Actual interface components · sample data
Explore the harness, agents & feedback loopsModel decisions, tools, checks and recovery
ENGINEERING VIEW / AILC CRMQuery agent + separately confirmed writes
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
AILC CRM: harness and model architecture The assistant can query CRM data and prepare changes. Query results return to the model. A mutation proposal leaves the agent loop as a preview; a user confirmation invokes a separate authenticated write path. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. SEPARATE WRITE PATH request context + tools tool request read query result next decision proposed mutation → pending action UI preview confirm write / readback query / records reply / limit REQUEST HARNESS · queries and proposed mutations The user asks to inspect CRM data or prepare a record change. The API first requires an active authenticated session. HUMAN / REVIEWUser request Find, clarify or change The model can answer without another tool call. The request loop is bounded to five iterations, not a persistent background task. EXIT / RESPONSEReply or loop limit At most 5 iterations The route verifies the active session and uses recent messages to construct the model request. It does not establish a durable saved job plan. HARNESS CODESession + context Active profile Recent chat messages The model chooses CRM queries or requests structured pending insert, update and delete proposals. It receives query results in the current request. AGENT / MODELCRM assistant Query · disambiguate Collect missing fields The dispatcher routes query calls to handlers. Mutation-oriented chat tools return pending action structures rather than applying those writes directly. HARNESS CODETool dispatcher Queries or pending actions Application-defined tools The UI renders the proposed change. An update preview shows current and proposed field values; the preview itself is not an immutable server-bound authorization. HARNESS CODEPending change preview Current → proposed values Insert / update / delete Tool results are appended to the current request conversation so the model can disambiguate, query again or produce a pending proposal. HARNESS CODEQuery observations Structured results / errors Continue the model turn Handlers query the supported CRM entities. The administrative client means authentication should not be confused with proven fine-grained record authorization. TOOL / SYSTEMCRM query handlers Supported entity queries Administrative DB client A click in the preview calls a separate server action. Cancelling does not apply the proposal. HUMAN / REVIEWPerson confirms Review, cancel or apply The server action checks the active session and allowed entity, strips bookkeeping fields from updates, writes the record and checks the result. Bulk inserts can partly succeed. HARNESS CODEConfirmed server action Session + entity checks Write + readback The records persist. That persistence is distinct from the bounded, request-scoped agent execution. PERSISTED STATECRM database Persistent business records

The chat loop proposes record changes; a separate server action performs confirmed writes.

CONTROL ARCHITECTURE

How the system stays in control

The assistant can query CRM data and prepare changes. Query results return to the model. A mutation proposal leaves the agent loop as a preview; a user confirmation invokes a separate authenticated write path.

Evidence to inspectQuery dispatch · structured pending actions · UI confirmation · mutation readback

Engineering boundary: Chat execution is request-scoped. UI confirmation is not a saved authorization token, and administrative writes need separate record-permission review.

Read the components and code references
User request
The user asks to inspect CRM data or prepare a record change. The API first requires an active authenticated session. Implementation: POST /api/chat
Reply or loop limit
The model can answer without another tool call. The request loop is bounded to five iterations, not a persistent background task. Implementation: chat route loop
Session + context
The route verifies the active session and uses recent messages to construct the model request. It does not establish a durable saved job plan. Implementation: requireApiSession / messages
CRM assistant
The model chooses CRM queries or requests structured pending insert, update and delete proposals. It receives query results in the current request. Implementation: tool dispatcher
Tool dispatcher
The dispatcher routes query calls to handlers. Mutation-oriented chat tools return pending action structures rather than applying those writes directly. Implementation: executeToolCall / pending actions
Pending change preview
The UI renders the proposed change. An update preview shows current and proposed field values; the preview itself is not an immutable server-bound authorization. Implementation: UpdatePreview
Query observations
Tool results are appended to the current request conversation so the model can disambiguate, query again or produce a pending proposal. Implementation: tool_result messages
CRM query handlers
Handlers query the supported CRM entities. The administrative client means authentication should not be confused with proven fine-grained record authorization. Implementation: query handlers
Person confirms
A click in the preview calls a separate server action. Cancelling does not apply the proposal. Implementation: handleConfirmInsert / Update / Delete
Confirmed server action
The server action checks the active session and allowed entity, strips bookkeeping fields from updates, writes the record and checks the result. Bulk inserts can partly succeed. Implementation: chatBulkInsert / chatUpdateRecord
CRM database
The records persist. That persistence is distinct from the bounded, request-scoped agent execution. Implementation: Supabase operations

The assistant handles lookups and prepares the proposal. A person confirms record changes.

05 / Family Watchlist

Find a title and put it on the family list.

Shared household app

Search for a film or show, update a shared watchlist and adjust supported app features through a conversation. The assistant works through the app’s own household tools.

Family Watchlist with a shared movie and TV library organized by watching status
App screenshot
Explore the harness, agents & feedback loopsModel decisions, tools, checks and recovery
ENGINEERING VIEW / Family WatchlistApplication tool agent + usage accounting
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
Family Watchlist: harness and model architecture The server builds household context and exposes supported app tools. The model chooses an operation, the handler checks its inputs and scope, and the result or error returns to the next model turn. Usage is settled separately. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. request context + tools tool request dispatch invalid arguments → error read / write result / error next decision settle usage, including interrupted responses report / retry reply / limit SERVER HARNESS · authenticated, household-scoped tool execution The user requests a supported title or customization operation inside the shared application. HUMAN / REVIEWHousehold request Search · add · update The server streams text and tool events. The request ends when the model answers or the loop limit is reached; it is not a persistent agent job. EXIT / RESPONSEStream reply / end 8 model rounds maximum Before a model request, the route checks the session, entitlement, cached credits, rate limit and request structure. Context includes the household and supported app state. HARNESS CODEAccess + context Session · entitlement · credit Household context + tools A single assistant chooses library queries, title operations or supported customization tools. It cannot directly execute an arbitrary database command. AGENT / MODELWatchlist assistant Choose an app tool Read results; decide again The server assembles streamed tool calls, parses their arguments and dispatches known handlers. Invalid arguments and handler errors return as tool results. HARNESS CODETool argument handling Parse arguments Dispatch known operations The request records model usage, including an estimate where final usage is missing. A billing sweep retries reporting work; the upfront credit gate is not an exact ongoing cost cap. HARNESS CODEUsage settlement Record cost / abort estimate Retry billing reports The tool response is appended to model messages. Streaming activity also reaches the browser, while the model can choose another operation within the round limit. HARNESS CODETool observations Result or handler error Next model decision Title creation and update validate expected fields. Applicable record lookups and mutations use the signed-in household. Writes and deletes can run without a separate preview approval. TOOL / SYSTEMScoped app handlers Record schema checks Household title operations Usage and retry information persist separately from the request-scoped model loop. Reporting retries do not mean the user task itself resumes after a crash. PERSISTED STATEUsage + billing state Local ledger · Stripe reporting Handlers read and update the household library and can obtain title search/detail results. Application data persists beyond the request. PERSISTED STATEApp records + search Household library External title metadata

A bounded request loop; writes can execute directly through validated application handlers.

CONTROL ARCHITECTURE

How the system stays in control

The server builds household context and exposes supported app tools. The model chooses an operation, the handler checks its inputs and scope, and the result or error returns to the next model turn. Usage is settled separately.

Evidence to inspectRequest gates · household-scoped title operations · credit-accounting testsRead the tests ↗

Engineering boundary: There is no separate approval preview for every write. The eight-round limit bounds execution, not task success or exact in-flight spend.

Read the components and code references
Household request
The user requests a supported title or customization operation inside the shared application. POST /api/chat
Stream reply / end
The server streams text and tool events. The request ends when the model answers or the loop limit is reached; it is not a persistent agent job. MAX_LOOPS / SSE stream
Access + context
Before a model request, the route checks the session, entitlement, cached credits, rate limit and request structure. Context includes the household and supported app state. POST gates / systemPrompt
Watchlist assistant
A single assistant chooses library queries, title operations or supported customization tools. It cannot directly execute an arbitrary database command. streamed tool-call loop
Tool argument handling
The server assembles streamed tool calls, parses their arguments and dispatches known handlers. Invalid arguments and handler errors return as tool results. runTool
Usage settlement
The request records model usage, including an estimate where final usage is missing. A billing sweep retries reporting work; the upfront credit gate is not an exact ongoing cost cap. recordUsage / sweepAiBilling
Tool observations
The tool response is appended to model messages. Streaming activity also reaches the browser, while the model can choose another operation within the round limit. tool result messages
Scoped app handlers
Title creation and update validate expected fields. Applicable record lookups and mutations use the signed-in household. Writes and deletes can run without a separate preview approval. create / update / delete title
Usage + billing state
Usage and retry information persist separately from the request-scoped model loop. Reporting retries do not mean the user task itself resumes after a crash. usage ledger / meter events
App records + search
Handlers read and update the household library and can obtain title search/detail results. Application data persists beyond the request. title tools

Record tools can save or delete directly during a chat. There is no separate approval preview for every change.

06 / Newsletter Creator

Turn chosen sources into a newsletter draft.

Desktop app

Gather articles, draft an edition and revise the sections that need work. Export an editable Mailchimp draft for final review, with the source material close at hand.

Newsletter Creator editing a newsletter beside its live preview
App screenshot
Explore the AI workflow architectureModel roles, checks, revision and delivery
ENGINEERING VIEW / Newsletter CreatorEditor-directed model pipeline + export verification
Open full-size
Call / controlResult / error feedbackState / persistenceScroll sideways to inspect the diagram
Newsletter Creator: harness and model architecture The application gathers sources, budgets model context and validates structured drafts. The editor requests revisions. Export tracks campaign/image IDs and reads Mailchimp content back to verify the saved draft. Orange arrows return feedback. Dashed blue arrows represent state and persistence. Inspectable components have matching text descriptions below. fetch editor starts gather candidate links selected articles model output valid blocks / error editor-requested rewrite queue / cancel serialized inference export click save issue checkpoint / retry create / update draft read back + verify content ELECTRON APPLICATION HARNESS · user-triggered, fixed stages The editor configures sources. Gathering extracts material, normalizes links and retains successful sources even when another source fails. TOOL / SYSTEMChosen source material RSS feeds + webpages The editor chooses which stage to run and reviews the issue. Those choices initiate handlers; a general autonomous agent does not decide the whole pipeline. HUMAN / REVIEWEditor + issue profile Audience · tone · source choices Application code fetches feeds/pages, extracts source text and records full-text or excerpt coverage. HARNESS CODEFetch + normalize Extract article text Deduplicate / coverage notes A model can select relevant links from a bounded list of HTML candidates. This stage does not grant arbitrary browsing or action authority. MODEL ROLESelection role Choose candidate links Bounded source list The writer receives selected articles and the newsletter profile, then returns structured blocks. Prompts tell it to treat source material as content, not instructions. MODEL ROLEWriting role Budgeted source excerpts Structured newsletter blocks The job manager serializes inference and supports progress and cancellation. It is not a saved autonomous scheduler that resumes every interrupted generation. HARNESS CODEJob control In-memory queue Serialize / cancel / progress The editor can edit or request a rewrite and then export. Invalid output returns an error; it does not silently become a self-directed repair loop. HUMAN / REVIEWEditor review Edit blocks / request rewrite Choose export Checks reject invalid block structures, unknown source identifiers and oversized single-block rewrites. Known identifiers do not prove a sentence is supported by the source. HARNESS CODEOutput validation Parse structured blocks Known citation IDs Saved issue and export records are separate from the active in-memory job. Campaign and uploaded-image identifiers are reused on retry. PERSISTED STATEExport checkpoints Draft / campaign / image IDs The adapter checkpoints destination identifiers, recovers uncertain campaign creation where possible, and reads saved content back to verify it. No send/schedule endpoint is used. HARNESS CODEMailchimp adapter Create or reuse draft Read back content The finished integration result is a Mailchimp draft. A separate action outside this application sends or schedules delivery. TOOL / SYSTEMMailchimp draft Editable campaign No subscriber send

Models select and write within scheduled stages; no autonomous tool-selection agent loop.

CONTROL ARCHITECTURE

How the system stays in control

The application gathers sources, budgets model context and validates structured drafts. The editor requests revisions. Export tracks campaign/image IDs and reads Mailchimp content back to verify the saved draft.

Evidence to inspectKnown-source ID checks · no silent cloud fallback tests · export retry / readback testsRead the tests ↗

Engineering boundary: Source-ID validation does not establish factual accuracy. Active generation jobs are in memory; export checkpoints persist. Subscriber delivery is outside this app.

Read the components and code references
Chosen source material
The editor configures sources. Gathering extracts material, normalizes links and retains successful sources even when another source fails. gather
Editor + issue profile
The editor chooses which stage to run and reviews the issue. Those choices initiate handlers; a general autonomous agent does not decide the whole pipeline. handlers
Fetch + normalize
Application code fetches feeds/pages, extracts source text and records full-text or excerpt coverage. gather
Selection role
A model can select relevant links from a bounded list of HTML candidates. This stage does not grant arbitrary browsing or action authority. provider.complete
Writing role
The writer receives selected articles and the newsletter profile, then returns structured blocks. Prompts tell it to treat source material as content, not instructions. generateCopy
Job control
The job manager serializes inference and supports progress and cancellation. It is not a saved autonomous scheduler that resumes every interrupted generation. Jobs
Editor review
The editor can edit or request a rewrite and then export. Invalid output returns an error; it does not silently become a self-directed repair loop. generate / rewrite / export handlers
Output validation
Checks reject invalid block structures, unknown source identifiers and oversized single-block rewrites. Known identifiers do not prove a sentence is supported by the source. generateCopy post-checks
Export checkpoints
Saved issue and export records are separate from the active in-memory job. Campaign and uploaded-image identifiers are reused on retry. exportState
Mailchimp adapter
The adapter checkpoints destination identifiers, recovers uncertain campaign creation where possible, and reads saved content back to verify it. No send/schedule endpoint is used. exportMailchimp
Mailchimp draft
The finished integration result is a Mailchimp draft. A separate action outside this application sends or schedules delivery. Mailchimp export integration test

Export creates a Mailchimp draft. The application does not send or schedule subscriber delivery.

What work would you like off your plate?

These projects demonstrate implementation patterns. We scope and test your business workflow separately, then measure the result.

Discuss one task
Vincent Serpico
VINCENT SERPICOPHOENIX, AZ

Who you'll work with

I lead the work, and I write the code.

I taught myself to code at 14. I started Founders Workshop, grew it into a 30-person development company and sold it in 2026. For 16 years we built software for small and mid-sized businesses.

I built the products on this page with AI assisting the development, and I review and test every change. I stay hands-on in every project, from understanding the work to checking the finished result.

Michael Herman

Michael Herman

President

Michael has 30 years in solving digital problems for large brands, non-profits, startups, and small businesses, and has mentored startups since 2015.

Andrea Ramirez

Andrea Ramirez

VP of Operations

Andrea leads operations, process and coordination at Serpico AI. She brings more than 10 years of experience in operations and people management.

The team

Brought into a project when it needs their industry or specialty.

  • Daniel Love
  • Lynne Gabrielson
  • Ian Gatzke
  • Alexander Foster
  • Sabrina Valdez
  • David Rice
  • Lakshya Gupta
  • Kathleen Celmins
  • Alex Koupal

Practical questions

Before we talk.

Do I need to understand AI?

No. Bring one repetitive task and explain how your team handles it today. I'll work through the technical choices with you and explain what the workflow can do, where it needs review and what it will cost to run.

Will it work with our existing tools?

We check that before agreeing on a build. We look at how your email, spreadsheets and business systems can share information, what access is available and where your team will review the work.

What happens when it gets something wrong?

Checks flag missing information and results that break your rules. They cannot catch every mistake. During the pilot, your team reviews the outputs, we record corrections and we agree which actions must always wait for approval.

How do we know it's worth continuing?

We record the starting workload, errors and time spent, then compare the pilot with that baseline. Review and correction time count too. We agree on the measures before building and use the results to decide whether to continue.

What if our data has to stay private?

We'll review your contractual, security and data-handling requirements before choosing an approach. If your work requires processing on your own machines or offline, we can scope that separately, including hardware and support needs.

Who actually builds and supports it?

I lead the work and write the code. Michael and Andrea keep the company running, and the team contributes where a project needs their expertise. Before launch, we agree on support, ongoing costs and who handles exceptions.

Start with one task

What keeps taking your team away from customers?

Tell me about the repetitive work you'd like to reduce. A few sentences are enough. Your message comes straight to me, and we'll discuss whether it's worth automating.

Prefer LinkedIn? Message me there ↗

Your details are used only to reply to you.