Borago Board logo Borago Board

Home / Docs / Reference

Project settings reference

Every project setting in Borago Board, tab by tab, with what it does, its default, whether it syncs to other devices and what changes on a phone.

A project in Borago Board is one repository or folder with its own Docker container, its own AI credentials and its own queue of tasks. The project dialog creates and edits it. Open it for a new project with Add project in the board's filter bar (in the menu on a phone), which is headed New Project, or Create your first project on a board with no project yet. Open it for an existing project with Edit project among the project's controls, which is headed Edit Project. Creating a project walks the tabs in order as a wizard: Next moves one tab on and validates the tab being left, Previous goes back without checks, a tab unlocks once reached, and on the last tab Next becomes Create project. Editing keeps free tab navigation and ends with Save changes.

This page is true as of 2026-09-28. The tabs, in the order the dialog shows them, are Project Info, AI instructions, AI Auth, AI Roles, Environment Variables, Ports, Scripts, Containers, Docker Compose and Dockerfiles. Ports, Docker Compose and Dockerfiles appear only while the container name mode is Auto-generated (Containers tab). Labels below are the exact on-screen labels. The Syncs column says whether the value travels to the account's other devices through cloud sync or stays on one machine, following the rules in Cloud sync.

Validation, and what a refused save does

The dialog checks only things that would otherwise be lost silently. Next checks the tab being left. Create project and Save changes check every tab in tab order. A refused save writes the reason in the footer, switches to the tab the problem is on, scrolls to the field and puts the cursor in it. The rules are a project name, a task runner service, no environment variable with a value but no name, no duplicate variable name, a port row with both sides filled and each between 1 and 65535, no host port published twice, a container name when the mode is Custom, an API key typed without its 18+ confirmation, and a role set to a self-hosted service without saying which server when the account has more than one. Filled port rows are also checked against the machine when leaving the Ports tab or saving, and a clash lands on the row.

Project Info

What the project is and where its code lives. The container memory limit sits at the bottom of this tab for an Auto-generated container.

