The iFarm guide
iFarm runs real iPhones from your Mac: watch them live, control them with the mouse and keyboard, and automate what you'd otherwise do by hand. This guide goes from unboxing to running a farm around the clock.
1. What you can use it for
Use it however suits your work. Some common uses (the ⓘ button in the toolbar lists them too):
- Test apps on real iPhones, yours or your clients'. Record a flow once (sign up, log in, buy, settings) and replay it on every phone and screen size. Handy for QA teams and freelancers who test for other companies. Real devices catch what simulators can't: camera, push notifications, Face ID prompts, Bluetooth, real networks, older phones. Schedule it nightly and check screenshots in History.
- App Store screenshots and demo videos on several iPhone sizes at once.
- Languages, text sizes and accessibility: one flow on phones set up differently, to see where layouts break.
- Reproduce bugs from a support ticket on the same model and iOS version.
- Long-running reliability tests: hours of use on several phones to find crashes, memory growth and battery drain.
- A device lab on one Mac: every phone in one window, in groups, from your desk or remotely through the Mac.
- Manage your own social accounts: drop a video and it becomes a draft; you choose when to post. Routine browsing on schedules, and comment ideas you approve one by one.
- Let Claude handle a fiddly task while you watch every step.
- Teaching and live demos on a big screen.
How you use it is up to you; follow the rules of the apps you automate and of any client you test for. iFarm doesn't hide automation from apps (no spoofing or detection tricks) and never buys anything. By default it asks before posting, sending or following; you can switch that off in Setup → Preferences.
2. Before you start
Hardware
- Any Apple-silicon or Intel Mac on macOS 14+. A Mac mini works well as an always-on farm host.
- One good USB cable per phone. For 3 or more phones, use a powered USB hub: phones charge and stay connected reliably.
- iPhones on iOS 16 or newer.
How many phones can one Mac run?
| Mac memory | Phones, comfortably |
|---|---|
| 8 GB (MacBook Air, base Mac mini) | 5–10 |
| 16 GB | 10–20 |
| 32 GB or more | 20–30, limited by USB hubs |
Each phone costs the Mac about 100 MB for its helper process plus about 40 MB for its live view. Grid tiles run at 10 fps (about 1 MB/s each); only the phone you open runs at full speed (about 7 MB/s). Other limits come first on big Macs: a powered USB hub carries about 10–15 phones (use several hubs on separate ports), phones on Wi-Fi share your network (past about 10, use cables), and a paid Apple developer team can register 100 iPhones a year. With your own Claude Code, each phone Claude is driving adds about 200–400 MB. Health → Capacity shows the real numbers for your Mac (see section 15).
Apple Developer account
iFarm installs a small helper app (WebDriverAgent) on each phone. iOS only runs it if it's signed by an Apple Developer team you belong to.
| Account | Cost | Helper app lasts | Notes |
|---|---|---|---|
| Free (Personal Team) | $0 | 7 days, then re-sign | Limited app IDs per week |
| Apple Developer Program | $99/yr | 1 year | Recommended for a farm |
Add the Apple ID in Xcode → Settings → Accounts.
Xcode (free from the App Store) builds the helper app. Install it and open it once: agree to the license and let it install its components. Recent Xcode versions download iPhone support separately; if it's missing, Setup offers a Download iOS support button (or Xcode → Settings → Components → iOS → Get). If your Mac's developer tools point at the Command Line Tools instead of Xcode, you don't need to change anything: iFarm uses Xcode directly.
3. Install iFarm
- Download iFarm-x.y.z.dmg from the iFarm website (only from there: a copy from anywhere else could have been changed).
- Open it and drag iFarm onto Applications.
- Open iFarm from Applications. (Keep it there: start-at-login only works from Applications.)
The first time, macOS warns you. iFarm isn't notarized by Apple yet. Notarizing needs a paid Apple Developer ID and Apple checking every build, and iFarm is a free, independent project. So macOS says it "could not verify iFarm is free of malware". That means Apple hasn't checked the app, not that anything was found. To open it:
- When the warning appears, click Done (not Move to Trash).
- Open System Settings → Privacy & Security and scroll down to "iFarm was blocked to protect your Mac".
- Click Open Anyway and confirm with your Mac's password or Touch ID (that's macOS asking, not iFarm).
You do this once. After an update replaces the app, macOS may ask again.
Updating: download the new DMG and replace the app. Your phones, settings, automations and history are kept (they live in ~/Library/Application Support/iFarm).
From source (developers): git clone, then scripts/build-app.sh. The app is in build/iFarm.app. scripts/make-dmg.sh makes a DMG; with a Developer ID certificate it signs and notarizes it too (see the script).
4. Prepare each phone
- Plug it in by USB the first time (Wi-Fi works after that), with a data cable. If the Mac asks "Allow accessory to connect?", click Allow.
- Trust this Mac: unlock the phone, tap Trust and enter the passcode.
- Developer Mode: Settings → Privacy & Security → Developer Mode → On. The phone restarts; unlock it and confirm "Turn On". (The switch only appears after the phone has been plugged into a Mac with Xcode.)
- Keep it awake: Settings → Display & Brightness → Auto-Lock → Never. For dedicated farm phones, also consider no passcode. Otherwise save the passcode in iFarm for auto-unlock (section 6).
- Turn off Low Power Mode, and keep the phone charging.
5. First run
iFarm opens a setup guide that checks each step and tells you what to do:
- Xcode: a green check, or a button to install or open it.
- Signing team: pick your team (paid teams are listed first) and a bundle ID prefix you own, such as
com.yourname. iFarm suggests one. The helper is installed ascom.yourname.WebDriverAgentRunner. - Phones: a checklist per phone: connected, trusts this Mac, Developer Mode on, helper running. Anything not ready says how to fix it, with a button where possible.
- Preferences: start phones automatically, Wi-Fi control.
You can reopen it any time with the gear button.
The first start of a phone:
- downloads WebDriverAgent (~4 MB) and checks its checksum,
- builds it with your team (1–3 minutes, once per Mac),
- registers the phone with your team (once per phone),
- launches it on the phone.
If iOS shows "Untrusted Developer", go to Settings → General → VPN & Device Management, tap your developer entry and trust it, then press Try again.
The helper app on the phone. After the first start you'll see an app called iFarm (black phones icon) on each phone. iFarm starts it from the Mac; you never need to open it. If you tap it by hand it shows a blank screen and closes. That's normal. The phone shows nothing while iFarm drives it other than what's happening on screen; when you want to stop, hold volume up + down together (section 9).
6. Controlling a phone
- Click: tap.
- Click and drag: swipe, following your exact path and speed.
- Click and hold (½ s or more): long press.
- Buttons under the screen: Home, Volume −/+, Lock, Wake.
- Type on the phone: tap a text field on the phone first, then type in the side panel and press Send.
The frame rate is shown under the screen.
iPhone frame (optional): the switch at the top of All phones (and under a phone's screen) shows each phone inside an iPhone body instead of a plain screen. Its buttons work: volume up and down on the left; the side button on the right locks the phone, or wakes it if it's locked; and Home is the bar at the bottom of the screen (or the round button on iPhones that have one). Each button lights up when you point at it. Switch back to the plain look any time.
USB or Wi-Fi? Both work. iFarm uses the cable whenever one is plugged in. Phones without a cable are controlled over Wi-Fi, protected by a secret only your Mac knows (each phone has its own, kept in the Keychain). Connections without it are refused. The Wi-Fi traffic isn't encrypted, so use a private network. To allow USB only, turn off Setup → Preferences → Allow control over Wi-Fi: the phone's helper then can't be reached from the network at all.
Lock screen: on a phone's page, save its passcode (stored only in this Mac's Keychain) and iFarm can unlock it by itself. Keep this phone awake and unlocked checks every 30 seconds. Wake / Unlock now do it once.
The saved passcode works while the phone's helper is running. Whenever the helper has to start on a locked phone (after the phone restarts, after iFarm restarts, or after the helper stopped while idle), unlock the phone by hand once: iOS won't start the helper on a locked phone, and iFarm can't type the passcode without it. The phone's tile says Unlock the phone by hand to continue when this is needed. To make it rare, set the idle stop to Never (Setup → Preferences) and keep the phone charging.
7. Many phones
- All phones shows every phone's live screen in a grid. Each tile can be controlled directly, just like the large view. The layout control in the toolbar sets Auto, 1, 2, 3 or 5 phones per row.
- Tiles stream at a lighter quality (about 10 fps). Opening a phone large switches that phone to full quality (about 25 fps).
- Check phones with the box on each tile. Then Selection → press Home or Start on all of them, or make a group from them.
- Mirror repeats every tap and swipe on all checked phones. Positions are scaled to each phone's screen, so it works across different models.
- Groups ("Farm A", "All 5") appear in the sidebar. Right-click a phone to add it to a group or remove it, and right-click a group to rename or delete it.
- If a phone's helper crashes or stops answering, iFarm restarts it by itself, waiting longer after each failure (2 s, 5 s, 15 s, 30 s, then 60 s). Unplugging and plugging back in reconnects automatically.
Several accounts on one phone
A phone can hold several of your own TikTok accounts. Farm → Accounts lists them by phone.
- Log in to each account once in TikTok on the phone: Profile → tap your name at the top → Add account. (iFarm never types passwords.)
- In iFarm, press Find accounts on this phone. iFarm opens TikTok's account list and adds every account it finds. You can also Add… a handle by hand.
- From then on, anything can be for an account:
- Run… next to an account runs any automation for it.
- Schedules → On: Chosen accounts: each account gets its own random times; runs on the same phone take turns.
- Programs → Add phones or accounts…: each account follows the program from its own Day 1 (for example the warm-up).
- Drafts: when you drop a file on a phone, pick the account; in the drop folder, use the account's
@handlefolder. Post now on a saved draft switches back to the account it was saved under.
Before each run for an account, iFarm switches TikTok to it with TikTok's own account switcher and checks the profile shows that @handle. If the account isn't logged in on the phone, the run stops and says so. The phone tile shows the active account next to the phone's name, and History has an Account column and filter; each account on the Accounts page has its own history.
8. Automations
Ask iFarm: describe it, and it runs on autopilot
At the top of All phones, type what you want in plain words and press Plan it. For example:
- "Every evening at 7pm on all phones, warm up on my niche for 20 minutes"
- "Weekdays at 9am on @myaccount, browse relationship videos and suggest comments on the two most relevant ones"
- "Right now on Phone 2, open Safari, search for my app and open my website"
- "Every morning, open the Clock app and show the World Clock"
Claude (whichever you set up: your Claude Code or an API key) turns it into a plan and shows it to you before anything runs: what it will do, how, on which phones or accounts, and when (now, once, or daily in a time window, on chosen days). Change anything before it runs: the name, the task, Where (all phones, a group, one phone or one account) and When (now, once at a time, or every day in a time window), then press Do it. There are three ways a plan can run, and Claude picks the cheapest that works:
- Use an automation you already have (with its settings filled in, such as minutes or your site). Free on every run.
- Build it once: for anything new, Claude does it once on a phone while you watch and iFarm saves the steps as an automation; every run after that replays them without Claude, free and fast.
- Claude every run: only for tasks that need judgment each time (reading and deciding). Uses your Claude plan on every run.
Schedules it creates appear under Plan → Schedules, automations it builds under Automations, and "Claude every run" tasks under Scenarios; edit or delete them there. Note that "all phones" means every phone iFarm sees, and a scheduled run starts a phone's helper if it isn't running.
Record one: open a phone large, press Record (Automations box), and use the phone through iFarm's live screen. Taps, swipes, holds, Home/volume buttons, typed text and the pauses between them are recorded. Press Stop and save; it appears under Automations in the sidebar.
- For each tap, iFarm remembers the text on screen under your finger and where you tapped relative to it, so replays find the same button on other phone sizes. Steps without text fall back to the position on screen.
- A recording made on the home screen starts with Home, so replays start from the same place.
- Recording covers what you do in iFarm's live view, not touches made directly on the phone (iOS doesn't let any app see those).
- Recordings start fresh: if an app is open when you press Record, or you open one from the Home screen while recording, iFarm restarts it so the recording and every replay begin on the same screen (apps otherwise reopen wherever they were left). Opening an app is saved as an Open app step, so it works even if the icon is somewhere else on another phone.
- Only gestures that reached the phone are recorded. If one fails (the phone was busy for a moment), the log says so: just do it again.
- After each tap iFarm notes a new word that appeared (for example "iOS Version" after tapping About) and adds a check step. On replay, each tap waits up to 8 s for its button, waits for scrolling to stop, picks the copy of the text nearest where you tapped, and then checks for that word. A failed check is noted in the run's log ("Skipped (optional)…") instead of derailing the run; make it required by unticking "Optional" if you're writing a test.
- Pauses longer than 10 s are shortened to 10 s.
Text settings: automations can have text settings such as site or search, used in steps as $site. They appear in the automation's Settings box; on built-in templates you can change them without duplicating.
Open a link: opens a web address in a new Safari tab (tabs you have open aren't touched), or an app link. Text settings work inside it, e.g. https://www.google.com/search?q=$search.
Open app: pick the app by name: apps installed on your phones (your own apps included; Read phones refreshes the list), well-known apps such as TikTok, Instagram, YouTube, X, WhatsApp, Settings or Safari, or type any bundle ID. Steps then read "Open TikTok" rather than an ID.
Edit: every step can be edited (text to look for, waits as random ranges like 2–5 s, hold times), moved, deleted or added: tap text, wait, swipe, wait for text, "if text is on screen", repeat N times, repeat for N minutes, "sometimes (50%)", open app, type, Home. Built-in templates are read-only; Duplicate makes your own copy. Export… saves a JSON file others can Import.
Run: pick checked phones, all phones, a group or one phone, then Run. A phone that was disconnected for being idle is started first.
Built-in templates:
- TikTok: niche warm-up (the one to start with): searches one of the phone's niche keywords (set them on the phone's page) and works through the result videos. For each video it does one thing: skips it (about 30%), watches it (35%), watches it longer, 25–60 s (20%), or saves it (15%; iFarm checks the save turned yellow and never un-saves). About 1 video in 12, Claude suggests a short comment based on the caption and comments; it waits in Waiting for you and is posted only if you approve it. Without Claude set up, that part is skipped. Durations are in its Settings; the odds are editable in its steps (duplicate it first). Use it in a program for each account (for example days 1–3 shorter, then daily).
- Web: search and open a site: searches Google in a new Safari tab, scrolls the results until your site shows up, opens it and scrolls through it. Set search and site in its Settings (no need to duplicate it).
- App Store: install an app: set app to the app's name; it searches the App Store, opens the app's page and taps Get if it's free, then waits until it's installed. If iPhone asks for Face ID, the side button or a password, confirm on the phone and press Done in Waiting for you. Paid apps are never bought; "already installed" is noted.
- TikTok: scroll session: opens TikTok on For You and scrolls for 15–25 minutes, watching each video 3–12 s and liking about 1 in 12 (double-tap).
- TikTok: niche search session: searches the phone's next niche keyword and watches the results.
- TikTok: draft from newest media: what drag-and-drop uses (section 10).
- TikTok: post a saved draft: finds a draft by its caption; posts only when you choose Post.
- Claude: niche warm-up with comment suggestions (section 13).
Durations are editable in each template's Settings.
Scenarios: saved instructions for Claude
An automation replays recorded steps with no AI. A scenario is a task in plain words that Claude does each time it runs, so you don't have to type it again. Use one when every run needs judgment (reading the screen and deciding); for anything that's the same every time, an automation is faster and free.
- New scenario: press + next to Scenarios in the sidebar, type what Claude should do (which app, what to do, when to stop) and press Save. The name is optional.
- Run now: on the right, choose where it runs (chosen phones, a group, all phones or accounts) and press Run. Phones that are busy get it when they're free. It starts on the phones checked in the grid, never all of them by surprise.
- Schedule: press Schedule… to run it once at a time or every day in a time window. Its schedules are listed on the scenario and under Plan → Schedules.
- Edit the text any time; the next run uses the new words.
Each run uses your Claude plan and can go a little differently each time. The usual controls still apply: Stop, ⌘. and the phone's emergency stop work as for any run, and your Claude settings (such as Ask before posting) apply to scenarios too.
Testing apps (test mode)
For QA on real iPhones (your own app or a client's), turn on Test mode in an automation's header. Then:
- Popups are left to your steps, so permission prompts can be tested: add a step that taps Allow or Don't Allow yourself.
- Nothing tries to recover (no going back, no reopening the app): a problem shows up as a failure instead of being smoothed over.
- Every "Wait for text" step is a check that must pass, including the ones a recording adds automatically.
- Each run writes a pass/fail report: an HTML page with every check, a screenshot of each, the phone and iOS version, the app's version and build, the timing and the full log. Open it from the run (Open report) or from History (Report); reports are kept in
~/Library/Application Support/iFarm/Reports, one folder per run, ready to zip and send.
Build tests by recording, by describing them to Claude (Ask iFarm or the phone's Claude card), or by writing steps. Schedule them nightly to catch regressions on every phone. Note: iFarm's helper and Xcode's own UI tests (XCUITest) can't drive the same phone at the same time; give each its own phone, or stop iFarm on that phone while those run.
9. Stopping, recovery and safety
When something gets in the way, iFarm tries, in order: dismiss a system alert, tap a "Not now / Skip / Close / Cancel…" button, go back, go Home and reopen the app, force-quit and reopen it. If the step still can't be done, the run stops with a screenshot of where it got stuck and the phone is sent Home, so it never sits blocked.
Stopping:
- Stop on a phone (tile or phone page), Stop all in the toolbar, or ⌘.
- On the phone itself: hold volume up + volume down together. iFarm stops everything on that phone within a second and shows "Stopped from the phone". Nothing runs there again until you press Resume. (iFarm's own volume buttons don't trigger this.)
Idle phones: Setup → Preferences → "Disconnect a phone after no use for…" (default 30 minutes) stops a phone's helper when nobody has used it, to save battery. Press Start, or run an automation, to bring it back.
Safety: only run automations on phones dedicated to the farm. A replay taps and swipes whatever is on screen, so don't run one on a phone someone is using.
10. Posting: drag, draft, you decide
Drag one video, or several photos (up to 35), from Finder onto a phone's tile (or onto its large view). Drop onto one of several checked phones to do it on all of them. A box asks what to do:
- Save to Photos (the default every time): puts the media in the phone's camera roll. Nothing is posted.
- Post to apps: tick Instagram, TikTok, Snapchat, YouTube (videos only), Facebook and/or X, and write the caption. iFarm puts the media in the phone's Photos, then Claude posts it in each app, one after another (it uses your Claude setup, section 13). Add extra instructions if you like, e.g. "post to Story, not Spotlight". Your ticks are remembered.
- TikTok draft (the classic flow, no Claude needed):
- If a
.txtfile with the same name sits next to the media, its text is filled in as the caption. - iFarm sends the media into the phone's Photos, opens TikTok, picks the newest item(s), taps through to the post screen and types the caption.
- The tile then asks Save draft / Post / Discard. Post asks you to confirm. If you don't answer within 30 minutes, it's saved as a draft.
- If a
If the phone is busy, it all waits in the phone's Up next queue.
By default nothing is posted without your click: the engine refuses any step that taps Post, Story, Send or Follow unless you chose it. To let automations and drafts post on their own, turn off Setup → Preferences → Ask me before posting, sending or following; dropped files are then posted straight away. Taps on Buy or Pay are always refused.
The first time, the phone asks to allow Photos access for iFarm (the helper app). Tap Allow Full Access or Limit Access… on the phone.
11. Posting from anywhere: the drop folder
Open Waiting for you → Drop folder → Choose… and pick (or create) a folder inside Google Drive, Dropbox or iCloud Drive on this Mac. Create phone folders makes one sub-folder per phone and group, plus All. Then, from anywhere (e.g. the Google Drive app on your phone):
| You put | iFarm does |
|---|---|
Apple's iPhone/clip.mp4 | one video post on that phone |
clip.txt next to it | uses its text as the caption |
Apple's iPhone/Beach day/1.jpg, 2.jpg… + caption.txt | one slideshow (photos sorted by name) |
clip.json with {"draft_at": "2026-11-02T18:30:00Z"} | waits until then |
a file in a group's folder, or All | the same post on each of those phones |
Files are picked up once they've stopped changing for 10 seconds (the sync has finished). The post is prepared on the phone exactly like a drag-and-drop and appears in Waiting for you (with a Mac notification) for Save draft / Post / Discard. After 30 minutes without an answer it's saved as a TikTok draft and listed under Saved as TikTok drafts, where Post now later opens TikTok's drafts, finds that draft by its caption, and posts it. (Drafts without a caption can't be found again, so give remote posts a caption.)
When a post is done, its files move into _drafted, _posted, _discarded or _failed (with a .reason.txt), so whoever dropped it can see what happened from anywhere.
12. Schedules, programs, flows and history
- Schedules (Plan → Schedules): run an automation or a flow on all phones, a group or chosen phones, once or N times a day at random moments inside a time window (optionally only on some weekdays). Each phone gets its own random times.
- Programs (Plan → Programs): a plan that changes by day, counted from each phone's (or account's) own start date. The built-in New account warm-up runs two niche warm-up sessions a day: 5–8 minutes on day 1, 8–12 on day 2, 10–15 on day 3, then 12–18 minutes every day after. Edit any day, add days, then Add phones or accounts… with their Day 1.
- Flows (Automations → + → New flow): put automations on a canvas as boxes and connect them: on success, on failure, always, with Wait and Stop boxes. Each box's menu sets its arrows.
- History (Plan → History): every run, with phone, what started it, result, and a screenshot when it failed.
- Each phone's page shows Planned today.
Planned runs wait while a phone is busy, stopped from the phone, offline, or in use: when its screen changed in the last minute without iFarm touching it, iFarm assumes someone is using it and retries until the window ends. A run missed by more than an hour (Mac asleep, iFarm closed) is skipped.
Connection tags: every phone shows a green USB or orange Wi-Fi tag. Measured on an iPhone 13 Pro Max: USB answers commands in about 6 ms vs 18 ms over Wi-Fi. The live stream is the same (24 fps, about 7.4 MB/s per phone at full quality). With many phones, USB keeps that traffic off your Wi-Fi.
13. Claude auto mode
Give a phone a goal ("warm up on my niche and suggest a few comments") and an AI drives it: it looks at screenshots and taps, swipes and types through iFarm. You watch it live on the tile, with each action in the run log. The AI is the brain and iFarm is the hands, so the brain is your choice: Claude, OpenAI, Google Gemini, or any OpenAI-compatible endpoint. Whichever you pick, iFarm's own rules still apply: Ask before posting, the run log, Stop and ⌘., and never buying anything. The brain must be able to see images and call tools (function calling); text-only models can't drive a phone.
Set up (AI brain button in the toolbar):
- Anthropic API key (pay per use). Create one at console.anthropic.com and paste it in. It's kept in this Mac's Keychain only. Every step sends a small screenshot (about 400×865), so long or frequent runs add up: set a spending limit in the console. Choose the model: Claude Opus 5.5 is the most capable, Claude Haiku 5.5 is by far the cheapest.
- Your own Claude Code (uses your Claude plan). For personal use on your own Mac: iFarm launches your own, unmodified Claude Code, signed in with your account, and gives it only iFarm's phone tools. No Claude Code yet? If you have the Claude desktop app, open it, click Code and start any session once (that downloads Claude Code, and iFarm uses it); or press Install Claude Code in iFarm to run Anthropic's installer. Installing the Claude app alone isn't enough. Then press Sign in to Claude Code: your browser opens Claude's sign-in page and iFarm turns green by itself when you're done (if the page shows a code instead, paste it into iFarm). Sign in with Terminal instead is there as a fallback. iFarm never sees your Claude sign-in. Anthropic's terms say apps should use API keys, so check this use fits your plan.
- OpenAI or Google Gemini (pay per use). Create a key at platform.openai.com or in Google AI Studio and paste it in (kept in this Mac's Keychain only), press Load models and pick one that takes images. You pay that company per use, under its terms.
- Custom / OpenAI-compatible (local models, OpenRouter…). Any server that speaks the OpenAI chat API. Pick OpenRouter for many hosted models behind one key (paste its key), or a local server below.
- A local model on this Mac (free, experimental). Run a model with Ollama or LM Studio instead of Claude; screenshots never leave the Mac. Install Ollama (ollama.com), download a model that can both see images and call tools (in Ollama's library, look for the vision and tools tags, for example
ollama pull qwen3-vl:8b), then choose Custom / OpenAI-compatible, pick Ollama (or LM Studio, after starting its server in the Developer tab), press Check and pick the model. Anything that speaks the OpenAI-style API works under Other. Be realistic: local models are much weaker than Claude at driving a phone. They're fine for short, clear tasks (open an app, tap something by its text, read a value), but slower, and they often get lost on long or judgment-heavy ones. Bigger models do better, and memory decides what fits: 16 GB runs 7–8B models, 24–32 GB runs 12–24B (the sweet spot), 48–64 GB runs 30B-class models. Local models need no subscription and have no usage limits. The same safety rules apply as with Claude.
Describe it, then save it (works for anything): on a phone's page, describe the task in plain words, tick Save what Claude does as a new automation, and press Hand the phone to Claude. Claude does it once while you watch; when it finishes, iFarm saves every step it took as a normal automation ("Built by Claude: …"). From then on it replays without Claude: fast, free, on any phone, on schedules, in flows, and shareable to the gallery. Each tap gets the same text matching and next-screen checks as a recording. If Claude took a detour (tapped the wrong thing and went back), the saved steps include it; delete those steps in the editor.
Use it: on a phone's page, enter the account's niche keywords, pick a goal preset or write one, and press Hand the phone to Claude. The built-in Claude: niche warm-up with comment suggestions automation does the same and can be scheduled.
How long Claude can run: each look, tap or swipe is a step (about one a second). Runs from a phone's Claude box can take up to 500 steps (about 10 minutes) by default; change it under Longest run in the toolbar's AI brain settings (up to 2,000, about 40 minutes). If a run reaches the limit, it says so; send it again to keep going. Longer runs use more of your AI plan or API credit.
Typing, sending and posting: Claude can type anywhere, including drafts in message and comment boxes ("prepare a text saying hello" leaves it in the box for you). Whether it then sends follows Setup → Preferences → Ask me before posting, sending or following:
- On (default): before a tap that sends or posts, you get Allow / Don't allow on the phone's tile and in Waiting for you (with the text shown). No answer in 3 minutes means no.
- Off: your automations and Claude tap any send or post button, in any app, without checking back: messages (including ones Claude writes for you), posts, follows, and comments in your own words. Public comments that Claude writes itself on other people's posts go out too, up to 3 per run; past that it pauses for one click. (The warm-up templates still use comment suggestions you approve.)
- Either way Claude never buys anything.
Stop Claude any time: Stop, ⌘., or hold volume up + down on the phone.
Niche search without Claude: the TikTok: niche search session automation searches the phone's next niche keyword, opens the video results and watches them. Schedule it to steer the feed.
Control iFarm from the Claude app: you can also drive the whole farm from a Claude Code chat, for example in the Claude desktop app's Code tab. In iFarm: the toolbar's AI brain, turn on Let Claude Code control iFarm, then press Connect Claude Code. Start a new chat and ask things like "list my iFarm phones", "show me Phone's screen", "run the niche warm-up on all phones for 20 minutes" or "on the 13 Pro Max, open Safari and search for my site". Claude can list phones and automations, start a phone's helper, see screens, tap, swipe and type, run automations, hand a phone a task (iFarm's own Claude then does it), check progress and stop.
It can also plan ahead: "warm up all phones every evening between 7 and 10", "post the niche session on the 13 Pro Max tomorrow at 9:30" or "what's scheduled?" (list_schedules, schedule_automation, remove_schedule). These are ordinary iFarm schedules, shown in Plan → Schedules: random times inside the window, busy or in-use phones retried, runs over an hour late skipped, and iFarm must be open for them to run.
Other AI apps can connect the same way. iFarm's line is a standard MCP server (over HTTP, on this Mac only), so any AI app on this Mac that supports MCP can use the same tools: press Copy setup for other AI apps and paste it into that app's MCP settings. It contains the secret key, so keep it private.
It can also hand iFarm media, the same as dragging a file onto a phone: send_media puts a video or photos (files on this Mac, or https links) into phones' Photos, and post_media also posts them to Instagram, TikTok, Snapchat, YouTube, Facebook or X with your caption. So with a media-generation tool connected to the same chat, one message can make a video and post it, e.g. "make a 10-second sunrise video and post it to Instagram and TikTok on the 13 Pro Max with the caption 'Morning ☀️'".
- It only works on this Mac, while iFarm is open: iFarm listens on a private address (127.0.0.1) with a secret key that Connect saves in Claude Code's settings.
- It goes through iFarm, so Stop, History, the phone's emergency stop, each phone's Up next queue and Ask before posting all still apply.
- Turn the switch off, or press Disconnect, to remove it.
- It's only between your Claude Code and your iFarm. iFarm has no servers or accounts, so no one can reach anyone else's Claude Code or phones. The plain-words explanation is on the website: "How Claude works with iFarm" (claude.html).
14. Community templates
Automations → Community templates lists automations other iFarm users have shared: what each does, who shared it, the apps it uses, and which iPhones and iOS versions it was tested on.
- Install saves a copy under Automations, marked Community · not reviewed by you. It can't run (by hand, on a schedule or in a flow) until you open it, read the steps and press I've read the steps. iFarm points out steps that type text, hand the phone to Claude, or can publish (which still needs your click every time).
- Update… appears when the author publishes a new version. You see what changed, step by step, before it replaces your copy, and you review it again.
- Templates are plain steps, never code. iFarm checks each one before installing: known steps only, and nothing that posts outside a choice you make.
Share yours: open one of your automations → Share to community….
- iFarm removes private details: phone names and IDs, saved passcodes, your Mac user name and file paths. Typed text becomes
$keyword(filled in from each phone's niche keywords) and draft captions become$caption. It lists what it changed and warns about anything else that looks personal (emails, @handles, long numbers). - Fill in a name, a description and your GitHub username. You see the exact file that will be shared and can edit it.
- Open pull request on GitHub (when the gallery is hosted on GitHub) opens GitHub in your browser, signed in as you, with the file filled in. Press Propose new file, then Create pull request. Checks run automatically, and people can review it in the open. Otherwise, Save template file… and send it to whoever runs your gallery.
Source → A gallery folder on this Mac lets you try a gallery (or your own templates) before publishing.
15. Running 24/7
Open Health in the sidebar (its badge counts problems). It shows:
- Capacity: "Room for about N more phones", worked out from this Mac's free memory and what your running phones actually use. Below it: the Mac's memory (used, free, and whether macOS is under memory pressure), what iFarm and each phone's helper use, live-view bandwidth, and a chart of the last 10 minutes. Each phone's row shows its own helper memory, CPU and bandwidth.
- Sleep. While a phone is running, or a schedule or program is on, iFarm keeps the Mac from sleeping on its own. The display can still sleep. This isn't a system setting: it stops the moment iFarm quits. Switch it off on the Health page if you don't want it. A laptop still sleeps when you close the lid.
- Start at login, reopen after a crash. Off until you click Enable. Move iFarm to your Applications folder first and open it from there. macOS may ask you to approve it in System Settings → General → Login Items. A normal Quit stays quit; only a crash brings iFarm back, after 30 seconds.
- Phone helper signing. When the helper on your phones stops being valid (a year on a paid Apple developer account, 7 days on a free one). iFarm rebuilds and renews it by itself in the last 3 days, the next time a phone starts.
- Each phone: running time, battery, live-view speed, helper restarts, and anything that needs you (low battery, a charge-only cable, stopped from the phone).
- A checklist for the hardware: powered hub and data cables, Auto-Lock Never or a saved passcode, Low Power Mode off, unlock once by hand after a phone restarts.
iFarm also raises its own open-file limit at launch so many phones don't run out of connections. That only affects iFarm itself.
16. Privacy and security
- Nothing leaves your Mac except: the WebDriverAgent download (once, checksum-verified), the community gallery list when you open it, and, only if you use Claude mode, screenshots sent to Anthropic.
- iFarm's local servers listen only on this Mac (127.0.0.1). Each phone's helper needs a secret only your Mac has, kept in the Keychain; with "USB only" the helper can't be reached from the network at all.
- Passcodes, the helper's secrets and any AI API keys (Anthropic, OpenAI, Gemini, custom) are stored only in this Mac's Keychain. iFarm never sees your Claude sign-in.
- iFarm never changes system settings. Keeping the Mac awake is an app-held request that ends when iFarm quits; start-at-login is off until you enable it.
- By default nothing is posted, sent or followed without a person's click (Setup → Preferences); nothing is ever bought.
Proxies and VPNs: iFarm doesn't change the phones' network settings. Each phone uses whatever Wi-Fi, cellular, VPN or proxy it's set to; if you want one, set it up on the phone yourself (iOS Settings or a proxy/VPN app), within the rules of the apps you use. For app testing, Settings → Wi-Fi → ⓘ → Configure Proxy works with debugging proxies like Charles or Proxyman.
17. Troubleshooting
Every problem iFarm recognises shows a card with the fix. The common ones:
| Card | What to do |
|---|---|
| Turn on Developer Mode | See section 4, step 3. |
| Trust the developer on the phone | Settings → General → VPN & Device Management → Trust. |
| Unlock the phone | Unlock it; iFarm retries on its own. |
| Sign in to the team in Xcode | Xcode → Settings → Accounts → add the Apple ID. |
| Accept Apple's latest agreement | Account Holder accepts it at developer.apple.com/account. |
| Free team app limit reached | Use a paid team or wait a week. |
| Phone is being prepared | First connection only; keep the phone unlocked for about a minute. |
| Phone not reachable | Use a USB cable, unlock the phone, try again. |
| Connect this phone with USB | Wi-Fi control is off in Setup → Preferences; plug in a cable or turn it on. |
| macOS says it can't verify iFarm is free of malware | Expected the first time: iFarm isn't notarized by Apple yet. System Settings → Privacy & Security → Open Anyway (see Install iFarm). |
|---|---|
| Community gallery isn't online yet | This copy wasn't built with a gallery address; use Source → a gallery folder, or download the release build. |
| A community template won't run | Open it and press I've read the steps first. |
USB tips (learned the hard way):
- Plug phones into the Mac itself or a powered USB hub, not a monitor's built-in hub. A display's USB 2 hub can drop the data connection as soon as Xcode starts the helper.
- On MacBooks, macOS may ask "Allow accessory to connect?" the first time a phone is plugged into a port. Click Allow.
- Quit Google Chrome (or close
chrome://inspect) if a phone keeps falling back to Wi-Fi. Chrome probes USB devices and can grab the phone while Xcode resets its connection. - Use a data cable. Some Lightning and USB-C cables only charge.
If USB drops, iFarm switches that phone to Wi-Fi (when allowed) without stopping, and moves back to USB when the cable works again.
Phones found over the network: iFarm also lists phones that Xcode can reach over Wi-Fi without a cable. These are never started automatically (a phone paired with this Mac in the past may not be part of your farm), so press Start on the ones you want.
Logs are in ~/Library/Application Support/iFarm/Logs (the Show logs button opens the folder). wda-build.log has the build and wda-<phone id>.log has each phone's runner output.
18. Uninstall
- Quit iFarm. If you enabled start at login, disable it on the Health page first.
- Drag iFarm from Applications to the Trash.
- To remove its data too: delete
~/Library/Application Support/iFarm. - On each phone, delete the iFarm helper app (press and hold → Remove App).
- Optional: in Keychain Access, search for "iFarm" to remove saved passcodes and secrets.