Skip to main content
A Software Factory is one coding agent with four parts in place: work arrives in a Slack channel, the agent runs on a coding harness, it pushes to GitHub, and gated commands wait for a named person. This page sets up each part in order. Each step links to the page with the full details. What this page covers today:

Before you start

  • An admin has connected your Slack workspace under Platform > Agents > Channels. See Slack workspace.
  • Your organization has a model provider enabled under Platform > AI governance > Models.
  • You can push to the GitHub repository the agent will work on.
1

Create the agent and pick a harness

Click New in the left column. In the composer, open Harness and model and pick Claude Code, Codex or OpenCode with a model. A choice made before the first conversation becomes the agent’s default.Open Agent settings from the gear in the conversation header. Under PROMPT, write the rules the agent follows on every ticket: which repository it works in, the base branch, the branch and commit naming, and the checks it runs before it opens a pull request.Details: Create and customize an agent.
2

Give the agent its computer

Under Agent settings > Advanced > Runtime environment, attach a runtime environment. Put the language toolchain and the CLIs your build needs in Packages, and the team’s conventions in Context. The GitHub CLI, gh, and a Chromium browser for UI checks are already installed for Claude Code, Codex and OpenCode sessions.Details: Runtime environments.
3

Let the agent push to GitHub

The agent clones, pushes and opens pull requests with git and gh. It gets GitHub access in one of two ways:
  • The xpander GitHub App. When the App is installed on the repository’s owner, every push in a session carries a token that lasts one hour and covers that one repository. No token is stored in the agent’s files. The App covers only the repositories the agent is allowed to use, and a self-hosted install may not offer it.
  • Your own GitHub token. Add it under Settings > Connections as a GitHub credential, GITHUB_TOKEN. git and gh use it in your own conversations only; other people’s conversations do not see it.
With neither in place, a push fails with an authentication error.Details: Credentials.
4

Gate the commands that need a person

Under Agent settings > Advanced > Gated commands, add the text of each command that must wait for approval, for example git push origin main, gh pr merge or terraform apply. A shell command that contains one of these strings stops and posts an approval card. Name the approvers on each entry; with no approvers named, the agent’s owner is asked.Gated commands apply in both permission modes, on schedules too. A held command does not run until someone clicks Approve. If nobody decides within the agent’s hold window, four hours by default, the command does not run and the agent continues with the rest of the task.Details: Approvals and Permissions.
5

Route a Slack channel to the agent

In Agent settings, click Configure on the CHANNEL row, then Add a channel to listen to. Pick the channel where tickets are posted, for example #eng-tickets. For a private channel, run /invite @xpander in Slack first.Expand Rules on the channel row and describe when the agent steps in, for example: “A message that links a bug or feature ticket and asks for a fix.” Turn on Also engage in thread replies so that answers to the agent’s questions in the ticket thread reach it.Details: Agents in Slack.
6

Post the first ticket

Post a small, well-defined ticket in the channel. The agent answers in a thread. It works in its own sandbox, with its own git working tree for that conversation, and it can run several tickets at the same time in separate conversations. It posts progress notes and questions in the thread, and it waits there when it needs your answer.When a command matches a gated entry, the approval card reaches the approvers in Xpander Chat and in Slack. After approval, the command runs and the agent continues.

Check the result

  • The thread holds the agent’s questions, progress notes and the link to the pull request.
  • The pull request on GitHub holds the change, written by the agent and pushed with the access from step 3.
  • The task in Xpander Chat shows every action with status and time, each approval with who decided, and the token usage and cost. See Conversations and tasks.

Next

  • Approvals: what waits, who decides, and what happens meanwhile.
  • Resident processes: how a coding agent waits for a pull request or a reply without holding capacity.
  • Desktop AI clients: which clients run as harnesses and which connect from a laptop.