LabelWhat it doesDefaultSyncsNotes
Project nameThe name on the board. With the Auto-generated container mode it also derives the container name, and it names the folder the desktop keeps the project's Docker files in.Empty. RequiredYesThe wizard refuses to leave this tab without one. Renaming moves the Docker folder on each device.
Local pathThe folder on the machine that runs the containers, mounted into the container at /app. Empty is a supported choice when a Git repository URL is set, since the code is then cloned inside the container.EmptyYes, as the account's pathOn the desktop a Browse button opens the operating system's folder dialog, which can create folders. A browser, on your network or the cloud, and the phone have no Browse: type the path, or let the desktop create a folder for you with Create a folder for me (see the last section). A project with neither a path nor a Git URL cannot run.
BrowseOpens a folder chooser and writes the chosen path into the field beside it.Not storedOn Linux, when the portal dialog fails to open at all, the app falls back to another system chooser, then to its own picker, and says why. Pressing Browse again while a dialog is open joins the open dialog rather than opening a second one.
Folder on this deviceThis device's own folder for the project when the synced path does not exist here, such as a different home directory or an unmounted drive. Unfolds from the link Use a different folder on this device under the path.Not set, the shared path is usedNo, per machineEditing only, desktop and local network browser. Has Create a folder for me and Use the shared one, which removes the override, and on the desktop its own Browse. A container Start refused because the folder is missing opens the dialog on this field and retries the Start after the save.
Create a folder for meThe desktop creates a workspace folder beside the project's Docker files and writes its path into the field.Follows the field it fillsSaved projects only. Shown under the device folder on the desktop, and under the shared path on the cloud browser and phone, where the desktop must be connected. The result names the folder it created.
Git repository URLCloned into the container's /app on container start, only when /app is empty. An existing checkout is never touched.EmptyYesAn HTTPS URL pairs with a token, an SSH URL with a private key, and a public repository over HTTPS needs no credential. The How does authentication work? link opens that pairing table. Without a Local path the code exists only in the container, so a Restart or Rebuild discards uncommitted and unpushed work and re-clones a clean tree. A failed clone fails the start and raises a notification that opens this tab.
Git branchThe branch cloned. On later starts, a checkout sitting on another branch is switched to it.Empty, the remote's default branchYesA branch missing on the remote is reported as a warning. A working tree with uncommitted changes refuses the switch.
Commit nameThe name on the commits the agent makes in this project.EmptyYesApplied in every run, terminal, script and flow, and inside the container on every start and on save. Blank clears it.
Commit emailThe email on the agent's commits.EmptyYesSame as Commit name.
Git accessHow the container authenticates to a private repository. Exactly one of three sources is in effect at a time, a forge sign-in, a saved key from the vault, or a pasted token or SSH private key. While one is set, only that one is shown with its Remove, Unlink or Disconnect button.NoneA pasted key syncs encrypted to the account's other desktops unless kept on this device. A vault link always syncsA stored key is write-only and reads A key is stored (hidden). The credential rides the container's environment on every run, so the agent can use git normally. Prefer a dedicated least-privilege key or token. Earlier values kept on this device are listed under the field and can be restored.
Sign in with GitLabSigns in to GitLab with a device code, lists the repositories you maintain, and creates a deploy key for the one you pick. The URL and the key are filled in together.The result syncs like any keyThe first step is an acknowledgement that a deploy key will be created and that the agent runs with the key in its environment. The sign-in token is spent on that one call and discarded. The browser is never opened automatically, the link is offered to open or copy. There is no GitHub sign-in, so GitHub users paste a token or a key instead. Needs the desktop connected. On a project not yet saved the key is held on the desktop for 30 minutes and written by Create project, and Disconnect removes the deploy key from the repository again.
Paste a token or keyOpens a box for a personal access token or a multi-line SSH private key.Encrypted, unless kept on this deviceA live warning names a key type that does not match the URL form. Cancel clears the box.
Or use a saved keyLinks a key from the account's vault. The value is resolved on the machine that runs the containers, at clone time, and is never shown.Not linkedYes, the linkWorks from a browser or phone with nothing decrypted. A key deleted elsewhere reads This saved key no longer exists. Manage saved keys opens the vault.
Keep this key on this device onlyRemoves the pasted key from the cloud on save and stops it reaching your other devices.Off, the key syncs encryptedThe choice syncsShown beside the paste box. You enter the key again on each device.
Container memory limitCaps the RAM the project container may use. With Automatic ticked the cap is derived from the RAM of whichever machine runs the container.AutomaticA set value syncs. Automatic is recalculated per machineAuto-generated container only. Automatic keeps a reserve for the machine itself and gives the container the rest. A hand-set value is at least 256 MiB and applies on the next Restart or Rebuild. The text states how much is left for everything else. A container that exceeds its limit is killed and restarted automatically, and the board raises a notice. When the machine has not reported its RAM the automatic value is unknown and any set value still applies.
AutomaticSwitches the memory limit between derived and hand-set. Unticking seeds the slider and the number box with the derived value.TickedAs aboveThe slider stops at plausible values. The number box commits on leaving the field.
Who owns this project?Desktop only, when creating a project while signed out of cloud sync with a known last account. Add it to that account, or leave it Unclaimed.Add to the last accountAn unclaimed project stays local until an account signs in and claims it. Not shown while signed in, when the account is stamped automatically.

AI instructions

Text the AI reads. The first box is paid for on every run, the second only by the reviews.

LabelWhat it doesDefaultSyncsNotes
Global AI instructionsIncluded in every task prompt for this project.On create, a starter workflow. With a Git repository URL it lists branching per feature, publishing the branch, adding and verifying unit tests, merging to main and publishing main. Without one it is the single line about unit tests. Editing keeps the saved textYesThe starter text switches between its two variants as the Git URL is filled in or cleared, until the first keystroke makes it yours. The AI keeps its own notes about the codebase separately. Guidance for the reviews belongs in the next box.
Review instructionsSent to the pre-run and post-run reviews only, never to the task runner. Silences review noise that does not fit this project, or names what the reviews should watch for.EmptyYesThe same field appears collapsed on the AI Roles tab. While both review phases are off, an amber note says nothing reads it yet.
MCP serversNothing. Runs have no MCP client, so the choice changes nothing.OffYesListed so its presence is not read as a working feature.

