@officexapp/vidfarm-devcli 0.21.45 → 0.21.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.agents/skills/editor-capabilities/SKILL.md +2 -0
  2. package/.agents/skills/vidfarm/SKILL.md +60 -7
  3. package/.agents/skills/vidfarm/harnesses/explainer.HARNESS.md +1 -1
  4. package/.agents/skills/vidfarm/harnesses/product-demo.HARNESS.md +2 -0
  5. package/.agents/skills/vidfarm/harnesses/short-form.HARNESS.md +1 -0
  6. package/.agents/skills/vidfarm/recipes/local-edit-render-approve.md +1 -1
  7. package/.agents/skills/vidfarm/references/agent-included-imagegen.md +75 -0
  8. package/.agents/skills/vidfarm/references/assets-and-sourcing.md +71 -2
  9. package/.agents/skills/vidfarm/references/automation-and-local-dev.md +13 -6
  10. package/.agents/skills/vidfarm/references/browser-harness.md +93 -0
  11. package/.agents/skills/vidfarm/references/editor-workflows.md +22 -0
  12. package/SKILL.director.md +337 -16
  13. package/SKILL.md +45 -4
  14. package/dist/src/cli.js +210 -4
  15. package/dist/src/devcli/agent-imagegen.js +181 -0
  16. package/dist/src/devcli/browser-harness.js +384 -0
  17. package/dist/src/devcli/clip-store.js +41 -3
  18. package/dist/src/devcli/cost-mode.js +23 -3
  19. package/dist/src/devcli/doctor.js +52 -3
  20. package/dist/src/devcli/hyperframes-cli.js +11 -1
  21. package/dist/src/devcli/local-render.js +4 -7
  22. package/dist/src/devcli/marketplace-gigs.js +651 -0
  23. package/dist/src/devcli/qa-check.js +89 -1
  24. package/dist/src/devcli/shared-folder.js +387 -0
  25. package/dist/src/devcli/stills.js +4 -8
  26. package/dist/src/lib/ffprobe-path.js +64 -0
  27. package/dist/src/lib/render-media-prep.js +2 -11
  28. package/dist/src/services/clip-curation/ffmpeg.js +4 -15
  29. package/dist/src/services/clip-curation/local-agent.js +6 -2
  30. package/experiments.md +2 -2
  31. package/marketplace.md +549 -0
  32. package/package.json +21 -10
  33. package/public/assets/file-directory-app.js +34 -34
  34. package/public/serve-shells/library-files.html +5 -1
  35. package/public/serve-shells/library-raws.html +10 -1
  36. package/public/serve-shells/tools-clipper.html +5 -1
  37. package/public/serve-shells/tools-image.html +5 -1
  38. package/public/serve-shells/tools-video.html +5 -1
  39. package/crowdsourcing.md +0 -157
