Setup software to act as a real freelancer

Setup software to act as a real freelancer

Freelancer mode

Every ShipifyAI project runs in one of two modes. Company mode is the default and is what the rest of these guides describe: the AI works openly next to your developers and marks everything it produces. Freelancer mode is for a contractor who lets the worker deliver tasks on their behalf, so the client sees ordinary work from you rather than output from an AI agent. The integrations, AI provider settings, and column configuration are the same in both modes. This article explains what freelancer mode changes and how to set it up.

Choosing the mode

When you create a project, the dashboard first shows two cards, Company and Freelancer. Pick Freelancer and the regular project form opens with the mode preselected. You can switch an existing project at any time with the Project mode field in the Basic information card, and the project list shows the mode of every project next to its name.

What the worker does differently

Nothing the worker produces carries an AI marker. Commit messages and pull request titles look like `PROJ-123: Add login page` instead of starting with `[AI GENERATED]`, and the pull request description ends with the How to test section instead of a "generated by ShipifyAI" footer. Claude Code runs with its own `Co-Authored-By` attribution switched off, and whichever AI CLI the project uses is told never to mention AI, model or tool names, or automated generation in code, comments, documentation, or test names, and never to create commits itself, so no CLI can add its own trailer.

Each task is committed as a small series of logical commits instead of one. After the tests pass, the worker asks the AI CLI to group the changed files the way an experienced developer would, for example the data model first, then the service logic, then the UI, then the tests. Commit messages follow the style and language of the last ten commits on `main`, so they blend in with the rest of the history. The worker never trusts that plan blindly: files missing from the plan go into the last commit, a message that mentions AI is replaced with the task key and title, and a single-file change or an unusable plan simply becomes one commit. Commits are split by whole files, and only the final state is tested.

Workers never review pull requests. They do not answer review comments on their own pull requests and they do not run the full review pass on pull requests in the in-review column, so the Review rules card is hidden in the project form. Review comments from the client are yours to handle.

The task board only ever sees actions a person would take. When work starts the task moves to In Progress, and when the pull request is open the task moves to In Review with a plain "Pull request ready for review" comment and the link. When the AI decides a task description is unclear, the board is left untouched: the task stays in the source column, you receive a notification with the reason so you can ask the client in your own words, and the worker skips that task for 24 hours before evaluating it again. When a command is blocked by the allowList, only you are notified.

Working schedule

Freelancer mode adds a Working schedule to the Task pickup card, so your commits and pull requests appear during a normal working day rather than at three in the morning.

- **Start hour and End hour** set the local window in which the worker may start new tasks, for example 09:00 to 17:00. The end hour is exclusive and the window may wrap past midnight. Leave both empty to allow any time.

- **Monday to Friday only** stops pickup at weekends.

- **Timezone** is the IANA timezone the hours are counted in, prefilled from your browser.

- **Max tasks per day** caps how many tasks the worker starts per calendar day in that timezone. Tasks reported as unclear do not count. Leave it empty for no limit.

The schedule only controls when new tasks are picked up. A task that started at 16:55 is finished even if that takes past 17:00. Outside the window, or once the daily limit is reached, the worker prints the reason in the terminal and checks again every five minutes.

The minimum wait time, in hours, works the same in both modes. Setting it to a few hours stops the worker from grabbing a task the moment the client moves it to the source column, which would look suspiciously fast.

Good practice

Point notifications at a private Slack or Teams channel that only you can see. Notifications are the one place where the worker's activity is visible, so they must never land in the client's workspace.

Commits are authored with the git identity of the worker machine, the same name and email you use for manual work and that is linked to your GitHub or GitLab account. In freelancer mode the worker never sets an identity of its own: it reads `user.name` and `user.email` from the machine's git config (or the `GIT_AUTHOR_*` and `GIT_COMMITTER_*` environment variables), prints `Committing as Name <email>` at startup so you can confirm it, and refuses to start if none is configured. If the repository clone still carries the `ShipifyAI Agent` identity from an earlier company-mode run, the worker removes it. When running the worker in Docker, mount your git config read-only with `-v ~/.gitconfig:/home/worker/.gitconfig:ro`, because the container cannot see the host's configuration otherwise.

Read every pull request before the client does. The worker implements, self-reviews, and tests, but you remain responsible for what you deliver, and a quick read lets you answer the client's review comments with confidence.

Check your contract with the client. Some agreements require you to disclose the use of AI tools or restrict where client code may be processed. Freelancer mode removes markers from the work; it does not change what you have agreed to.

‍