AI Auth

Who the project runs as. One credential card per provider, always all four, because a task can override the project's service. The card titles read Claude account (Anthropic), Codex account (OpenAI), Grok account (xAI) and Gemini account (Google). The card labelled Codex is the OpenAI provider. Every card is API key only. There is no subscription sign-in. Which model runs is chosen on the AI Roles tab, not here.

LabelWhat it doesDefaultSyncsNotes
AI credentials (this project)The heading over the four provider cards. Each card holds the key field with Verify, the enhanced accuracy toggle on a saved project, that provider's cost budget and its keep-on-this-device choice.No key on any cardSee the rows belowA key belongs to the project. Two projects can hold different keys for one provider.
I confirm I am 18 years of age or olderThe affirmation required before a key can be typed on that card. Each provider's line also affirms meeting that provider's own requirements.Unticked, per sessionNoThe key field stays disabled until it is ticked, and unticking drops a typed key. A save with a key typed and no tick is refused and lands on the checkbox.
API keyThe provider's API key. Stored encrypted and used from the desktop process to call the provider. Never shown again once stored.NoneYes, encrypted, to the account's other desktops, unless kept on this deviceEntered at creation and stored the moment the project is created, which the field says (Saved when you create the project). When editing, Save changes stores a typed key as well. If the project saves but the key does not, the dialog reopens on this tab with the reason rather than risking a duplicate project. A stored key shows API token configured with Verify, Replace and Remove. A run the provider rejects with HTTP 401 pauses the project's queue and marks the card.
VerifyChecks the typed key, or the stored one when nothing is typed, by listing the account's models at the provider. Free.Works on a project that does not exist yet. The result reads This key works. or the provider's error.
Enhanced accuracy modeRuns this project's tasks on that provider at its highest reasoning setting, on the models that accept one. Other models run unchanged. Spends noticeably more tokens per run.OffYesOne switch per provider. Saved immediately, behind a confirmation that states the cost. On Claude it also gives each run a token budget the model paces itself against. Shown on a saved project that has a container name.
Cost budget (USD, this machine)Pauses the auto-queue for that provider's tasks when this machine's estimated spend reaches the amount. The other providers keep running.Blank, no limitNo, per machine, and so is the running totalBlank or zero means no limit. Changing the amount resets the spend. On a saved project with a budget the spend so far is shown with Reset spend. Manual runs are not gated. See Cost and usage.
Keep this API token on this device onlyRemoves that provider's key from the cloud on save and stops it reaching your other devices.Off, the key syncs encryptedThe choice syncsYou enter the key again on each device.
Business shared keysLinks a key a business shared with this account into a provider slot. Runs use it instead of the project's own key, and you never see the key.None (use this project's own token)Yes, the linkShown only when a business has shared a key with you or a link exists. A revoked key stays visible as no longer available, and runs fall back to the project's own key. See Business accounts.
Self-hosted AI servicesA read-only list of the account's model servers with an online dot for each, and Manage in Settings, which opens Settings on Self-hosted services.The servers sync, only the address can differ per machineNothing about the project is chosen here. Which server each role uses is picked on the AI Roles tab.

AI Roles

Which AI does what. Five roles, each a service and a model. The task runner is the only required role and nothing is preselected, so a project never inherits a provider you did not choose. Every service is listed, including each self-hosted server by name, and a service with no key on this device carries the suffix not set up on this device plus an amber warning that runs will fail until it is added on AI Auth. The warnings appear only once the dialog has checked what is set up.

The pre-run review defaults to the task runner's service, and the post-run review, chat and flows default to the pre-run review's pair. A role's model inherits only when both roles land on the same service, because model ids belong to one provider. Changing a role's service clears its model for the same reason, and a model saved under another provider is flagged and the provider's default runs instead. When a task runs and the task runner's service has no key, the run does not start. The task is moved to Blocked with a comment saying which key is missing and where to add it, and moving it back to To Do retries. The reviews never block a task. Without a usable key they return no verdict.

