---
title: "PulseDev: Visual Feedback for AI Coding Agents | FelixWeb"
description: "Our studio overview of PulseDev, a Mac app that lets you click any element on your local site and have Claude Code, Codex, Gemini CLI or OpenCode fix it, with nothing written until you approve the diff. Free to start."
canonical_url: "https://felixweb.site/apps/pulsedev"
meta:
  "og:description": "Our studio overview of PulseDev, a Mac app that lets you click any element on your local site and have Claude Code, Codex, Gemini CLI or OpenCode fix it, with nothing written until you approve the diff. Free to start."
  "og:image": "https://felixweb.site/og/default.png"
  "og:image:alt": "PulseDev: point at your site, approve the fix"
  "og:image:height": "630"
  "og:image:width": "1200"
  "og:title": "PulseDev: Visual Feedback for AI Coding Agents"
  "twitter:image": "https://felixweb.site/og/default.png"
---

> Index of every page on this site: [llms.txt](https://felixweb.site/llms.txt)

**Mac app · visual feedback for AI coding agents **

![PulseDev app icon](https://felixweb.site/images/icon-pulsedev.webp)

# **PulseDev lets you point at your site and approve the fix**

Click any element on your running site and say what’s wrong. Claude Code, Codex, Gemini or OpenCode edits the real source, and nothing touches your files until you approve the diff.

[**Download for Apple silicon** (opens in new tab) (opens in new tab)](https://cdn.pulsedev.app/latest/PulseDev_aarch64.dmg) [** Get Pro — **~~Was $18~~now **$12/mo **(opens in new tab)](https://pulsedev.app)

**macOS on Apple silicon & Intel · Free to start · Uses the agent plan you already pay for · No PulseDev cloud · On Intel? **[Download for Intel](https://cdn.pulsedev.app/latest/PulseDev_x64.dmg)

- **Claude Code**
- **Codex**
- **Gemini CLI**
- **OpenCode**

localhost:3000/

**1**Start the server**2**Point at the headline**3**Describe the change**4**Claude Code edits the source**5**Next fix: drop the arrow**6**Scroll on, fix a product badge**7**Open the task board**8**Review the diff, approve

Rooms thatfeel like home.

Shop the saleExplore lookbook

−24%**h1.hero\_\_title**457 × 128**a.btn.btn--light**172 × 48**span.badge.badge--sale**42 × 22

.hero\_\_copy > h1.hero\_\_title

Change the headline to “Rooms that feel like home.”

Shift+ click to add more⌘↵send

Claude CodeAuto-applySend

.hero\_\_actions > a.btn.btn--light

Drop the arrow, the label is enough.

Shift+ click to add more⌘↵send

Claude CodeAuto-applySend

.product-card > span.badge.badge--sale

Show the real discount here, like the sofa card.

Shift+ click to add more⌘↵send

Claude CodeAuto-applySend

**Claude Code**This page

Change the headline to “Rooms that feel like home.”

Editing Review`components/home/HeroBanner.vue`

Drop the arrow, the label is enough.

Editing Review`components/home/HeroBanner.vue`

Show the real discount here, like the sofa card.

Editing Review`components/product/ProductCard.vue`

**Activity**4

Filter annotations

This pageAll pagesClosed

Show the real discount here, like the sofa card.

Review`span.badge--sale`now

Drop the arrow, the label is enough.

Review`a.btn--light`19s

Change the headline to “Rooms that feel like home.”

Review Done`h1.hero__title`29s

Fix the broken Lighting link in the mega nav.

Done`nav a[href='/lighting']`1h

Connected `:3899`

Show the real discount here, like the sofa card.

Reviewnow Claude Code

Show the real discount here, like the sofa card.

you · now

The badge printed a hard-coded “Sale”.

It now uses the discount the sofa card already shows.

Claude Code · 6s

Read`components/product/ProductCard.vue`

Read`composables/usePrice.ts`

Edit`components/product/ProductCard.vue`+1 −1

**Changes to review***+1* *−1*

components/product/ProductCard.vue

\<span v-if="onSale" class="badge badge--sale">

*−* Sale

*\+* −{{ discount }}%

\</span>

Approve Reject

Change the headline to “Rooms that feel like home.”

Review Done29s Claude Code

Change the headline to “Rooms that feel like home.”

you · 29s

The headline is hard-coded in HeroBanner.vue.

Swapped the copy and kept the line break.

Claude Code · 9s

Read`components/home/HeroBanner.vue`

Edit`components/home/HeroBanner.vue`+1 −1

Run`pnpm exec vue-tsc --noEmit`

**Changes to review***+1* *−1*

components/home/HeroBanner.vue

\<h1 class="hero\_\_title">

*−* Slow mornings,\<br>warm evenings.

*\+* Rooms that\<br>feel like home.

\</h1>

Approve Approved RejectWritten to HeroBanner.vue

Written to components/home/HeroBanner.vue

**Projects**Search projects⌘K Add project

1 of 3 servers running.2 of 3 servers running. 1 change waits for your review.

14 changes shipped across 2 projects this week, about 3h 20m of hand edits saved.

ProjectServerAgentLast 7 daysTasksUpdated

HH**hearth-store**`~/code/hearth-store`Stopped StartingRunning `:3899` Claude CodeQueue clear`Yesterday`

L**lumen-docs**`~/code/lumen-docs`Running `:4752` Codex1 review`3h`

A**atlas-checkout**`~/work/atlas-checkout`StoppedNone yetNo open tasks`5d`

**Add a project folder**Press ⌘N or click to choose a folder. PulseDev picks a free port and starts the server.

**Start server**

Confirm the port before the server starts.

Project folder \~/code/hearth-store

Port3899

Cancel Start

**WHY WE BUILT IT**

## **Feedback that lands on the element**

PulseDev is made by FelixWeb, a London studio building useful apps for everyday Mac life.

Telling a coding agent what’s wrong with a page usually means screenshots and long descriptions. We wanted to click the element, say what it should be and approve the diff, with the agent we already use and nothing leaving the machine.

- ### **Made in London**

  Built and supported by FelixWeb in London.
- ### **No PulseDev cloud**

  Tasks, messages and diffs live as JSON files in \~/PulseDev on your machine.
- ### **Your agent, your plan**

  It calls the Claude Code, Codex, Gemini CLI or OpenCode you already pay for. No extra tokens.

**ONE LOOP**

## **Point, describe,**<br>**approve.**

No screenshots pasted into Slack, no ticket that says “the button looks off”. Feedback lands on the element itself, selector and page attached, so the agent opens the right file first time.

1. ### **Point at the thing that’s wrong**

   Turn on Inspect and hover your page. Each element is outlined with its selector and size, so you click the exact button, not a screenshot of it.localhost:3000/**h2.section\_\_title**175 × 39**button.btn.btn--primary**119 × 34**button.btn.btn--outline**119 × 34ShiftInspect mode: click an element1 selected · Shift-click to add2 selected Pick
2. ### **Say what it should be**

   Write the change in plain words next to the element. The selector, page and viewport go along with it, and you choose which agent picks it up.localhost:3000/**button.btn.btn--outline**119 × 34.product-card > button.btn.btn--outline+1

   This Add to cart is outlined, the Alder one is solid.

   Use the dark primary button on every product card.Shift+ click to add more⌘↵send Claude CodeAuto-applySend  Sent Claude Code Codex Gemini CLI OpenCode
3. ### **Review it on the page, then approve**

   The agent edits your source and the change shows up live. Approve writes it to your files, Reject rolls it back, or reply to iterate.localhost:3000/ Add to cart Add to cart Add to cart Add to cart Add to cart Add to cart Add to cart**Activity**

   This Add to cart is outlined, the Alder one is solid. Use the dark primary button on every product card. Editing Review Done Claude Code1 change

   Cards only got the primary button when featured.

   Removed that check, so every card uses it now.

   Claude Code · 12s**Changes to review***+2* *−2* components/product/ProductCard.vue

   *−* :variant="featured ? 'primary' : 'outline'"

   *\+* variant="primary"

   *−* :class="{ 'card\_\_cta--ghost': !featured }"

   *\+* class="card\_\_cta" Approve Approved RejectWritten to ProductCard.vue

**THE TOUR**

## **See every file it touches, while it touches them**

localhost:3000/

**Activity***3**4*

Filter annotations

This pageAll pagesClosed

Search placeholder gets cut off at tablet widths.

Queued`input.search__field`now

Make every Add to cart match the dark one on the Alder card.

Editing ProductCard.vue Review`button.btn--outline`now

Sale price red fails contrast on the sand promo cards.

Review`span.price--sale`8m

Show the free-delivery threshold in the cart drawer.

Queued`aside.cart-drawer`9m

Fix the broken Lighting link in the mega nav.

Done`nav a[href='/lighting']`1h

Connected `:3899`

Make every Add to cart match the dark one on the Alder card.

Editing ProductCard.vue Review48s Claude Code Cancel Review diff

Make every Add to cart match the dark one on the Alder card.

you · 1m

Product cards render through components/product/ProductCard.vue. The button variant comes from item.featured, and only the sofa is featured.

Claude Code · 42s

Read`components/product/ProductCard.vue`

Read`components/ui/AppButton.vue`

Edit`components/product/ProductCard.vue`+1 −1

Edit`components/product/ProductCard.vue`+1 −1

Setting variant="primary" on every card and dropping the

card\_\_cta--ghost class, so all cards share one button style.

streaming

**Claude Code is working**+1 −1+2 −2**View full log ****Ready for review**+2 −2**View full log **

- ### **Live log**

  Every Read, Edit and command, streamed from the agent as it runs. Stop it mid-run or reply to steer it.
- ### **Task board**

  Queued, running, in review, done. Per page or across the whole site.
- ### **Heads-up**

  A sound and a toast when a fix is ready, so you can keep working.
- ### **Your own browser**

  Works where you already test, including pages behind your login.
- ### **Any stack**

  Vue, React, Svelte or plain HTML. One script tag, and the Vite plugin only runs in dev.
- ### **Nothing to host**

  Tasks, messages and diffs live as JSON files in \~/PulseDev on your machine.

PulseDev

Projects*4* Activity*3* Settings

Local servers*2 up**3 up*

hearth-store`:3899`lumen-docs`:4752` field-notes `off``starting``:4761`atlas-checkout`off`

**PRO**Unlimited projects

`sam@hearthandco.com`

**hearth-store**Running`:3899` Claude Code Copy token Copy embed Stop

All *12*Open *3**2*Done *8**9*Failed *1*

Make every Add to cart match the dark one on the Alder card.

Editing Review Done`/`now

Sale price red fails contrast on the sand promo cards.

Review`/`6m

Show the free-delivery threshold in the cart drawer.

Queued`/cart`9m

Hero headline should break after “mornings,”.

Done`/`1h

Fix the broken Lighting link in the mega nav.

Done`/`3h

Product photos look blurry on retina screens.

Failed`/products`Yesterday

Raise the contrast of muted text in the reviews band.

Done`/`Yesterday

Editing Review DoneHigh priorityOpened 4 min ago by you

### This Add to cart is outlined, the Alder one is solid. Use the dark primary button on every product card.

localhost:3000/.product-card > button.btn.btn--outline 1440 × 844

**Agent activity**`Claude Code · 1m 12s`

**Located the element**`ProductCard.vue renders .product-card .btn`

14:02:41

**Compared with the Alder card**`Only featured products get variant="primary", the rest get outline`

14:02:44

**Edited components/product/ProductCard.vue**`Always use the primary variant, removed .card__cta--ghost`

14:02:52

**Type-checking**`pnpm exec vue-tsc --noEmit`

14:02:58

**Changes**`1 file *+2* *−2*`

components/product/ProductCard.vueOpen in editor

*41* \<AppButton

*42**−* :variant="featured ? 'primary' : 'outline'"

*42**+* variant="primary"

*43**−* :class="{ 'card\_\_cta--ghost': !featured }"

*43**+* class="card\_\_cta"

*44* @click="addToCart(product)">

Reply to Claude, e.g. “keep the outline on hover”Reject Approve Approved

Agent runningReview the changeApprove the changeStart another site

**DESKTOP APP**

## **One app for every site you run**

Each project gets its own local server, port and agent. Start or stop them from the sidebar, and keep the full history of what changed and why.

- **Claude Code**
- **Codex**
- **Gemini CLI**
- **OpenCode**

**PRICING**

## **Free to start. Cheap to keep.**

No seats, no credits. You already pay for the agent; PulseDev is the layer on top.

- ### **Free****Forever**

  $0

  **Everything works. One site at a time.**
  - **1 project**
  - **1 agent of your choice**
  - **Unlimited agent runs**
  - **Widget, board and diff review**[**Download free** (opens in new tab)](https://cdn.pulsedev.app/latest/PulseDev_aarch64.dmg)
- ### **Pro****Launch price**

  ~~Was $18~~now $12

  **Per month · yearly saves 33% · 5-day free trial, cancel anytime**
  - **Unlimited projects**
  - **Every supported agent**
  - **Unlimited agent runs**
  - **Several local servers at once**[**Get Pro — $12/mo** (opens in new tab)](https://pulsedev.app)
- ### **Founder Lifetime****First 200 only**

  $149

  **Once · pay once and keep it**
  - **Everything in Pro**
  - **No subscription**
  - **One person, your own machines**[**Buy lifetime** (opens in new tab)](https://pulsedev.app)

One licence per person, activated in the desktop app. $12/mo is a launch price: lock it in before 3 November 2026, regular price $18/mo. Founder Lifetime is limited to the first 200 buyers.

**FAQ**

## **A few quick answers**

###

Claude Code, Codex, Gemini CLI and OpenCode. PulseDev calls the one you already pay for, with your own login, so there are no extra tokens.

###

No. The agent’s change shows up on the page with its diff. Approve writes it to your files, Reject rolls it back.

###

No. PulseDev is a small server on localhost and one script tag. Tasks, messages and diffs live as JSON files in \~/PulseDev on your machine.

###

Any site you run locally: Vue, React, Svelte or plain HTML. The Vite plugin only runs in dev. For plain HTML, remove the tag before you deploy.

###

macOS on Apple silicon and Intel. Windows is coming soon.

###

Yes. Pro is $12 a month at the launch price, then $18, and yearly saves 33%. Founder Lifetime is $149 once for the first 200 buyers. The Free plan stays free for one project.

## **Stop writing bug reports. Head to the PulseDev site.**

Downloads, docs and the changelog live at pulsedev.app. Start free on one site, or try Pro for 5 days at the $12/mo launch price.

[**Download for Mac** (opens in new tab) (opens in new tab)](https://cdn.pulsedev.app/latest/PulseDev_aarch64.dmg) [** Visit pulsedev.app** (opens in new tab) (opens in new tab)](https://pulsedev.app)

**macOS on Apple silicon & Intel · Windows coming soon · No PulseDev cloud**

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://felixweb.site/#website","@type":"WebSite","description":"FelixWeb is a tiny indie studio making lucky little Mac apps: CopyPulse, Haptiker, HyperMonitor, PulseDev, PulseShot and PulseTiles.","inLanguage":"en-GB","name":"FelixWeb","url":"https://felixweb.site","publisher":{"@id":"https://felixweb.site/#organization"}},{"@id":"https://felixweb.site/apps/pulsedev#webpage","@type":"WebPage","description":"Our studio overview of PulseDev, a Mac app that lets you click any element on your local site and have Claude Code, Codex, Gemini CLI or OpenCode fix it, with nothing written until you approve the diff. Free to start.","name":"PulseDev: Visual Feedback for AI Coding Agents","url":"https://felixweb.site/apps/pulsedev","breadcrumb":{"@id":"https://felixweb.site/apps/pulsedev#breadcrumb"},"isPartOf":{"@id":"https://felixweb.site/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://felixweb.site/apps/pulsedev"]}]},{"@id":"https://felixweb.site/#organization","@type":"Organization","email":"hello@felixweb.site","logo":"https://felixweb.site/og/logo.png","name":"FelixWeb","url":"https://felixweb.site","address":{"@type":"PostalAddress","addressLocality":"London","addressCountry":"GB"},"sameAs":["https://haptiker.app","https://hypermonitor.app","https://pulseshot.app","https://pulsedev.app"]},{"@id":"https://felixweb.site/apps/pulsedev#breadcrumb","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","name":"Home","item":"https://felixweb.site","position":1},{"@type":"ListItem","name":"Apps","item":"https://felixweb.site/apps","position":2},{"@type":"ListItem","name":"PulseDev","item":"https://felixweb.site/apps/pulsedev","position":3}]},{"@id":"https://felixweb.site/apps/pulsedev#/schema/software-application/1","@type":"SoftwareApplication","applicationCategory":"DeveloperApplication","description":"Our studio overview of PulseDev, a Mac app that lets you click any element on your local site and have Claude Code, Codex, Gemini CLI or OpenCode fix it, with nothing written until you approve the diff. Free to start.","name":"PulseDev","operatingSystem":"macOS","url":"https://pulsedev.app","image":{"@id":"https://felixweb.site/#/schema/image/1"},"offers":[{"@type":"Offer","availability":"https://schema.org/InStock","name":"Free","price":0,"priceCurrency":"USD","url":"https://pulsedev.app","priceValidUntil":"2027-12-30T00:00:00.000Z"},{"@type":"Offer","availability":"https://schema.org/InStock","name":"Pro","price":12,"priceCurrency":"USD","url":"https://pulsedev.app","priceValidUntil":"2027-12-30T00:00:00.000Z"},{"@type":"Offer","availability":"https://schema.org/InStock","name":"Founder Lifetime","price":149,"priceCurrency":"USD","url":"https://pulsedev.app","priceValidUntil":"2027-12-30T00:00:00.000Z"}],"publisher":{"@id":"https://felixweb.site/#organization"}},{"@id":"https://felixweb.site/apps/pulsedev#/schema/faqpage/1","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Which coding agents does it work with?","acceptedAnswer":{"@type":"Answer","text":"Claude Code, Codex, Gemini CLI and OpenCode. PulseDev calls the one you already pay for, with your own login, so there are no extra tokens."}},{"@type":"Question","name":"Will it change my files without asking?","acceptedAnswer":{"@type":"Answer","text":"No. The agent’s change shows up on the page with its diff. Approve writes it to your files, Reject rolls it back."}},{"@type":"Question","name":"Does anything go to a PulseDev cloud?","acceptedAnswer":{"@type":"Answer","text":"No. PulseDev is a small server on localhost and one script tag. Tasks, messages and diffs live as JSON files in ~/PulseDev on your machine."}},{"@type":"Question","name":"Which sites does it work on?","acceptedAnswer":{"@type":"Answer","text":"Any site you run locally: Vue, React, Svelte or plain HTML. The Vite plugin only runs in dev. For plain HTML, remove the tag before you deploy."}},{"@type":"Question","name":"What does it run on?","acceptedAnswer":{"@type":"Answer","text":"macOS on Apple silicon and Intel. Windows is coming soon."}},{"@type":"Question","name":"Is Pro a subscription?","acceptedAnswer":{"@type":"Answer","text":"Yes. Pro is $12 a month at the launch price, then $18, and yearly saves 33%. Founder Lifetime is $149 once for the first 200 buyers. The Free plan stays free for one project."}}]},{"@id":"https://felixweb.site/#/schema/image/1","@type":"ImageObject","contentUrl":"https://felixweb.site/images/pd-inspect.webp","inLanguage":"en-GB","url":"https://felixweb.site/images/pd-inspect.webp"}]}
```

## Sitemap

See the full [sitemap](https://felixweb.site/sitemap.md) for all pages.
