Appearance
CLI Overview
The app-platform CLI lets you manage and publish games on the App Platform from your terminal or in automated scripts. It wraps the REST API with a convenient interface, similar to gh for GitHub.
If you'd like to interface with the platform programmatically from code, see Programmatic Usage or the REST API docs.
Installing the CLI
The CLI requires Bun — its entry points are shipped as TypeScript and run by Bun directly.
Installing from outside the codebase
Install the published tarball into any Bun project:
bash
bun add https://misc-dev-uploads.quora-913.workers.dev/b9fea504af3e4511d924ba26f315c42d65bc6e51a46bbe6a21a1cc8e87f85c6cbash
bunx app-platform --versionThe URL above points at the most recent tarball uploaded to misc-dev-uploads. It is regenerated by bun run publish-tar inside apps/app-platform-cli/ (which packs the CLI and uploads via the dev-tools CLI) and committed into this file.
The tarball is self-contained: production dependencies are plain npm packages and there are no workspace:* references. packaging.test.ts enforces this invariant — shipped source files may only import declared deps or node:* builtins.
Installing from inside the codebase
Poe Employee Note
If you have the monorepo cloned, install-cli wires a wrapper script that always resolves to the clone you're currently in:
bash
# From the repo root
cd apps/app-platform-cli
bun run install-cliThis writes ~/.local/bin/app-platform, which walks up from $PWD to find the nearest clone's cli.ts. Make sure ~/.local/bin is on your PATH:
bash
export PATH="$HOME/.local/bin:$PATH"Checking the version
bash
app-platform --versionAuthentication
The CLI requires a Poe API key. Get one at poe.com/api/keys, then set it as an environment variable:
bash
export POE_API_KEY=your_key_hereVerify it works:
bash
app-platform auth whoamiAvailable Commands
auth — Authentication & Account Info
bash
app-platform auth login # Verify API key, show user info
app-platform auth whoami # Show current user
app-platform auth usage # Show point balance
app-platform auth points-history # Show usage history table
app-platform auth logout # End sessionapps — App Management
bash
app-platform apps list # List all your apps
app-platform apps get <appHandleOrId>
app-platform apps publish --handle my-app --dir ./distchat — Interactive AI Chat
bash
app-platform chat # Start interactive chat (default: Claude-Opus-4.6)
app-platform chat --model GPT-4o # Use a different modelmodels — Model Management
bash
app-platform models list # List available LLM modelsaccounts — Connected Accounts
bash
app-platform accounts list # List linked OAuth accounts
app-platform accounts unlink <providerId>Global Options
bash
--json # Output as machine-readable JSON
--server <url> # Override the server URL (e.g. for local dev)
--version # Show version
--help # Show helpEnvironment Variables
| Variable | Required | Description |
|---|---|---|
POE_API_KEY | Yes | Your Poe API key (get one here) |
POE_SERVER_URL | No | Server URL override (same as --server flag) |
Using in scripts
All commands support --json for machine-readable output, making it easy to pipe into tools like jq:
bash
# List app handles
app-platform apps list --json | jq '.[].handle'
# Sum point costs
app-platform auth points-history --json | jq '[.[] | .cost_points] | add'
# Get a specific app's bundle URL
app-platform apps get myuser/my-app --json | jq '.bundleUrl'Local development
Point the CLI at a local server:
bash
app-platform --server http://localhost:8787 apps listProgrammatic usage
The CLI package also exports a SlopPoeClient for use in scripts and tools:
typescript
import { SlopPoeClient, assertSuccess } from "@ai-app/app-platform-cli";
const client = new SlopPoeClient({ apiKey: process.env["POE_API_KEY"]! });
const result = await client.listApps();
assertSuccess(result); // throws on failure
for (const app of result.apps) {
console.log(`${app.handle} (${app.id})`);
}