LabelWhat it doesDefaultSyncsNotes
Task runnerThe service and model that run this project's tasks. The model is the project's default for that service, and a task can override both.Select a service. RequiredYesThe wizard refuses to continue without a service. On a self-hosted server, instruct-tier models are excluded because they cannot drive a tool loop. A blank model means the provider's default model.
ModelThe model dropdown beside every role. Disabled until a service is chosen, lists only that service's catalog, and is cleared when the service changes.Select a model, or the role's inherit labelYesOn a self-hosted server the list shows what the chosen server has first, then other known models, then Other (type a model name) for an id the list does not have. A saved model missing from the catalog still shows as the selection.
Review tasks before they runSwitches the pre-run review on. A cheap call reads a task when it is created or edited and leaves questions, a suggested rewrite or a duplicate warning as comments.OnYesQuestions hold the queue until answered. A rewrite is never applied by itself. Usually saves money, since a question raised mid-run restarts the task from the beginning. See When the agent asks a question.
Pre-run reviewThe service and model for that review.The task runner's service, with the model Cheapest for this serviceYesShown while the checkbox above is ticked.
Review the result after a runSwitches the post-run review on. It reads what actually changed and leaves a note if the work looks incomplete. Never changes the task or re-runs it.OffYesAdds a call to every run and cannot save you one, which the note under it says. Needs a git repository at /app to have anything to read, a local one is enough. The cost note is hidden when the role resolves to a self-hosted server.
Post-run reviewThe service and model for that review. A coding model suits it, since it judges a diff.Same as the pre-run reviewYesShown while the checkbox above is ticked.
Review instructionsThe same field as on the AI instructions tab, collapsed.EmptyYesShown while at least one review phase is on. Marked (set) when it has text.
Plan tasks by chattingSwitches chat for this project on. Talk a requirement through, then turn the conversation into tasks.OnYesCosts nothing until a conversation is opened. Chat reads the repository only when you mention a file or type @/, and pulls in an earlier conversation only when you mention it. See Chat to tasks.
ChatThe service and model for chat. A general model suits a conversation.Same as the pre-run reviewYesShown while the checkbox above is ticked.
FlowsThe service and model that read a flow and write the code for its deterministic steps.Same as the pre-run reviewYesNo on or off switch, because nothing runs until a flow is built and enabled. The only role that writes code that later runs, so it is worth more than the cheapest model. A flow step can override it. See Flows.
Self-hosted AI services (your hardware)The group in every role's service list with one entry per server on the account. Picking one sets the role to that server.The server's name syncs, its address never doesWith exactly one server, a role set to self-hosted without naming it is written down as that server on save. With several and none picked, the save is refused with the reason and lands on this tab. A server the project names that this account lacks stays selectable and says so.

From the cloud browser or the phone all five roles can be set. A note says they run on your desktop app, which picks them up on the next sync.

Environment Variables

Values injected into the container's process environment every time a run, a terminal, a script or a flow starts. They are never written into the compose file or the Dockerfile, and a process started by any other means inside the container does not see them. Encrypted at rest. The two per-variable flags share one invariant. Neither changes what the container receives.

LabelWhat it doesDefaultSyncsNotes
+ Add variableAdds an empty row.A row with a value and no name, or a name used twice, is refused at save and the cursor lands on it.
ImportUnfolds a paste box for a dotenv file, YAML (including a compose environment block) or a JSON object. Add variables merges the rows into the list, updating existing names.ClosedNothing is saved until the dialog's own Save. A bad paste costs nothing.
NameThe variable's name. Copy button beside it.Yes, alwaysVault links are keyed by name, so renaming moves the link.
ValueThe variable's value. Always masked. The eye reveals one row until the dialog closes, and the copy button copies it.Yes, encrypted, to the account's other desktops, unless flagged or opted out belowMasking is not a setting. Reveal state never persists. A write-only value that is stored but not sent shows a placeholder saying so, and leaving it blank keeps the stored value.
Write only (Never show again)The value keeps working in every run but is never sent back to any screen, including this one. From then on it can be replaced, never read.OffThe flag syncsThe right choice for a credential you never need to read back.
Do not sync this oneKeeps the value on this computer. Your other devices get the variable's name but no value, and you enter it again there.OffThe flag syncs, the value never leaves the machineThe name still travels so the other device knows the variable exists and why it is empty.
Saved keyLinks this variable to a key in the vault. The typed value is disabled while linked and returns when the link is removed.Not linkedYes, the linkShown once the row has a name and the account has a saved key. Unlink and Use a different key manage it. A link that cannot be resolved contributes nothing rather than an empty value. See Secrets and environment variables.
Remove variableRemoves the row and its vault link.
Keep these variables on this device onlyRemoves the whole set from the cloud on save and stops it reaching your other devices.Off, the set syncs encryptedThe choice syncsUnder the heading All variables in this project, at the end of the list.
earlier values kept on this deviceThe history of earlier values for the set, folded away. Restore re-encrypts one and saves it as the current value. Forget this history deletes them from this device after a confirmation.FoldedNever syncedShown only when a version other than the current one exists. Nothing else keeps a copy.
+ Add or replace a variableCloud browser and phone only. Adds one name and value that is sent to the desktop after the save, one pair at a time, so the variables this client cannot see are left exactly as they are. Remove this variable instead removes the named one.Written by the desktop, then syncedExisting values cannot be shown there because they are encrypted under a key the cloud does not store. Up to 20 rows per save. The desktop must be running.

