Power

What a Downcity Power is and how it extends Agent capabilities

A Power is Downcity's single extension product unit. City provides and owns it, projecting runtime capabilities into Agent/Session scopes while also supporting host management logic, a Sidebar + Mainview workspace, and Config.

Power
├── main       optional: City instances, lifecycle, management logic, and actions
└── renderer   optional: Sidebar + Mainview and/or Config

What a power does

  • Exposes tools the Agent can call during execution
  • Hooks into City Power lifecycle (initialize, dispose)
  • Manages its own state, connections, and background tasks
  • Provides a Sidebar + Mainview workspace and edits configuration in a separate Config on its Catalog detail page
  • Runs inside the City process boundary, not as a separate service

Each Power ID maps to one instance and one configuration inside a City. The host persists Config and projects an immutable PowerContext.config snapshot for each execution. Agents own neither Powers, configuration, nor lifecycle. Powers model multiple accounts in their own Config instead of using a generic named-configuration layer.

Built-in powers

Downcity ships several built-in powers that cover common agent needs:

  • Chat — connects messaging channels (Telegram, Feishu, QQ, etc.)
  • Task — schedules and runs background tasks
  • Memory — persists conversation history and context
  • Shell — executes local commands in a sandboxed environment
  • Schedule — cron-style job scheduling
  • Web — browses the web and extracts content
  • Skill — composes reusable tool chains

Writing a power

In the SDK, provide a Power instance directly without using the install protocol:

const city = new City({ powers: [github_power], workspaces: [workspace] });
city.agents.add(agent);

Add a power.json with a unified main and optional renderer entry only when the Power must be installed and managed by CLI or Desktop.

Where to learn more