I freelance on Upwork doing automation work. Reading every new posting by hand was costing me 10 to 15 minutes a job, and most of them weren’t worth it. So I turned the screening into a Claude Code skill and put it on a loop. How it works. I run /loop 10m with the screener skill in a second Claude Code session, so my main one stays free. Every tick it pulls the newest postings sorted by recency. First comes a cheap check: do the title and skill tags overlap with what I actually do? No overlap and the job is dropped without spending another call. Jobs that survive get a full fetch and a score out of 100 on five things: freshness, competition, the client, whether the budget fits the work, and whether I have a past project that proves I can do it. Anything that passes shows up in the terminal with a drafted proposal and also lands in my inbox. Nothing is submitted automatically. When I say close out, it writes everything to a tracker and syncs a Google Sheet in one batch. The noise. One 4 hour run scanned about 317 jobs and roughly 80% were off target. The same shapes kept coming back: manual SEO and backlinking jobs, GoHighLevel and Klaviyo setup work tagged as marketing automation, AI video and AI influencer gigs with “workflow” in the title, mystery shopping and audio recording jobs with a full RAG and LangChain stack stuffed into the tags, and cold calling roles tagged lead generation. One client posted the same voice recording job in 14 languages, one every minute or two. Lesson one: tags lie, descriptions don’t. Clients add popular tags to unrelated jobs to get more eyes on them. A Flutter app store job had AI Chatbot and Generative AI in its tags. Now the skill reads the first two lines of the description before it spends a full fetch. Lesson two: the proposal count on the listing lags badly, especially on jobs with AI or Claude in the title. But the job details include the average, min and max bid. Every bid is at least the min, so the number of bids has to be at least (max - min) / (avg - min). One listing showed 0 proposals while the bid stats said at least 15. Another went from 0 to 31 in ten minutes. So competition is now scored from the bid stats, not the listing. The part I haven’t solved: every run I add an exception or two to the scoring rules, and the skill keeps growing. How do you stop scoring rules drifting as you add exceptions? Do you version them, replay old jobs against new rules, or just prune every few weeks? submitted by /u/tariqosmani
Originally posted by u/tariqosmani on r/ClaudeCode