@@ -1440,7 +1440,11 @@ button.rk-clips-thumb{appearance:none;-webkit-appearance:none;border:0;margin:0;
1440
1440
  Marketplace
1441
1441
  <span class="rk-sidebar-market-dot" aria-hidden="true"></span>
1442
1442
  </a>
1443
- <script>(function(){try{var p=new URLSearchParams(location.search);if(p.get('show_marketplace')==='true')localStorage.setItem('vf_show_marketplace','1');if(p.get('show_marketplace')==='true'||localStorage.getItem('vf_show_marketplace')==='1'){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}catch(e){}})();</script>
1443
+ <!-- The Marketplace link is PAID-ONLY. The server decides — this asks the
1444
+ session's own access endpoint, so a free or logged-out visitor never sees
1445
+ the link, and an upgrade shows it on the next page load. It was a
1446
+ localStorage flag before, which any visitor could set for themselves. -->
1447
+ <script>(function(){try{fetch('/api/v1/user/me/marketplace-access',{credentials:'same-origin',headers:{accept:'application/json'}}).then(function(r){return r.ok?r.json():null;}).then(function(j){if(j&&j.marketplace){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}).catch(function(){});}catch(e){}})();</script>
1444
1448
  <div class="rk-sidebar-skill"><div class="vf-skill-install vf-skill-install-nav" data-skill-install>
1445
1449
  <button
1446
1450
  class="vf-skill-install-main"
@@ -1440,7 +1440,11 @@ button.rk-clips-thumb{appearance:none;-webkit-appearance:none;border:0;margin:0;
1440
1440
  Marketplace
1441
1441
  <span class="rk-sidebar-market-dot" aria-hidden="true"></span>
1442
1442
  </a>
1443
- <script>(function(){try{var p=new URLSearchParams(location.search);if(p.get('show_marketplace')==='true')localStorage.setItem('vf_show_marketplace','1');if(p.get('show_marketplace')==='true'||localStorage.getItem('vf_show_marketplace')==='1'){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}catch(e){}})();</script>
1443
+ <!-- The Marketplace link is PAID-ONLY. The server decides — this asks the
1444
+ session's own access endpoint, so a free or logged-out visitor never sees
1445
+ the link, and an upgrade shows it on the next page load. It was a
1446
+ localStorage flag before, which any visitor could set for themselves. -->
1447
+ <script>(function(){try{fetch('/api/v1/user/me/marketplace-access',{credentials:'same-origin',headers:{accept:'application/json'}}).then(function(r){return r.ok?r.json():null;}).then(function(j){if(j&&j.marketplace){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}).catch(function(){});}catch(e){}})();</script>
1444
1448
  <div class="rk-sidebar-skill"><div class="vf-skill-install vf-skill-install-nav" data-skill-install>
1445
1449
  <button
1446
1450
  class="vf-skill-install-main"
@@ -1863,6 +1867,7 @@ button.rk-clips-thumb{appearance:none;-webkit-appearance:none;border:0;margin:0;
1863
1867
  + '<button type="button" class="rk-raws-folder-kebab" data-folder-kebab aria-label="Folder actions" aria-haspopup="true" aria-expanded="false">'+"<svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5\" r=\"1.9\"/><circle cx=\"12\" cy=\"12\" r=\"1.9\"/><circle cx=\"12\" cy=\"19\" r=\"1.9\"/></svg>"+'</button>'
1864
1868
  + '<div class="rk-raws-folder-pop" data-folder-pop hidden role="menu">'
1865
1869
  + '<button type="button" role="menuitem" data-folder-rename="'+attr(folder.id)+'">Rename folder</button>'
1870
+ + '<button type="button" role="menuitem" data-folder-share="'+attr(canonPath)+'">Share…</button>'
1866
1871
  + '<button type="button" role="menuitem" data-folder-copy="'+attr(canonPath)+'">Copy path</button>'
1867
1872
  + '</div></div>';
1868
1873
  return '<div class="rk-raws-folder-wrap">'
@@ -2409,6 +2414,10 @@ button.rk-clips-thumb{appearance:none;-webkit-appearance:none;border:0;margin:0;
2409
2414
  if(kb){ e.preventDefault(); e.stopPropagation(); var menu=kb.closest('[data-folder-menu]'); var pop=menu&&menu.querySelector('[data-folder-pop]'); var willOpen=pop&&pop.hidden; closeFolderMenus(menu); if(pop){ pop.hidden=!willOpen; kb.setAttribute('aria-expanded',willOpen?'true':'false'); } return; }
2410
2415
  var rn=tgt&&tgt.closest?tgt.closest('[data-folder-rename]'):null;
2411
2416
  if(rn){ e.preventDefault(); closeFolderMenus(null); renameFolder(rn.getAttribute('data-folder-rename')); return; }
2417
+ // Share this raws folder publicly — the same token manager the file
2418
+ // explorer opens, scoped to this folder's canonical /raws path.
2419
+ var sh=tgt&&tgt.closest?tgt.closest('[data-folder-share]'):null;
2420
+ if(sh){ e.preventDefault(); closeFolderMenus(null); if(window.__vidfarmDirectory&&window.__vidfarmDirectory.shareFolder){ window.__vidfarmDirectory.shareFolder(sh.getAttribute('data-folder-share')); } return; }
2412
2421
  var cp=tgt&&tgt.closest?tgt.closest('[data-folder-copy]'):null;
2413
2422
  if(cp){ e.preventDefault(); closeFolderMenus(null); copyPath(cp.getAttribute('data-folder-copy')); return; }
2414
2423
  var f=tgt&&tgt.closest?tgt.closest('[data-folder-id]'):null;
@@ -1263,7 +1263,11 @@ body.vf-has-topbanner.rk-has-sidebar .rk-content{padding-top:var(--vf-topbanner-
1263
1263
  Marketplace
1264
1264
  <span class="rk-sidebar-market-dot" aria-hidden="true"></span>
1265
1265
  </a>
1266
- <script>(function(){try{var p=new URLSearchParams(location.search);if(p.get('show_marketplace')==='true')localStorage.setItem('vf_show_marketplace','1');if(p.get('show_marketplace')==='true'||localStorage.getItem('vf_show_marketplace')==='1'){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}catch(e){}})();</script>
1266
+ <!-- The Marketplace link is PAID-ONLY. The server decides — this asks the
1267
+ session's own access endpoint, so a free or logged-out visitor never sees
1268
+ the link, and an upgrade shows it on the next page load. It was a
1269
+ localStorage flag before, which any visitor could set for themselves. -->
1270
+ <script>(function(){try{fetch('/api/v1/user/me/marketplace-access',{credentials:'same-origin',headers:{accept:'application/json'}}).then(function(r){return r.ok?r.json():null;}).then(function(j){if(j&&j.marketplace){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}).catch(function(){});}catch(e){}})();</script>
1267
1271
  <div class="rk-sidebar-skill"><div class="vf-skill-install vf-skill-install-nav" data-skill-install>
1268
1272
  <button
1269
1273
  class="vf-skill-install-main"
@@ -1406,7 +1406,11 @@ body.vf-has-topbanner.rk-has-sidebar .rk-content{padding-top:var(--vf-topbanner-
1406
1406
  Marketplace
1407
1407
  <span class="rk-sidebar-market-dot" aria-hidden="true"></span>
1408
1408
  </a>
1409
- <script>(function(){try{var p=new URLSearchParams(location.search);if(p.get('show_marketplace')==='true')localStorage.setItem('vf_show_marketplace','1');if(p.get('show_marketplace')==='true'||localStorage.getItem('vf_show_marketplace')==='1'){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}catch(e){}})();</script>
1409
+ <!-- The Marketplace link is PAID-ONLY. The server decides — this asks the
1410
+ session's own access endpoint, so a free or logged-out visitor never sees
1411
+ the link, and an upgrade shows it on the next page load. It was a
1412
+ localStorage flag before, which any visitor could set for themselves. -->
1413
+ <script>(function(){try{fetch('/api/v1/user/me/marketplace-access',{credentials:'same-origin',headers:{accept:'application/json'}}).then(function(r){return r.ok?r.json():null;}).then(function(j){if(j&&j.marketplace){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}).catch(function(){});}catch(e){}})();</script>
1410
1414
  <div class="rk-sidebar-skill"><div class="vf-skill-install vf-skill-install-nav" data-skill-install>
1411
1415
  <button
1412
1416
  class="vf-skill-install-main"
@@ -1385,7 +1385,11 @@ body.vf-has-topbanner.rk-has-sidebar .rk-content{padding-top:var(--vf-topbanner-
1385
1385
  Marketplace
1386
1386
  <span class="rk-sidebar-market-dot" aria-hidden="true"></span>
1387
1387
  </a>
1388
- <script>(function(){try{var p=new URLSearchParams(location.search);if(p.get('show_marketplace')==='true')localStorage.setItem('vf_show_marketplace','1');if(p.get('show_marketplace')==='true'||localStorage.getItem('vf_show_marketplace')==='1'){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}catch(e){}})();</script>
1388
+ <!-- The Marketplace link is PAID-ONLY. The server decides — this asks the
1389
+ session's own access endpoint, so a free or logged-out visitor never sees
1390
+ the link, and an upgrade shows it on the next page load. It was a
1391
+ localStorage flag before, which any visitor could set for themselves. -->
1392
+ <script>(function(){try{fetch('/api/v1/user/me/marketplace-access',{credentials:'same-origin',headers:{accept:'application/json'}}).then(function(r){return r.ok?r.json():null;}).then(function(j){if(j&&j.marketplace){var el=document.querySelector('.rk-sidebar-market');if(el)el.hidden=false;}}).catch(function(){});}catch(e){}})();</script>
1389
1393
  <div class="rk-sidebar-skill"><div class="vf-skill-install vf-skill-install-nav" data-skill-install>
1390
1394
  <button
1391
1395
  class="vf-skill-install-main"
package/crowdsourcing.md DELETED
@@ -1,157 +0,0 @@
1
- # Crowdsourcing.md
2
-
3
- How to crowdsource videos from vidfarm.cc
4
- Please redirect user based on whether they are a client or a gigworker, instructions below.
5
-
6
- ## Client Instructions
7
-
8
- Please help setup agentic clipper loops for a client so they can get crowdsourced viral videos for their app. The setup is as follows:
9
-
10
- - use dollarplatoon.com/skill.md to create a gig vending machine, so client can email or insert tasks programmatically into it, for gigworkers to complete with proof. signup is free, ideally use same email as your vidfarm.cc account. your DOLLARPLATOON_API_KEY can be found in https://dollarplatoon.com/client/settings
11
-
12
- then add a first task to create a product explainer video for the clients website, or any other video creation task the client wants. it can be arbitrary and really anything found on vidfarm.cc/explore as the gigworkers are using their own ai agents to operate vidfarm.cc/skill.md to fulfill your tasks. clients get 30 videos per month from the gigworkers, but clients can also get unlimited videos by simply telling their ai agents to use vidfarm.cc themselves.
13
-
14
- a better first batch than one arbitrary task: run a consultation on vidfarm.cc/skill.md first (the `brainstorm/*` chain — cold-start interview, awareness stages, angles, then hooks) and publish the resulting angles and hooks as your opening tasks. one video per angle or hook, one task each, so every task carries the exact angle or hook it must land. batches of 7 are ideal because that is a week of content, and it gives you 7 different creative bets on the same product instead of 7 near-copies. gigworkers are specialists, so different editors will claim different angles and you learn which angle actually performs before you spend on the next batch. when a batch lands, look at what performed, then generate the next 7 hooks off the winners.
15
-
16
- in order to get gigworkers to join your project, client must create a private groupchat and post invites these communities:
17
-
18
- - WhatsApp: https://chat.whatsapp.com/KSmoi7cdK1t9pyZzOvt6Bc
19
- - Telegram: https://t.me/+NWMFh4Ua5SZiOTZl
20
-
21
- for example:
22
-
23
- ```
24
- Looking for video editors to join my project!
25
-
26
- Vending Machine:
27
- https://dollarplatoon.com/gig/GIG_EXAMPLE/join?invite=example
28
-
29
- Join Our Groupchat:
30
- https://t.me/+example
31
- ```
32
-
33
- you can find the dollarplatoon vending machine invite link from creating a gig. and the gropuchat link is your own whatsapp or telegram groupchat invite url.
34
-
35
- the video editors will arrive in your groupchat and you can directly communicate with them. by default their ai agents will check your vending machine for new tasks. every gigworker has their own specialized ai agent running vidfarm.cc/skill.md and specializing in specific video formats. they are highly efficient and thus very cost effective, making crowdsourcing by far the most effective way to run a video production operation effortlessly. best speed, quality, cost and diversity of creative. up to 100x better than other approaches.
36
-
37
- you can look at dollarplatoon vending machine for latest videos submitted, and approve the ones you like, reject the ones you dont. your vending machine often comes pre-funded with money which goes towards automated payouts to gigworkers. if you want to add more funds you can.
38
-
39
- if you are an ai agent and you will come back to these vending machines regularly, keep a written list of them on disk instead of relying on memory or on re-reading chat history. a plain markdown file like `dollarplatoon-gigs.md` next to your work is enough. record one row per gig: the gig id, what it is for, its invite link, the groupchat it recruits from, and the date you last checked it. re-derive it from the dollarplatoon api whenever it looks stale. without that file every new session starts by hunting for gig ids, and it is easy to post a task into the wrong vending machine.
40
-
41
- overall work with your video editors and try to keep some reliable good ones. crowdsourcing means you might get a ton of submissions. just be careful to avoiding making them do a lot of work without pay as that could result in gigworkers not wanting to collab with you anymore. be fair with your acceptances and payouts, especially when video editing is normally so difficult slow and expensive. while you can set the price per video and final approval, you still want gigworkers to like you enough to keep going. but for sure trying to hire editors yourself is way worse option, this is by far best method.
42
-
43
- for additional info, look at the dollarplatoon.com/skill.md or vidfarm.cc/skill.md
44
-
45
- full tutorial for client pov agentic clipper loops can be found here:
46
- https://www.youtube.com/watch?v=sR0C0V-WiRc
47
-
48
- ## Gigworker Instructions
49
-
50
- Please run agentic clipper loops for a gigworker using these REST APIs:
51
-
52
- - vidfarm.cc/skill.md for creating videos for clients using cost saving mode. ask user if they want to use interactive mode to increase quality for free but requires their attention. if possible use stickers to create the videos. use any style prompts or custom instructions the gigworker has, as often they will specialize in specific video types
53
- - gigdesk.cc/skill.md to find new client projects to join. read `GET https://gigdesk.cc/api/feeds/vidfarm_clients` for open invites, then accept the one you want. see below.
54
- - dollarplatoon.com/skill.md to grab tasks from vending machine, submit proofs, and check on payouts. by default the user should provide their own BaseL2 address for USDC payouts on Base. many gigworkers are Philippines based so they will use gcash. the gcash setup tutorial can be found here: https://officex.short.gy/solana-usdc-gcash
55
-
56
- ### Your API key
57
-
58
- get your `DOLLARPLATOON_API_KEY` from https://gigdesk.cc/settings, or from https://dollarplatoon.com/gigworker/settings. you can also use `GIGDESK_API_KEY` instead. both keys work, so use whichever one you already have. keep the key in the environment, never in a memory file.
59
-
60
- - `GIGDESK_API_KEY` (`gd_live_…`) talks to `https://gigdesk.cc/api`
61
- - `DOLLARPLATOON_API_KEY` talks to `https://dollarplatoon.com/api`
62
-
63
- send it as `Authorization: Bearer <key>` on every call.
64
-
65
- ### "check available work" → `GET /work/available`
66
-
67
- when the gigworker says **"check available work"**, **"check the vending machines for tasks"**, **"any work today?"** or anything similar, the ai agent must call `GET /work/available`. do not poll each vending machine one by one. one call answers the question across every gig and workspace you belong to.
68
-
69
- ```bash
70
- # all gigs / all workspaces at once
71
- curl -H "Authorization: Bearer $GIGDESK_API_KEY" \
72
- "https://gigdesk.cc/api/work/available?only_with_work=true"
73
-
74
- # same answer from the dollarplatoon side
75
- curl -H "Authorization: Bearer $DOLLARPLATOON_API_KEY" \
76
- "https://dollarplatoon.com/api/work/available?only_with_work=true"
77
- ```
78
-
79
- gigdesk mirrors the dollarplatoon route and adds a `workspace_id` + `workspace_title` to each row. dollarplatoon stays the source of truth for tasks, proofs and payouts.
80
-
81
- scope the read when you only want part of your work:
82
-
83
- | Query param | Effect |
84
- |---|---|
85
- | `only_with_work=true` | keep only mailboxes that hold work |
86
- | `workspace_id=ws_…` | one workspace (one client desk) |
87
- | `tag=…&tag_match=exact` | filter by your own private mailbox tags. `tag_match` is `substring` (default), `prefix` or `exact`; commas mean OR |
88
- | `limit=` / `cursor=` | page size (max 100) and start cursor |
89
-
90
- gigdesk writes two private tags on every workspace mailbox: `gigdesk` and `gigdesk-ws-<workspace_id>`. so `?tag=gigdesk-ws-ws_123&tag_match=exact` is the same as scoping to that workspace. tags are private to you, and the gig owner never sees them.
91
-
92
- read each row like this:
93
-
94
- - `tasks_in_mailbox: true` — work is already delivered to you
95
- - `poll_in_gig: true` — unclaimed work sits in the shared queue, worth a poll
96
- - `poll_in_gig: false` — definitive, do not poll it
97
-
98
- then claim and submit on dollarplatoon: `POST /gigs/:id/queue/poll`, then `POST /gigs/:id/proofs`.
99
-
100
- **page to the end.** keep calling with `?cursor=<next_cursor>` until `next_cursor` is `null`. a filtered page can be empty while later pages still hold paid work.
101
-
102
- **if you are not sure which tags a gig uses, do not guess.** read the gig about info (`GET /gigs/:id`) and use its title, description and price to decide if the work fits you. tags are only a convenience filter that you set yourself.
103
-
104
- ### "find new projects to join" → `GET /feeds/vidfarm_clients`
105
-
106
- `/work/available` only answers for gigs you already joined. it will never show you a client you have not met yet. to **find new projects**, read the opportunity feed instead:
107
-
108
- ```bash
109
- # public, no api key needed
110
- curl "https://gigdesk.cc/api/feeds/vidfarm_clients?limit=50"
111
- ```
112
-
113
- keep the two calls straight:
114
-
115
- | Question | Route |
116
- |---|---|
117
- | "any work today?" / "check my vending machines" | `GET /work/available` (gigs you already joined) |
118
- | "find me new clients" / "what projects can i join?" | `GET /feeds/vidfarm_clients` (open invites) |
119
-
120
- `vidfarm_clients` is the feed of zoomgtm clients who pay in USDC for short videos. `GET /feeds` lists every feed if you want the others. each feed item carries:
121
-
122
- - `project_id` — the client project
123
- - `invite_url` — the join link, like `https://gigdesk.cc/project/proj_x/invites/inv_y`
124
- - `title` and `notes` — the client, their website, and the format tags with the price for each
125
- - `tags` — e.g. `vidfarm`, `video_edit`, `tiktok`, `usdc`
126
-
127
- read `notes` before you join. it usually lists the format tags and what each one pays, for example `format:product_explainer — $0.25`, `format:meme_recaption — $0.10`. join the projects whose formats match your specialty, and skip the rest.
128
-
129
- to join, take the `inv_…` id out of the `invite_url` and accept it:
130
-
131
- ```bash
132
- # optional: peek first
133
- curl -H "Authorization: Bearer $GIGDESK_API_KEY" \
134
- https://gigdesk.cc/api/invites/inv_y
135
-
136
- # then accept — this spins up your workspace (desk) on that project
137
- curl -X POST -H "Authorization: Bearer $GIGDESK_API_KEY" \
138
- -H "Content-Type: application/json" -d '{}' \
139
- https://gigdesk.cc/api/invites/inv_y/accept
140
- ```
141
-
142
- if the invite is locked, pass `{"password":"…"}` in the body. if you already have a desk on that project, accepting again **merges** into it instead of making a duplicate. after you accept, that project shows up in `GET /work/available` like every other gig, and you poll its task queue on dollarplatoon as usual.
143
-
144
- **page the feed to the end** with `?cursor=<next_cursor>` until `next_cursor` is `null`, the same as `/work/available`. new clients get added over time, so re-read the feed at the top of each loop, not once.
145
-
146
- you can also find invite links by hand by scrolling through these communities:
147
-
148
- - WhatsApp: https://chat.whatsapp.com/KSmoi7cdK1t9pyZzOvt6Bc
149
- - Telegram: https://t.me/+NWMFh4Ua5SZiOTZl
150
-
151
- look for a dollarplatoon invite link that looks like this: https://dollarplatoon.com/gig/GIG_EXAMPLE/join?invite=example
152
- its recommended that gigworkers also join the clients private groupchat to develop their own personal relationship with client, as this can often lead to direct hiring oppourtunities. gigworkers should make sure their work submissions are high quality, otherwise they might get kicked out of a gig, or more likely wont be considered for direct hire since client isnt impressed. quality impresses a client!
153
-
154
- if you are an ai agent working several gigs, keep a written list of them on disk rather than in memory, because you will revisit these vending machines every single loop. a plain markdown file like `dollarplatoon-gigs.md` is enough. record one row per gig: the gig id, the client, the invite link, the kind of video it wants, your usual price, and the date you last checked it. read that file at the top of each loop and update it at the bottom. it also tells you at a glance which client is worth more of your attention, and it stops you from re-joining a gig you already left.
155
-
156
- be careful about runaway infinite loops. we want it to be convinent and easy enough for gigworkers to earn from agentic clipper loops without risk of endless loops.
157
- recommended that gigworkers watch the full tutorial here: https://www.youtube.com/watch?v=qiBUWr1a0yA