# Choose which tables AI clients find

> Hide tables such as staging copies and backups from what agents find on a Bonnard app. A hidden table can still be queried by name.

Updated: 2026-10-12

To choose which tables AI clients such as Claude and ChatGPT find on an app, clear the ones to hide on the app's **Data** tab. Bonnard
leaves those tables, such as staging copies and backups, out of what an agent finds.

> [!WARNING]
> Hiding a table does not stop it being read. An agent that names it in SQL, such as `SELECT * FROM <table>`, gets the
> rows if the credential Bonnard connects with can read the table. To stop that, take the table out of the
> credential's grants, as in [the PostgreSQL guide](https://bonnard.ai/docs/connect-data/postgresql.md#1-create-a-read-only-user).

## Choose the tables

You need the Admin role.

1. In the console at `app.bonnard.ai`, open **Apps**, then the app.
2. Select the **Data** tab. It lists the tables of the app's database.
3. Clear the checkbox of each table to hide. Select the checkbox, or the row, again to show it.

Changes save as you make them: **Saving…**, then **Saved**, next to the table count. If a save fails, select
**Save failed. Retry**.

Under the list, **Showing N of M tables to the agent** counts the tables agents can find. If you hide them all, it
warns that the agent has nothing to discover.

[Image: An app's Data tab in edit mode: one table cleared, and Showing 3 of 4 tables to the agent]

### Hide many tables at once

- With more than one schema, tables are grouped by schema, and the **Schema:** buttons filter the list. A schema row's
  checkbox shows or hides every table under it.
- The header checkbox shows or hides every table that the search and the schema filter match.
- **Search tables…** takes plain text, or rules on `name`, `schema`, `type`, `rows` and `columns`. The info icon next
  to it lists the rules.

To hide every temporary and backup table, search `name:tmp_* OR name:*_bak`, clear the header checkbox, then clear the
search.

`rows:=0` matches empty tables, and every table whose **Rows** shows `–` (no count).

## What hiding a table changes

A hidden table is left out of what an agent uses to find tables on the app:

- every table list `explore_schema` returns, including search results;
- a lookup by name, which answers `Table '<name>' not found or not exposed.`, as for a table that does not exist;
- the tables listed as referencing another table;
- the nearest names Bonnard suggests when an agent misnames a table.

A shown table's details can still name a hidden one, as a foreign key's target or in a view's SQL.

Each app keeps its own choice, so two apps on one database can show different tables. A change reaches the app's
staging and production URLs on the next call, with no publish step.

**Draft with AI** in the dashboard editor reads the whole database, so it finds hidden tables too.

## Tables added later

A table added to the database later is shown on every app. The **Data** tab lists the tables from the database's last
refresh, so to hide new ones:

1. Select **Data** in the sidebar, open the database, and select **Re-introspect** (the refresh icon) on its
   **Tables** tab.
2. On each app's **Data** tab, clear the new tables to hide.

## PostHog

On a [PostHog](https://bonnard.ai/docs/connect-data/posthog.md) connection, Bonnard holds back PostHog's internal tables, such as the `system` schema and
`raw_` tables. They are not on the **Data** tab, so you cannot hide them there. An agent still finds them by name, or by
asking `explore_schema` for held-back tables.

The **Data** tab lists every other PostHog table, including the ones `explore_schema`'s overview leaves out.

## Related

- [Audience](https://bonnard.ai/docs/apps/audience.md): who can connect to an app.
