# Global search

Source: https://codeherder.com/docs/search/

Search across your tasks, wiki pages, messages, comments, workspaces, and support docs — from the web app, the command line, or a connected assistant.

Global search looks across everything you have access to — tasks, wiki pages, messages, comments, workspaces, and support documentation — all at once. Workspace resources (tasks, pages, messages, comments, workspaces) are filtered to the workspaces you are a member of, so you do not need to navigate into a specific workspace before searching. Support articles are global help articles: they surface regardless of which workspace is active.

You can search from three places: the search box in the web app, `ch search` from the command line, and a connected Claude or ChatGPT assistant. This page covers the first two. For the assistant, see [What Claude and ChatGPT can do with CodeHerder](https://codeherder.com/docs/mcp-tools/).

## How matching works

Every word you type has to match for a result to count. Searching `task lineage` only returns things that contain both “task” and “lineage” — order doesn’t matter, so `lineage task` finds the same things.

Matching starts at the beginning of a word, not partway through it. Typing `merg` finds “merge” and “merged”, but `erge` on its own won’t — you’re matching the start of a word, not any part of it. Support docs are a little more forgiving here: they can match your text anywhere inside a word, not only its start.

Punctuation breaks a search into separate words. Searching `task-lineage` looks for “task” **and** “lineage” as two separate words, not the exact phrase.

Workspaces match differently from everything else: a workspace matches when your whole search phrase appears together, in that order, in its name or description.

## Where the search box lives

On **desktop**, the search box sits in the top bar at the top of every page. On **mobile**, the top bar shows a search (magnifying-glass) icon — tap it to open a full-screen search overlay; type your query there and tap **Cancel** to close it.

## Keyboard shortcuts

| Shortcut | What it does |
| --- | --- |
| `⌘K` / `Ctrl-K` | Focus the search box from anywhere in the app — even if your cursor is already in a text field |
| `/` | Focus the search box (see note below) |
| `↑` `↓` arrow keys | Move between results |
| `Home` / `End` | Jump to the first or last result |
| `Enter` | Open the highlighted result |
| `Escape` | Close the search panel |

`/` works on most pages, but has three exceptions:

- If your cursor is already in a text field, `/` types a slash as normal — it does not focus the search box.
- On most list pages, `/` focuses that page’s own filter box instead. Use `⌘K` / `Ctrl-K` to reach global search from there; unlike `/`, it always focuses global search no matter where your cursor is.
- If you’ve turned off single-key shortcuts, `/` does nothing at all. `⌘K` / `Ctrl-K` still works either way, since it needs a modifier key.

## Searching

In the search box, type at least two characters to start a search. Results appear in a dropdown grouped by resource type, always in this order:

- **Workspaces** — workspaces you belong to
- **Tasks** — tasks in your workspaces
- **Pages** — workspace wiki pages
- **Messages** — direct messages
- **Comments** — task comments
- **Support docs** — global help articles; these are not workspace-scoped and appear regardless of which workspace is active

A group only appears when it has a match, and the group order above is always the same. Within a group, the best matches come first. Each result shows the item’s title and a short excerpt with your search terms highlighted. Workspace results also show the name of the workspace they belong to; support articles do not, since they are not attached to any specific workspace.

Click any result — or press `Enter` on the highlighted one — to navigate straight to that item. Open a task, a message, or a wiki page this way and CodeHerder highlights your search words on the page you land on (in a task’s description and comments, or in a message or page body). Workspace and support-doc results don’t carry that highlight through.

To narrow results to a single type, click one of the filter chips at the top of the dropdown: **All**, **Tasks**, **Pages**, **Messages**, **Comments**, **Workspaces**, or **Support docs**. The chip selection applies immediately without re-running the search.

## What search can see

Global search only ever looks at what you already have access to:

- **Workspaces** you’re a member of, including ones you inherit membership in through a parent group.
- Your own **direct messages** — not anyone else’s.
- **Support docs** are the exception: they’re global help content, not tied to a workspace, so every search sees all of them.

If you belong to more than 500 workspaces, search only covers your 500 newest workspaces — newest by when each workspace was created, not by when you last used it. Both the web app and `ch search` let you know when this happens, each in its own wording.

## Recently accessed

When the search box is open and you have not typed anything yet, it shows a **Recently accessed** list — your last few visited items, kept in your browser. This is a quick way to jump back to something you visited recently without needing to type a query.

## Search from the command line

`ch search` runs the same search as the web app’s search box, from the command line:

```
ch search task lineage
```

Bare words are joined into one query, so you don’t need to quote a multi-word search unless it contains characters your shell would otherwise interpret. Results print as one table per group, in the same fixed order as the web app, with four columns: ID, workspace, text, and task. The text column holds the item’s title — except for a message or comment row, which shows the matching excerpt instead, since neither has a title of its own. The task column is only filled in for a comment row, showing the task it belongs to; follow up with `ch task comments <taskId>` to read the whole thread.

Useful flags:

- `--limit N` — cap results per group (default 10, max 25): `ch search task lineage --limit 25`.
- `--json` — emit the same data as a single JSON payload, for scripting.

There’s no `--workspace` flag: `ch search` already covers every workspace you belong to, so there’s nothing to scope it to.

Search is rate-limited per person, shared between the web app and `ch search`. Fire off a lot of searches in a short window and a few may get refused; `ch search` tells you so, and the limit clears on its own within a minute.

## What global search does not do

Global search is not the same as the **Tasks page filter**. The filter on the Tasks page narrows the task list you are currently viewing — it does not reach across workspaces or search messages, wiki pages, or comments. From the command line, that same filter is `ch task list --search`. For task-list filtering options, see [Finding and tracking your work](https://codeherder.com/docs/tracking-work/).

A page filter is also part of that page’s own web address, so it’s a link you can bookmark or send to someone; a global search query is not — see [Sharing a view with a link](https://codeherder.com/docs/sharing-a-view/).

## Related guides

- [Finding and tracking your work](https://codeherder.com/docs/tracking-work/) — dashboard, filters, and activity feed
- [Using the ch CLI](https://codeherder.com/docs/using-the-cli/) — the conventions every `ch` command follows
- [What Claude and ChatGPT can do with CodeHerder](https://codeherder.com/docs/mcp-tools/) — search CodeHerder from a connected assistant
