Project/version review loop CLI and agent skill for AI artifacts
Project description
floop-client
AI artifacts need review. floop-client is the review-loop CLI that connects fppt decks and fdesign prototypes to floop-server for structured feedback — without touching artifact internals.
The Problem: The "Screenshot Ping-Pong" Trap
You built a beautiful prototype with fdesign or a polished deck with fppt. Now you need feedback from your team, your client, or your stakeholders. What happens next?
Screenshots in Slack. PDFs over email. "Can you make the button bluer?" scattered across three different threads. Feedback arrives out of context, untethered from the specific page or component it references. You spend more time chasing down what people meant than actually improving the artifact.
Why does this happen? AI tools are great at building artifacts, but they have no built-in mechanism for reviewing them. Every team cobbles together their own ad-hoc feedback loop — and every loop leaks context.
WITHOUT floop-client
Build v1 → Screenshot → Slack → "Looks good but..." → Where was this?
Build v2 → PDF export → Email → "Change the header" → Which page?
Build v3 → Loom video → Notion → "The spacing is off" → Which component?
Result: Feedback is everywhere and nowhere. Context is lost.
WITH floop-client
Build v1 → floop review upload → shareUrl → Reviewers comment inline
Fixes → Build v2 → floop review upload → New shareUrl
Comments → floop comments → Route to fppt/fdesign → Fix & resolve
Result: Every comment is anchored to a version, a page, and a DOM element.
What floop-client Does
floop-client is the review-loop layer between your AI-built artifacts and your reviewers. It does not build decks or prototypes — it creates version containers, uploads them to floop-server, fetches structured comments, and resolves them after fixes.
It is intentionally artifact-agnostic. fppt owns presentation logic. fdesign owns prototype logic. floop-client owns the review pipeline.
flowchart LR
subgraph "Build"
fppt["fppt<br/>Decks"]
fdesign["fdesign<br/>Prototypes"]
end
subgraph "Review Loop"
floop["floop-client<br/>Projects · Versions · Upload · Comments"]
end
subgraph "Server"
server["floop-server<br/>Review UI · Comment Threads"]
end
fppt -->|"copies build into version"| floop
fdesign -->|"copies build into version"| floop
floop -->|"upload"| server
server -->|"comments"| floop
floop -->|"route fixes"| fppt
floop -->|"route fixes"| fdesign
style floop fill:#e8f4fd,stroke:#2563EB,stroke-width:2px
Why floop-client
For Makers & Founders
You ship fast. Feedback shouldn't slow you down.
Stop juggling screenshots and Slack threads. Publish a version with one command, share a single link, and get structured, anchored feedback that tells you exactly which page and element each comment refers to.
For Teams (Designers & Developers)
Review cycles need structure, not chaos.
Every comment carries a priority, labels (bug, copy, layout, responsive, accessibility), and a DOM anchor. No more "the button on that one page" — reviewers click, comment, and the context travels with the feedback. After fixes, resolve comments to close the loop.
Use Cases
Scenario 1: Client Review Round
Problem: You built a prototype with fdesign. The client wants to review it. You export screenshots, paste them into a Google Doc, and wait. Three days later, you get back 47 comments — half of them referencing "the blue section" on "that page."
floop-client Solution: Run floop review upload --project my-app --version v1. Share the shareUrl. The client clicks through the prototype on floop-server, clicks any element, and leaves anchored comments. You run floop comments to fetch them all, grouped by page and priority.
Scenario 2: Deck Stakeholder Approval
Problem: You built a presentation with fppt. Marketing, Legal, and the CEO all need to sign off. Each sends feedback in a different format. You spend hours consolidating.
floop-client Solution: One shareUrl for all stakeholders. Comments are threaded, labeled, and anchored to specific slides. Legal flags get a legal label. Marketing feedback gets copy. You address them, publish v2, and resolve each comment — full audit trail.
Scenario 3: Continuous Iteration
Problem: You're iterating fast with AI. Every build is a new version. You need to track what changed, what was reviewed, and what's still open — across multiple versions.
floop-client Solution: Each version is independent with its own comment thread. floop comments --version-id <id> fetches feedback for a specific version. Reviewers can compare versions side-by-side on floop-server. Nothing falls through the cracks.
Features
- Local Version Containers: Create named projects and versions under
.floop/— artifact services copy their build output in. - One-Command Upload:
floop review uploadzips and publishes a version to floop-server, returning ashareUrl. - Structured Comments: Fetch anchored, labeled, prioritized feedback — every comment knows its page, element, and viewport.
- Comment Resolution:
floop resolvemarks feedback as addressed after fixes are published. - Local Preview:
floop previewserves version directories locally for quick inspection before upload. - Multi-Agent Support: Install skills into 7 AI agent platforms with
floop enable.
Responsibility Boundary
floop-client is intentionally boring. It should remain artifact-agnostic.
| Owned by floop-client | Owned by fppt / fdesign |
|---|---|
.floop/ workspace |
.fppt/ deck workspace |
| Project & version containers | .fdesign/ prototype workspace |
floop review upload |
Deck YAML validation |
floop comments |
Design token validation |
floop resolve |
Component & sitemap logic |
floop preview |
Theme systems |
| Server project binding | Artifact build output |
Supported Agents
| Agent | Command |
|---|---|
| GitHub Copilot | floop enable copilot |
| Cursor | floop enable cursor |
| Claude Code | floop enable claude |
| Trae IDE | floop enable trae |
| Qwen Code | floop enable qwen-code |
| OpenCode | floop enable opencode |
| OpenClaw | floop enable openclaw |
Installation
pip install floop
Verify:
floop --version
Quick Start
# 1. Initialize workspace
cd your-project
floop init
# 2. Install skills into your AI agent
floop enable copilot # or: cursor, claude, trae, qwen-code, opencode, openclaw
# 3. Create a local project and version
floop projects create my-review
floop versions create v1 --project my-review --artifact-type fdesign --entrypoint index.html
# 4. Let fppt/fdesign copy artifact files into the version directory
# (your AI agent handles this automatically)
# 5. Configure review server and upload
floop review set --project my-review
floop review upload --project my-review --version v1 --json-output
# → shareUrl: https://floop-server.vercel.app/review/...
# 6. Share the link with reviewers, then fetch comments
floop comments --project my-review --version-id <server-version-id> --json-output
# 7. After fixes are published, resolve addressed comments
floop resolve <comment-id> --project my-review --version-id <server-version-id> --status resolved
Workspace
.floop/
├─ floop.env # Server URL + API key (no project key)
├─ config.json # Workspace metadata
└─ projects/
└─ <project>/
├─ project.json # Local metadata + serverProject binding
└─ versions/
└─ <version>/
├─ version.json
└─ ...artifact files copied by fppt/fdesign...
Review Loop
┌── Build ──→ Version Container ──→ Upload ──→ Share ──→ Comments ──→ Fix ──┐
│ │
└───────────────────────────────────────────────────────────────────────────┘
- Artifact service (fppt/fdesign) builds and checks its output.
- Agent creates a local floop project/version container.
- Agent verifies the local project has the correct
serverProjectbinding. - If missing, agent runs
floop review set --project <project>. - Artifact service copies its build output into the version directory.
floop review uploadzips and uploads to floop-server.- Agent shares
shareUrlwith the user. - Agent fetches comments with
floop comments. - Agent routes fixes to fppt, fdesign, or floop-client.
- After a fixed version is uploaded, agent resolves addressed comments.
For Contributors
floop-client is the review-loop layer in the floop ecosystem. We welcome contributors who want to expand agent platform support or harden the upload/comment pipeline.
Getting Started
# 1. Fork and clone the repository
git clone https://github.com/lijma/floop-client.git
cd floop-client
# 2. Install inside a virtual environment for development
pip install -e ".[test]"
# 3. Run the test suite (floop-client maintains 100% coverage)
pytest --cov=floop --cov-report=term-missing --cov-fail-under=100
# 4. Want to add a new AI Agent to `floop enable`?
# Add yours directly in: src/floop/adapters.py
Star History
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file floop-2.0.0.tar.gz.
File metadata
- Download URL: floop-2.0.0.tar.gz
- Upload date:
- Size: 32.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c56aac217bfa533bcabc99965c528e355408961a9995be06c44422d527357257
|
|
| MD5 |
01ca0a2a1457582d9b5f61194be9b88d
|
|
| BLAKE2b-256 |
fdb3f7e77d30825d02bd6f61ad116bb0d89f9433be6ebd201e1e611081a281a7
|
Provenance
The following attestation bundles were made for floop-2.0.0.tar.gz:
Publisher:
release.yml on lijma/floop-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
floop-2.0.0.tar.gz -
Subject digest:
c56aac217bfa533bcabc99965c528e355408961a9995be06c44422d527357257 - Sigstore transparency entry: 2080423343
- Sigstore integration time:
-
Permalink:
lijma/floop-client@e1f1b2c3924a7d20191e42b3b53a5cd0177e281c -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/lijma
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e1f1b2c3924a7d20191e42b3b53a5cd0177e281c -
Trigger Event:
push
-
Statement type:
File details
Details for the file floop-2.0.0-py3-none-any.whl.
File metadata
- Download URL: floop-2.0.0-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98430eba19e01bb0d7e53b418eee453f0960161de50bdae4b42d6a7495d38788
|
|
| MD5 |
82a21d3140cda88d5b6c4c1633114148
|
|
| BLAKE2b-256 |
b072043d88f10804738f8f2046765ab244f1b0b9901d6c3f5b7c1782a9e7dee5
|
Provenance
The following attestation bundles were made for floop-2.0.0-py3-none-any.whl:
Publisher:
release.yml on lijma/floop-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
floop-2.0.0-py3-none-any.whl -
Subject digest:
98430eba19e01bb0d7e53b418eee453f0960161de50bdae4b42d6a7495d38788 - Sigstore transparency entry: 2080423715
- Sigstore integration time:
-
Permalink:
lijma/floop-client@e1f1b2c3924a7d20191e42b3b53a5cd0177e281c -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/lijma
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e1f1b2c3924a7d20191e42b3b53a5cd0177e281c -
Trigger Event:
push
-
Statement type: