Skip to content

Portal command bar & pages

The portal (hadronmemory.com) has a family of command pages — form-and-result or list views that give the CLI's operational commands a point-and-click surface, for people who don't reach for the terminal.

Reach a command page two ways:

  • The ⌘K command bar — press ⌘K (or Ctrl+K), type the command name, and pick it from the list.
  • A direct URL/app/commands/<id> (e.g. /app/commands/access-check).

Every command page shares the same chrome: a breadcrumb (Commands → <command>), a title, and a short description. All strings route through the portal's localization layer, so the pages are translation-ready.

The three command pages below are form pages — inputs, submit, result inline — and mirror the same server operations the CLI and GraphQL API expose, so a result is identical whichever surface you drive it from. (The former List tasks command page moved to the org-scoped Task Nodes list — see the end of this page.)

The command bar

Press ⌘K (or Ctrl+K) anywhere in the app to focus the bar. Typing filters a dropdown of commands; / move, Enter runs the highlighted command (or completes it so you can type its argument), Tab completes without running, Esc clears.

Besides opening the command pages above, the bar runs these inline:

Command Argument Does
open a URN Resolve the URN and jump to the entity's page
search free text Global search
create a URN Open the right create form, pre-filled from the URN
invite an email (optional) Open the invite form, email pre-filled
org / dashboard The active organization
team, memories, agents, apps The active org's lists
account, app keys Your account pages
switch Pick another organization
sign out Sign out

open takes loose URNs

You don't need a canonical hrn: URN — open qualifies what you paste before navigating:

  • Full URNs work as-is; the legacy urn: scheme is accepted.
  • A type word without the scheme works: node:acme.com:docs:intro.
  • A bare hierarchy path works: the bar infers the kind from its depth — acme.com (an org), acme.com:docs (a memory, agent, or app — the bar checks which one exists), hrn:node:acme.com:docs:intro:setup (a node).

Input that can't be shaped into a URN, or a lookup that fails because the server is unreachable, shows an inline error in the bar. A URN that simply doesn't resolve — or that you lack access to — lands on a friendly not-found page showing the qualified URN, so you can spot a typo. Under the hood every variant funnels into the same /app/u/<urn> share-link resolver, so a URN that works in the bar also works as a link.

Check access

/app/commands/access-check · ⌘K: "access check", "check access"

Audits a principal's effective access to a resource — the portal front-end for the CLI hadron access check (GraphQL effectiveAccess).

Inputs

  • User — a @handle, an hrn:user:<handle> URN, or a user id. Defaults to the signed-in user, so a one-click submit answers "what can I access?"
  • Resource — a fully-qualified hrn:<type>: URN (memory, node, agent, app, org, or user) or an AI-service-config id.

Output

  • A capability matrix — READ / WRITE / MANAGE / DELETE, each ✓ or ✗.
  • The highest role the principal holds on the resource.
  • A Grants table explaining why: each row is a grant with its source (e.g. PUBLIC_VISIBILITY, ORG_ROLE), the role it confers, and the via path it travels.

Permissions — you can always check your own access. Checking another user requires being able to see the resource (today that means an admin/owner of it; broadening is tracked upstream in hadron-server#364). A disallowed audit shows a friendly message, not an error.

Merge node

/app/commands/merge-node · ⌘K: "merge node", "merge"

Folds a source node into a target node (the survivor). Backs the GraphQL mergeNodes mutation (see the GraphQL API reference).

Inputs

  • Source and Target — a node id or hrn:node:… URN each.
  • Fields to merge — a multiselect over Content, Abstract, Description, Tags, Data, Properties, Edges. Everything selected merges the whole node; narrow it to fold only some fields.
  • Delete the source after merging — a checkbox.

Behavior — text fields (content, abstract, description) concatenate target-first; tags take the union; data and properties shallow-merge with the target winning on key collisions; edges re-point from the source onto the target. The result links to the surviving node.

Permissions — write access to the target, plus the source when you're deleting it or moving its edges.

Merge memory

/app/commands/merge-memory · ⌘K: "merge memory"

Empties a source memory into a target memory. Backs the GraphQL mergeMemories mutation (see the GraphQL API reference).

Inputs

  • Source and Target — a memory id or hrn:mem:… URN each.
  • Collision fold strategy — the same field multiselect as Merge node. It applies to source nodes whose loc collides with an existing target node (each is folded by the Merge-node rules); non-colliding nodes move over unchanged, loc preserved.
  • Delete the source memory after merging — a checkbox.

Permissions — write access to both memories. Deleting the source additionally requires being its owner (for a personal/private memory) or an org admin. The v1 of this operation rejects encrypted memories and the system/app memory classes.

Task Nodes (formerly the List tasks command page)

Sidebar: "Task Nodes" · /app/orgs/<org-id>/tasks

The runnable-node list is no longer a /app/commands page (and has no ⌘K command): it moved to an org-scoped page reached from the sidebar's Task Nodes entry. It lists every runnable node (Node.isRunnable = true) in the active organization's memories, in a searchable table; clicking a row opens that node. Backed by nodes(isRunnable: true) — the same predicate behind hadron node ls --runnable and the gate for hadron task run.

See also