Ports

Auto-generated container only. A published port lets you reach the container at localhost on the host port. Changes take effect on restart, keep your compose edits, and stay on this machine unless Expose to LAN is on. With no rows the container is isolated.

LabelWhat it doesDefaultSyncsNotes
+ Add portAdds a row. The first row is blank. Each row after it proposes the previous row's host port plus one.The proposal is a starting value, not a claim that the port is free.
HostThe port on your machine you open in a browser.EmptyYesRequired with the container port. 1 to 65535. A port that browsers refuse to load, such as 6000 or 6667, gets an amber warning suggesting another, and saving is not blocked.
ContainerThe port the server listens on inside the container.EmptyYesRequired with the host port.
CheckConfirms the host port is free: no other project on this board publishes it, a stopped project included, and this machine can bind it right now, which catches programs outside the board.Names the project holding a port. The project's own running container does not count against itself. Also run for every filled row when leaving the tab or saving, and a clash is refused and lands on the row. A machine that cannot answer, such as the cloud with no Docker, does not block the save.
Expose to LANPublishes the port on every network interface instead of 127.0.0.1 only.Off, loopback onlyYesA Docker-published port bypasses the host firewall, which is why loopback is the default. Settings, then Docker, Keep project containers off the local network keeps every project on that computer on loopback whatever this says. See Ports and LAN access.
Remove portRemoves the row.

Scripts

Named shell scripts that run in a container of the project's family with the project's environment variables, git credential and, on a container-managing project, its Docker access. This tab edits them. They are run from the Scripts button in the top bar. Available in both container name modes. Output streams live to the board and is never stored, so the panel showing it is the only copy. A run has no time limit, and Stop ends the process inside the container.

LabelWhat it doesDefaultSyncsNotes
+ Add scriptAdds an empty script.Trigger Manual, the project containerYesUp to 25 scripts per project, 20,000 characters each. Names are unique per project.
Add startup scriptThe empty-state button. Creates a script named Startup with the Startup trigger, prefilled for the project container.YesThe commonest first script, for installs, migrations and seeds.
ImportReads a text file (.sh, .txt or no extension) into a new script named after the file.YesA binary file is refused with a reason.
Script nameThe script's name.EmptyYes
ContainerWhich container the script runs in, one of the project container, a configured sibling, or a container the agent created.The project containerYesThe list is the live family plus configured siblings, so a stopped sibling is still selectable.
TriggerManual runs only when pressed. Startup runs after that container starts and after any git clone, in list order, one after another.ManualYesA startup script can still be run by hand. A failing one does not stop the others. A container stop never runs them.
Run this script now to test itThe play button. Runs the current, possibly unsaved, text in the target container and shows the output under the editor. Turns into Stop while running.Needs a saved project and the desktop connected. Disabled with the reason otherwise.
Export this script to a .sh fileDownloads the body verbatim, with no shebang added.
Insert file pathBrowses the target container's files and inserts a shell-quoted path at the cursor.Saved projects only, since browsing needs the container.
Remove scriptRemoves the script after a confirmation. The body is gone once the project saves.

See The terminal, scripts and the file browser.

