--- activeChapter: "04" rootPath: "../" learnPath: "index.html" visionPath: "../vision/index.html" permalink: "learn/04-custom-components.html" --- {% extends "base.njk" %} {% block title %}The agent shell — Learn Houston{% endblock %} {% block meta %} {% endblock %} {% block stylesheets %} {% endblock %} {% block body %} {% include "nav-docs.njk" %}
{% include "sidebar-learn.njk" %}

The agent shell.

Every agent in Houston renders the same five tabs. The shape is fixed on purpose, so users learn one layout and reuse it across every agent they install.

The five tabs

From left to right:

Why the layout is fixed

Earlier versions of Houston let every agent declare its own tab list in houston.json, and an experimental path let agents ship a bundle.js with custom React components for their own tabs. In practice nobody used the custom-component path, and the per-agent tab list mostly caused drift, where an old installed agent kept showing tabs a new version of the agent no longer declared.

The fixed shell is simpler for users (one layout to learn) and simpler for agent authors (you write a manifest and a CLAUDE.md, nothing else). The list of tabs lives in app/src/agents/standard-tabs.ts if you want to read it in code.

Two ways to reach Integrations

The per-agent Integrations tab and the sidebar Connections entry render the same surface. The two entry points exist because users reach for them at different moments: from inside an agent (the tab), or when setting Houston up as a whole (the sidebar). Connections are workspace-wide either way.

{% endblock %}