PanelAlpha Documentation
Back Home
Live Demo Get Started

Connecting your AI

Documentation

    # Connecting your AI

    Once your assistant is connected, you run your hosting by describing what you want in a chat window. You say "list my projects", "set up WordPress", "deploy this repository" or "this site is broken, what happened?", and it does the work.

    You need an installed engine. The installer already printed a Claude Code command. For any other assistant, get yours with Create a token.

    # Set your assistant up

    On your VPS, run pae connect and pick yours with the arrow keys. Each page below has how to check it worked and what usually goes wrong.

    Assistant Page
    Claude Code Set up Claude Code
    Claude Desktop Set up Claude Desktop
    Cursor Set up Cursor
    Codex Set up Codex
    ChatGPT Desktop Set up ChatGPT Desktop
    Gemini CLI Set up Gemini CLI
    VS Code / GitHub Copilot Set up VS Code and Copilot
    Grok Set up Grok
    OpenCode Set up OpenCode
    Windsurf Set up Windsurf
    Pi Set up Pi
    Hermes Set up Hermes
    OpenClaw Set up OpenClaw

    Using something else? Any assistant that speaks MCP will work: Connecting other assistants.

    # Decide what the assistant may do

    Read this before you paste a token anywhere.

    A token with default permissions can permanently delete an entire project and everything in it, including its files, databases and websites. That is what the engine's own interface can do, and the token grants access to all of it.

    # The quick way: let the engine ask

    pae configure mcp-tokens
    

    What this does: opens the assistant part of Configure the engine. Choose Global scope for checkboxes, whole groups or one group's commands at a time, and one setting for how far a ticked command may go. Tick what every assistant may use, untick what it may not. Nothing is written until you pick Review and save and say yes, and what it replaces is printed so you can put it back. Add --dry-run to see what it would write and write nothing.

    pae configure on its own starts one level up, with the address, tokens, the queue, and telemetry.

    Use it instead of editing the file by hand. The rest of this section is the reference for the settings it writes, and how to set the same things yourself.

    # Different limits for different assistants

    Everything above applies to the whole engine. To give one assistant less than another, run the same command and choose Tokens. It lists your assistants' tokens, and lets you tick what each one may use. It can only take away. An assistant cannot be given a command the engine is not offering. Ticking everything means "no limit", so that assistant keeps whatever the engine offers. pae mcp:token:list shows the result in its Commands column.

    An assistant asked for its command list when it connected, so reconnect it to see the change.

    A token minted for an assistant is refused if someone tries to use it against the engine's own API directly, so these limits are not one command away from being stepped around. A token minted for your own software (pae api:token:create) is refused at the assistant endpoint for the same reason. Tokens made before this distinction existed can still do both; mint a new one of the right kind to narrow that.

    A token can also be limited to some projects instead of some commands. pae cannot make one, software that calls the engine's API does: A token limited to some projects.

    Whatever the limits, a token you no longer trust should be revoked with pae mcp:token:revoke {id}, which stops it everywhere at once.

    These settings live in /opt/panelalpha/shared-hosting/.env-core. If you edit that file by hand, the change does nothing until you restart the engine: Change a setting. Either way, an assistant that is already connected keeps the tool list it was given when it connected. Reconnect it to see the change.

    # How far it may go

    Value What the assistant can do
    readonly Look at what is switched on, change nothing. Inspecting a repository still works. The tools that hand out a password or a login (system_exim_config_get, app_credentials_get) are not offered.
    modify Create and change things, and blocks only DELETE routes. It is not a "no destructive actions" setting: the write tools that are not plain creations (ssh_run, wp_cli_run, backup_restore, file_write, system_update, firewall_disable, project_rebuild) still run.
    full Everything, including deletion. This is the default.
    MCP_PERMISSION_MODE=readonly
    

    # Which areas it can see

    A new install exposes every group. The group names the setting accepts are in the table on Every tool. That is also the default:

    MCP_TOOLSETS=all
    

    To limit the assistant to some groups, replace all with a comma-separated list of those names. Do not add one name on top of all: all already includes every group.

    An empty value means every group, not none. A setting nobody has touched and one that permits everything are the same thing here, so if you want no group at all, write MCP_TOOLSETS=none. Single tools named in MCP_TOOLS still work on top of that.

    If this engine was installed earlier and you never set MCP_TOOLSETS, the assistant now sees every group, including ones it could not see before. Narrow the list if that is more than you want.

    # One tool from an off group

    Use this when you want a single operation from a group you are otherwise leaving off:

    MCP_TOOLS=wp_cli_run,project_setting_set
    

    What this does: exposes those tools on top of the groups above. Names must match the tool names on Every tool.

    # Tools to take away

    MCP_DENIED_TOOLS=project_delete,*_delete
    

    What this does: removes those tools no matter what enabled them. * matches a family: project_* is every project tool, *_delete is every delete.

    A regular expression, without delimiters, is also accepted as MCP_DENIED_TOOLS_REGEX. An invalid pattern is ignored, so a typo cannot silently disable the denylist.

    A tool has to be in an enabled group (or named in MCP_TOOLS), allowed by the permission ceiling, and not denied. Denials always win. Naming a destructive tool in MCP_TOOLS does not get it past MCP_PERMISSION_MODE=readonly.

    # How many tools the assistant loads

    The full list is 225 tools, and an assistant loads every listed tool's description when it connects. That is about 95 KB of text it carries around before you have asked for anything. So by default the engine lists only what deploying, checking and running a project takes, plus two more:

    • search_tools finds any other tool by what it does, for example mysql user or cron.
    • execute_tools runs the tool it found.

    The assistant does this on its own when you ask for something that is not in the short list. Nothing is hidden this way. Everything the settings above allow can still be found and run, and nothing they remove can.

    MCP_TOOL_SEARCH=true
    MCP_DIRECT_TOOLS=project_get,project_create,project_rebuild,task_get,deploy_log_get
    

    MCP_DIRECT_TOOLS is the short list, comma-separated, with * wildcards. To list every tool directly, as older engines did, set MCP_TOOL_SEARCH=false. Left unset, the short list is:

    For Tools
    Overview metrics_latest, project_list_summary, project_list
    Deploying project_create, project_deploy_archive, file_upload, file_write, project_rebuild, deploy_log_get, deploy_cancel, task_get
    Checking project_get, project_inspect, app_health_check, container_service_logs
    Running project_suspend, project_unsuspend, project_delete, container_project_action, domain_list, domain_create, ssl_cert_request

    Large results come back in pieces. deploy_log_get returns about 48 KB of log at a time, and file_download and domain_log_download return about 48 KB of a file at a time, as text when the file is text. Each result says whether there is more and where the next piece starts. Any other result over 256 KB is refused with a note on how to ask for less. The assistant handles this itself.

    One thing to know if your assistant asks before it runs a tool: it sees execute_tools, not the tool inside it. If you tell it to always allow execute_tools, you have allowed every tool it can find. Use MCP_PERMISSION_MODE and MCP_DENIED_TOOLS for the limits that must hold. The engine enforces those itself.

    These settings only affect the assistant. They do not change the REST API or pae.

    # Check what is on offer

    After a restart:

    pae mcp:tool:list
    

    What you should see: a table of tool names, their group, the HTTP verb, and whether each is a read or a write. The summary line is how many are exposed and how many are withheld.

    To see what this configuration removes:

    pae mcp:tool:list --excluded
    

    To see one group:

    pae mcp:tool:list --toolset=projects
    

    Anything missing from the first list is missing for the assistant too.

    # What to ask

    These are not magic phrases. Describe things your own way. They show the level of detail worth giving. If the assistant refuses, you have limited what it may do: Decide what the assistant may do.

    See what you already host

    List the projects on this engine.
    

    Look after a WordPress site that is already here

    List the users on this WordPress site.
    Update all plugins on this site.
    

    Backups and domains work on WordPress that is already on this engine. The WordPress user, install and one-click-login actions need a WordPress site in its own container. WP-CLI and changing PHP need traditional PHP hosting: If WordPress is already on this engine.

    Change the PHP version on traditional WordPress

    What PHP versions can this engine run?
    Set shop.example.com to PHP 8.2.
    

    Raise PHP memory on this project

    Set PHP memory_limit to 256M on this project.
    

    Deploy a public repository

    Deploy my application https://github.com/org/app on this PanelAlpha Engine.
    

    Deploy a private repository

    Deploy https://github.com/org/private-app on this PanelAlpha Engine.
    The repository is private.
    

    Do not paste the git token into the chat. The assistant sends a link on the engine; open it, paste the token, save, and tell the assistant you are done. Full steps: A private repository.

    Check what a repository is before deploying it

    Inspect this repository and tell me what stack you detect, without creating
    anything: https://github.com/org/app
    

    If it lists more than one way to run the project, you can pick:

    Deploy https://github.com/org/app as php
    

    Add your own domain with HTTPS

    Add the domain shop.example.com to this project and request a Let's Encrypt
    certificate for it.
    

    Point the DNS record at your VPS first, or the certificate request will fail.

    Reach a site through Cloudflare

    Attach shop.example.com to this project through a Cloudflare tunnel.
    

    Do not paste the Cloudflare API token into the chat. The assistant sends a paste link for it. Full steps: Cloudflare.

    Fix a site that is not working

    This site does not open. Read the deploy log, check what the site is actually
    serving, and fix what you can.
    

    The assistant sees the deploy log, the health checks, and what the site returns from inside your VPS.

    Create a database

    Create a MySQL database named shop on this project, create a user for it, and
    grant that user access.
    

    Back up and restore

    Create a backup of this project.
    Restore last backup onto this project.
    

    A restore overwrites the live site. Ask to see the list of backups first.

    Make a test copy of a live site

    Make a staging copy of this project.
    Push the staging copy live.
    

    Install WordPress

    Install WordPress on this project. Title: My Site. Admin user: admin.
    Admin email: [email protected]. Admin password: <password>
    

    Change a setting your application reads

    Set DATABASE_URL to <value> on this project and rebuild.
    

    The rebuild matters. Most applications only read their settings when they start.

    Check the VPS itself

    How much CPU, memory and disk is this host using, and how close is this
    project to its limits?
    

    Report that the engine got something wrong

    File a bug: the engine treated this project wrongly. Here is what happened
    and what should have happened instead.
    

    Open the address the assistant gives you, not the one you expected. If it ends in .local, the site is not reachable from the internet: Domains and HTTPS. When something is wrong, say so in the same conversation rather than starting over.

    # Troubleshooting

    The assistant registered your VPS but will not connect. Almost always the certificate. Your engine is self-signed and the assistant's machine does not trust it. Fixed on your computer, not your VPS: Trust a self-signed certificate.

    A 401 error. Wrong token type. Assistants need a token from pae connect or pae mcp:token:create, not pae api:token:create. Or the token was truncated when you copied it.

    The assistant says it cannot do something you know the engine can do. The permission settings are filtering it out. Run pae mcp:tool:list on your VPS. Check MCP_PERMISSION_MODE, MCP_TOOLSETS, MCP_TOOLS and MCP_DENIED_TOOLS in .env-core. If the tool is allowed but not in the assistant's list, ask it to look for it with search_tools (see How many tools the assistant loads). Every tool is the full list. That list is not the same as what your assistant is currently allowed to call.

    I set a permission mode and everything became read-only. The value must be exactly readonly, modify or full. Anything else is treated as readonly.

    The assistant is being rate limited. There is a limit of 60 requests a minute per token. If you hit it routinely, something is probably retrying in a loop rather than doing 60 real operations.

    The assistant asked me to paste a git or Cloudflare token in the chat. Do not. Those go on a paste page the assistant should send you: A private repository · Cloudflare.

    My assistant can still do something I removed. Your assistant is using a list it loaded earlier. Restart your assistant, then run pae mcp:tool:list on your VPS to see the truth.

    # Every tool

    This is every MCP tool the engine ships: 225 tools, grouped by area. You do not type these names. You describe the work in chat, and the assistant picks the tool.

    A project is one hosting account. Every tool takes it as name; what the tools return still calls that value username, the REST API's name for it.

    A new install exposes all of them. Every group in the table below is on by default. The group name in the Toolset column is what you put in MCP_TOOLSETS if you want to narrow what the assistant can see. How to turn a group off, add one tool, or deny one: Decide what the assistant may do. What this engine is actually offering:

    pae mcp:tool:list
    

    # Groups

    Group Toolset Default Tools
    Engine summaries engine On 2
    Projects projects On 22
    Domains domains On 8
    Domain PHP domainphp On 4
    Domain ACME domainacme On 5
    Domain log files domainlogfiles On 2
    SSL certificates sslcertificates On 3
    MySQL databases mysqldatabases On 5
    MySQL users mysqlusers On 6
    MySQL privileges mysqlprivileges On 3
    MySQL server mysqlserver On 2
    FTP accounts ftpaccounts On 4
    SFTP accounts sftpaccounts On 6
    Cron jobs cronjobs On 4
    Files files On 15
    PHP php On 4
    Containers containers On 5
    App users appusers On 8
    Usage usage On 5
    WP-CLI wpcli On 1
    Deploy deploy On 7
    Proxy rules proxyrules On 5
    System system On 15
    Server metrics servermetrics On 5
    Firewall firewall On 12
    IP management ipmanagement On 6
    ModSecurity modsecurity On 11
    Lighthouse lighthouse On 1
    Backup stores backupcontainers On 6
    Bug reports bugreports On 1
    Backups backups On 9
    Tunnels tunnels On 3
    Git git On 16
    Project settings projectsettings On 4
    SSH ssh On 1
    Tasks tasks On 4
    Secret vault secretvault On 5

    # Engine summaries

    Tool What it does
    metrics_latest The most recent CPU, RAM, disk I/O and network I/O sample. metrics_current is the same reading through the API
    project_list_summary Every hosting project on this VPS: name, status, and how many domains it has. One call, never paginates

    # Projects

    Tool What it does
    app_credentials_get Get the admin login the engine generated for the deployed application
    env_var_list List the environment variables a container project holds, with the values hidden unless asked for
    env_var_set Set or remove environment variables of a container project, and apply them without a rebuild if asked
    project_clone Clone a project
    project_create Create a new hosting project (async)
    project_create_sync Create a project and wait for the deploy in the same call. Same body as project_create
    project_delete Delete a project and everything in it
    project_deploy_archive Deploy an uploaded zip/tar into ~/project
    project_get Get a project
    project_list List projects (paginated)
    project_list_all List all projects (no pagination)
    project_password_set Set a password visitors must type before they see the site
    project_password_unset Remove that password
    project_push Push project state to a paired staging or live project
    project_push_diff Compare the database tables of a staging project with its live project, without copying anything
    project_rebuild Redeploy a project
    project_source_attach Attach a git repository to a project created without one, and deploy it
    project_staging Create a linked staging mirror of a live project
    project_suspend Suspend a project
    project_unsuspend Unsuspend a project
    project_update Update a project
    project_verify_name Check that a project name is available

    # Domains

    Tool What it does
    domain_create Add a domain to a project
    domain_delete Delete a domain
    domain_find Get a domain by name (system-wide)
    domain_get Get a domain
    domain_list List domains of a project
    domain_mail_dns_get List and check the mail DNS records of a domain
    domain_update Update a domain
    ssl_cert_request Request a Let's Encrypt certificate for a domain

    # Domain PHP

    Tool What it does
    domain_php_directives_get Show the PHP settings for one domain. Traditional PHP hosting
    domain_php_directives_set Replace the whole set of PHP settings for one domain. Naming one setting drops the others. An empty set removes them
    domain_php_version_get Get PHP version for a domain
    domain_php_version_set Set PHP version for a domain

    # Domain ACME

    Tool What it does
    acme_challenge_create Create an HTTP-01 ACME challenge
    acme_challenge_delete Delete a single HTTP-01 ACME challenge
    acme_challenge_delete_all Delete all HTTP-01 ACME challenges for a domain
    acme_challenge_get Get a single HTTP-01 ACME challenge
    acme_challenge_list List HTTP-01 ACME challenges for a domain

    # Domain log files

    Tool What it does
    domain_log_download Download a domain log file
    domain_log_list List log files for a domain

    # SSL certificates

    Tool What it does
    ssl_cert_get Get installed SSL cert for a domain
    ssl_cert_install Install a custom SSL certificate on a domain
    ssl_cert_list List installed SSL certificates for the domains of a project

    # MySQL databases

    Tool What it does
    mysql_database_create Create a MySQL database
    mysql_database_delete Delete a MySQL database
    mysql_database_get Get a MySQL database
    mysql_database_list List MySQL databases of a project
    mysql_database_rename Rename a MySQL database

    # MySQL users

    Tool What it does
    mysql_user_change_password Change a MySQL user password
    mysql_user_create Create a MySQL user
    mysql_user_delete Delete a MySQL user
    mysql_user_get Get a MySQL user
    mysql_user_list List MySQL users of a project
    mysql_user_rename Rename a MySQL user

    # MySQL privileges

    Tool What it does
    mysql_privileges_get Get MySQL privileges for a user on a database
    mysql_privileges_revoke Revoke all MySQL privileges for a user on a database
    mysql_privileges_set Update MySQL privileges for a user on a database

    # MySQL server

    Tool What it does
    mysql_server_info Get MySQL server connection info
    phpmyadmin_sso_token_create Create a phpMyAdmin SSO token for a project

    # FTP accounts

    Tool What it does
    ftp_account_create Create an FTP account
    ftp_account_delete Delete an FTP account
    ftp_account_list List FTP accounts for a user
    ftp_account_update Update an FTP account

    # SFTP accounts

    Tool What it does
    sftp_account_create Create an SFTP account
    sftp_account_delete Delete an SFTP account
    sftp_account_list List SFTP accounts for a user
    sftp_account_update Update an SFTP account
    sftp_session_kill End the open SFTP sessions of one account
    sftp_session_kill_all End every open SFTP session of a project

    # Cron jobs

    Tool What it does
    cron_job_create Create a cron job
    cron_job_delete Delete a cron job
    cron_job_list List cron jobs of a project
    cron_job_update Update a cron job

    # Files

    Tool What it does
    file_chmod Set the mode of one file or directory. Three or four octal digits. Does not walk into folders inside it
    file_copy Copy a file or directory
    file_delete Delete a file or directory
    file_download Download a file
    file_exists Check if a file or directory exists
    file_fetch Download an http or https address into a directory that already exists. Does not deploy the file
    file_list List what is in a directory, directories first
    file_mkdir Create a directory
    file_move Move or rename a file or directory
    file_move_contents Move the immediate children of a directory into a destination that already exists
    file_stat Get file or directory stats
    file_unzip Extract a ZIP archive
    file_upload Upload a file
    file_write Write content to a file
    file_zip Create a ZIP archive

    # PHP

    Tool What it does
    php_error_log_get Read the PHP error log of a project
    php_ini_get Get custom PHP INI settings of a project
    php_ini_set Update custom PHP INI settings of a project
    php_version_list List available PHP versions on your VPS

    # Containers

    Tool What it does
    app_health_check Check that the deployed application answers on its published ports
    container_list List Docker containers of a project
    container_project_action Perform a project-level Docker Compose action
    container_service_action Perform a service-level Docker action
    container_service_logs Get logs from a Docker service

    # App users

    Tool What it does
    app_info Get app info and capabilities
    app_install Install the app (e.g. run WordPress installer)
    app_role_list List available app roles
    app_user_create Create an app user
    app_user_delete Delete an app user
    app_user_list List app users (e.g. WordPress users)
    app_user_reset_password Reset an app user password
    app_user_sso_create Create an SSO token for an app user

    # Usage

    Tool What it does
    project_usage Resource usage for a project, including this month's transfer vs the bandwidth limit
    project_bandwidth Project transfer over a date range (start, end, group_by day or month), in bytes
    domain_bandwidth Transfer over a date range for one domain
    domain_visitors Visitor overview for a domain. start/end clip daily hits and visits; unique visitors, session length, and breakdowns are overlapping calendar months. Period aliases such as last-week stay in the client.
    domain_visitors_breakdown Visitor breakdown by pages, countries, continents, regions, referrers, os, or browsers (month grain), or requests and bytes per HTTP status (status_codes, exact range)

    # WP-CLI

    Tool What it does
    wp_cli_run Run a WP-CLI command

    # Deploy

    Tool What it does
    deploy_cancel Cancel a running deploy: mark cancelled, kill the subprocess tree, clean up
    deploy_list List the deploys the project still has a log of, newest first
    deploy_log_get Poll the deploy log (JSON-lines) from a byte-like line offset
    deploy_log_read Read a page of one kept deploy's log by its id
    project_inspect Inspect a project's deployed application files
    source_inspect Inspect an application source and report its stack, ports and services
    source_refs List the branches and tags of a remote repository, without cloning it

    # Proxy rules

    Tool What it does
    proxy_rule_create Create a proxy rule
    proxy_rule_delete Delete a proxy rule
    proxy_rule_get Get a proxy rule
    proxy_rule_list List all proxy rules
    proxy_rule_update Update a proxy rule

    # System

    Tool What it does
    system_api_access_allow Let a project call this engine's API, or change its scope
    system_api_access_deny Take that access away from a project
    system_api_access_list List the projects allowed to call the engine's API
    system_api_access_rotate Replace an allowed project's API token
    system_engine_cert_request Request the engine's own Let's Encrypt certificate
    system_exim_config_get Get Exim mail server configuration
    system_exim_config_set Update Exim mail server configuration
    system_info Get system information
    system_ssl_config_get How certificates for project sites are obtained
    system_ssl_config_set Set how certificates for project sites are obtained
    system_test_email_send Send a test email via Exim
    system_update Starts a background updater on the VPS. Not how you update day to day: Updating
    system_webserver_change Change the active webserver. Not supported: the engine runs nginx-proxy only
    system_webserver_config_set Update webserver configuration
    system_webserver_password_reset Reset a webserver admin panel password. Not supported on the default nginx-proxy install

    # Server metrics

    Tool What it does
    metrics_current Get current server metrics
    metrics_last_12_hours Get metrics for the last 12 hours
    metrics_last_5_minutes Get metrics for the last 5 minutes
    metrics_last_hour Get metrics for the last hour
    metrics_last_hour_averages Get last hour metric averages

    # Firewall

    Tool What it does
    firewall_disable Disable the firewall
    firewall_enable Enable the firewall
    firewall_log_list Read what the firewall blocked and banned
    firewall_reload Reload the firewall
    firewall_rule_create Add a firewall rule
    firewall_rule_delete Delete a firewall rule
    firewall_rule_list List firewall rules
    firewall_rule_update Edit a firewall rule
    firewall_status Get the firewall status
    firewall_trusted_add Trust an address
    firewall_trusted_delete Stop trusting an address
    firewall_trusted_list List trusted addresses

    # IP management

    Tool What it does
    ip_assign Assign an IP address to a project
    ip_assigned_list List assigned IP addresses
    ip_subnet_create Add an IP subnet
    ip_subnet_delete Delete an IP subnet
    ip_subnet_list List IP subnets
    ip_unassign Unassign an IP address from a project

    # ModSecurity

    Tool What it does
    modsec_audit_log_download Download a ModSecurity audit log file
    modsec_audit_log_list List ModSecurity audit log files
    modsec_audit_log_tail Tail a ModSecurity audit log file
    modsec_custom_rules_get Get the custom ModSecurity rules
    modsec_custom_rules_set Replace the custom ModSecurity rules
    modsec_mode_get Get ModSecurity mode
    modsec_mode_set Set ModSecurity mode
    modsec_ruleset_configs_set Toggle ModSecurity ruleset config files
    modsec_ruleset_disable Disable a ModSecurity ruleset
    modsec_ruleset_enable Enable a ModSecurity ruleset
    modsec_ruleset_list List ModSecurity rulesets

    # Lighthouse

    Tool What it does
    lighthouse_report_create Generate a Lighthouse performance report

    # Backup stores

    Tool What it does
    backup_container_create Create a backup container
    backup_container_delete Delete a backup container
    backup_container_get Get a backup container
    backup_container_list List backup containers
    backup_container_test Test backup container connectivity
    backup_container_update Update a backup container

    # Bug reports

    Tool What it does
    bug_report_create File a bug report about a deployed application

    # Backups

    Tool What it does
    backup_create Create a project backup
    backup_delete Delete a project backup
    backup_get Get a project backup
    backup_item_download Download one item of a finished backup
    backup_list List backups for a project
    backup_restore Restore a project backup
    backup_schedule_delete Remove a project's automatic backup schedule
    backup_schedule_get Show a project's automatic backup schedule
    backup_schedule_set Create or replace a project's automatic backup schedule

    # Tunnels

    Tool What it does
    tunnel_create Attach a public tunnel hostname to a domain
    tunnel_delete Remove a public tunnel hostname
    tunnel_list List a domain's public tunnel hostnames

    # Git

    Tool What it does
    git_branches List git branches
    git_change_branch Change the tracked git branch
    git_commits List git commits
    git_connect Connect a directory to a git remote
    git_deploy_hook_create Create a push-to-deploy hook
    git_deploy_hook_delete Delete a push-to-deploy hook
    git_deploy_hook_rotate Rotate a push-to-deploy hook
    git_deploy_hook_show Show a push-to-deploy hook
    git_deploy_key_create Create a git deploy key
    git_deploy_key_delete Delete a git deploy key
    git_disconnect Disconnect git from a directory
    git_pull Pull from the git remote
    git_push Push local git changes
    git_revert Revert local git changes
    git_status Git repository status
    git_update_credentials Update git credentials for a directory

    # Project settings

    Tool What it does
    project_setting_delete Clear one project setting
    project_setting_get Get one project setting
    project_setting_list List a project's settings
    project_setting_set Set one project setting

    # SSH

    Tool What it does
    ssh_run Run a shell command inside the project container

    # Tasks

    Tool What it does
    task_cancel Cancel a queued or running task; kill the work subprocess if it still matches
    task_get Poll a task status and new log lines after a cursor
    task_list List tasks, newest first, filtered by project, status, action or time
    task_log_list Page of task log lines after a timestamp and/or id cursor

    # Secret vault

    Used when a private repository or a Cloudflare tunnel needs a token. You paste the value on a page the engine sends you, not in the chat: A private repository · Cloudflare.

    Tool What it does
    vault_secret_create Creates a paste page so you can give the engine a secret without putting it in chat
    vault_secret_delete Deletes a paste slot
    vault_secret_list Lists paste slots. The secret itself is never included
    vault_secret_status Whether a paste slot has a secret yet
    vault_config_get Which global secrets are stored

    # What you can see, and what you cannot

    A secret is never readable again. Not by your assistant, not by you, not by any command. What you can always see is the inventory: each entry's reference (vault:<id>), what kind of secret it is, what it is for, which project owns it, whether it has been filled in yet, and the dates.

    Give a purpose when you ask for a link ("deploy key for the shop repo"). It is shown on the paste page, so whoever hands over a credential can see why it is wanted, and it appears in the listing afterwards. Since the value itself can never be read back, the purpose is usually the only thing that tells two entries of the same kind apart when you come to tidy up.

    # A secret cannot be edited, only replaced

    Once a value has been pasted it is final. Opening the link again will not change it. To replace one, delete the entry and create a fresh link. This is deliberate: an overwrite would be invisible afterwards, because nothing can read the value back to check.

    # Project secrets and global secrets

    A secret belongs to one project by default. The first project it is given to owns it, and any other project that tries to use it is refused. You can also name the project when you ask for the link ("a Git token for the shop project"); then only that project can use it, even if it does not exist yet.

    Ask for a global secret when several projects should share one:

    Save a global Git token for the acme GitHub organisation.
    

    You can keep several global secrets of the same kind; the purpose tells them apart. A global secret is used only for a project you name it for:

    Create a project from https://github.com/acme/shop with the global
    acme Git token.
    

    The assistant passes the secret's reference, such as vault:7, in place of the token. A project created without a token gets none, even when the engine holds global secrets. Inspecting a repository can use a global secret, or a project secret that no project owns yet. Inspecting does not make the secret belong to anything; the first project given it does.

    The paste page closes after an hour. A secret is kept until it is deleted, unless you give it an expiry when you ask for the link ("keep it for 7 days"); after that it is refused and the engine deletes it by itself. A project stores the secret it was given, so deleting the vault entry does not take it away from projects that already used it. The engine never looks a secret up in the vault on a project's behalf.

    When the engine was updated to this scheme, each project that was using the old shared token had that token stored on it, so it keeps working. From the server: Secrets.

    # From the server

    The same work without an assistant: CLI commands.