Containers

The container the agent works in, and what it may do with Docker. This tab is always listed because it holds the name mode switch.

LabelWhat it doesDefaultSyncsNotes
Dev container nameThe name of the container tasks run in. Auto-generated derives it from the project name, so it always matches the generated compose file. Custom points the project at a container you build and run yourself, and the board only runs the agent inside it.Auto-generatedYes. Each device runs its own container under the nameTasks are blocked while this container is not running. Custom hides the Ports, Docker Compose and Dockerfiles tabs, uses no published ports, and needs a name that matches the container's own. A custom name is required.
Base imageThe system the generated Dockerfile starts from. Ubuntu 26.04 LTS, Ubuntu 24.04 LTS or Debian 13 (trixie).Ubuntu 26.04 LTS for a new project. A project created before the setting existed stays on Ubuntu 24.04 LTSYesAuto-generated only. Takes effect the next time the container is started, restarted or rebuilt, and a running container is offered a rebuild on save. A hand-edited Dockerfile decides for itself. When its first FROM line names one of the three images, the picker rewrites that line. When it names anything else the picker is disabled and says the Dockerfile decides. See Change the base image or pin an architecture.
Container CPU architectureBuilds the container for x64 (Intel/AMD) or arm64 (Apple Silicon, ARM). Default builds for whatever machine runs the container.Default (this machine)A forced value syncs. Default is decided per machineAuto-generated only. Force one only for a dependency that exists for a single architecture. On a machine of the other kind a forced architecture runs emulated, slower and without gVisor, and a notice says so once. Where the machine cannot emulate it the start is refused and the message names the fix. Hints in a Dockerfile (a pinned platform, i386 packages, an architecture in a download URL) and matching build failures are reported as notices that point here. Nothing is changed automatically.
Sibling containersNames of containers you run yourself, such as a database, so that Start all, Stop all and the container list include them.NoneOnly the names syncUp to 20. The board never creates, builds or removes a sibling. On another device a sibling that is not there is listed as not on this machine, with no buttons.
Allow this container to manage Docker containersLets the agent create, run and delete containers from inside this one, for dockerized apps. Its Docker access goes through a policy proxy that forces gVisor where installed, denies privileged mode and host mounts, tracks everything it creates and lets it touch only this project's own containers.OffYes. The proxy port and the firewall rule are per machineAuto-generated only. Widens the trust boundary, and a warning says so. Saving with it on installs the Docker client into the running container in the background and adds it to the Dockerfile so a rebuild keeps it. Containers the agent creates are placed on the project's own network, once a project created on an older version has been moved onto it. See Container management.
Let other devices reach containers the AI createsPublishes the ports of containers the agent creates on the local network. Off keeps them on this computer.OffYesShown while management is on.
Connected projectsOther projects this container can reach by name, each over a private pair network the board creates between the two once both projects are on their own networks. The connection is symmetric and shows on the other project too.NoneYes. Each computer builds its own networksSaved projects only. Connect a project picks from the board's other projects. Applies once both containers restart, and a change offers the restart. See Connected projects.
Docker container managementThe firewall panel under the management switch. Shows the proxy's address and port, whether the container can reach it, the firewall tool detected, and Allow through firewall, Remove firewall rule, Copy command and Check.The rule is per machineLinux only, because macOS and Windows have no host firewall in the path. Status is measured from inside the container, by whether it can reach the proxy, never by reading the firewall. Applying the rule raises one administrator prompt, or opens a terminal, or hands you the command to run, and the exact command is shown afterwards either way. After an apply the panel re-checks itself until the container reaches the proxy. Save the project first, then come back to check. See Firewall.
Install gVisorShown with a warning on a Linux machine whose Docker has no gVisor runtime registered. Opens the Docker setup wizard in gVisor mode. Install guide opens the upstream instructions.Without gVisor the container runs without sandbox isolation. Nothing is blocked. Not shown on macOS and Windows, where Docker Desktop's virtual machine isolates the host.

Docker Compose

Auto-generated container only. The compose file the container is started from.

LabelWhat it doesDefaultSyncsNotes
docker-compose.ymlThe compose text. While untouched it is a live preview that regenerates as the project name, ports, architecture and base image change, and it is not stored. Editing it stores your text verbatim and stops the preview.GeneratedYes, once editedA stored file still receives the board's injected parts on every start, which are published ports with the loopback rule, the sandbox runtime, the memory cap, a pinned architecture and the project network, once a project created on an older version has been moved onto it. Environment variables are never written into it. A compose change on a running container offers a Restart on save. Read-only on the cloud browser and phone until the desktop is connected, because the desktop generates it.
Generate Docker BoilerplateRegenerates both files from the form and resumes the live preview, discarding hand edits.Preview only. Nothing is written to disk until the project is saved.

Dockerfiles

Auto-generated container only. The files the container image is built from.

LabelWhat it doesDefaultSyncsNotes
DockerfilesOne editor per file, each with a filename and its content. Live preview until edited, then stored verbatim.One generated DockerfileYes, once editedAn edited Dockerfile's first FROM line decides the base image. Turning container management on adds the Docker client to a stored file in the same save. A change offers a Rebuild on save. Read-only until the desktop is connected.
+ Add DockerfileAdds an empty file editor.Each needs a filename.
Remove fileRemoves that file.
LabelWhat it doesDefaultSyncsNotes
CancelCloses without saving.A click on the backdrop does not close the dialog.
PreviousWizard only. Goes back one tab with no checks.
NextWizard only. Validates the current tab and moves to the next.Becomes Create project on the last tab. Disabled until the project has a name.
Create projectCreates the project after checking every tab, stores any typed API keys, and then asks Start the container now?The first start builds the image, which can take minutes, so it is asked rather than done. Start container starts it in the background and Not now leaves it stopped. Both close the dialog. Asked for an Auto-generated container when some machine can start it.
Save changesSaves after checking every tab. When a change needs the running container recreated, the dialog stays open and asks Restart the container? or Rebuild the container?A Dockerfile or base image change needs a rebuild. A name, path, port, compose, startup or connected-project change needs a restart. Environment variables need neither. Later saves without acting. When the code lives only in the container the prompt warns that a recreate discards uncommitted and unpushed work. The prompt appears on the desktop and the local network browser, not on the cloud browser.
Delete projectMoves the project and its tasks to the recycle bin for 30 days and stops its container.Type the project name to confirm. See Recovering things.

From the cloud browser or the phone

The dialog is the same on every surface. What differs is where the work happens.

  • Secrets are written through the desktop. An API key, a pasted git key or an environment variable typed on the cloud browser or the phone travels over TLS through the cloud, which holds it in memory only and never stores it, to your own desktop app, which encrypts it under the account key and syncs it back. The desktop must be running with cloud sync on. The field says so, and existing values cannot be shown because the cloud never stores the key that would decrypt them.
  • Environment variables are added or replaced one pair at a time there, never as a list, so the values that client cannot see are never deleted.
  • Linking a saved key from the vault, and linking a business shared key, work everywhere with no desktop awake. A link names a credential without being one.
  • The folder is chosen by the desktop. There is no Browse. Create a folder for me asks the desktop to create a workspace folder beside the project's Docker files and reports where it went. Typing a full path also works, and the desktop creates it when the project arrives.
  • Controls whose work happens on the desktop are shown and disabled with one reason when the desktop is not connected, never hidden. The reason reads Your desktop app is not connected. Open it (with cloud sync on) to use this. This covers the script test run, the firewall panel, the container start prompt, GitLab sign-in, verifying and storing keys, and Create a folder for me.
  • The Docker Compose and Dockerfiles editors are read-only until the desktop is connected, because a preview generated anywhere else would not match what the desktop writes.
  • The container memory limit and CPU architecture describe the machine that runs the containers, so their automatic values are unknown until the desktop reports them, and any value you set still applies.
  • The AI roles can be set from a browser or phone and take effect on the desktop at the next sync.
  • The restart or rebuild prompt after a save appears only on the desktop and the local network browser. From the cloud, use the board's container controls, which relay to the desktop.

Related: Settings reference, Creating a project, Choosing an AI provider, Cloud sync, browser and phone, Security.

Source as Markdown: /docs/reference/project-settings.md · Updated 2026-10-11 · Was this right? Tell us