BaseHalf
All posts

Put agent context in upstream lists, not in the prompt

Draw a line on the canvas and BaseHalf writes a plain-text upstream entry into the file. Git sees it. The next Claude Code or Codex session sees it too.

We used to paste the same three notes into every new Claude Code session. The links lived in our heads, or in a chat we would close. When the next person opened the folder, those relationships were gone.

On the BaseHalf canvas, a line from card A into card B means A's context flows into B. A is upstream of B. Draw the line, and BaseHalf writes a plain-text entry into B. Git sees the change. The next Claude Code or Codex session opens the same list. Nothing has to be injected into the prompt for that link to exist.

Cards connected on the canvas, with an upstream line from notes into a target file.

How connections behave

The graph is not a tree. Cycles are allowed. An item cannot be its own upstream. Markdown links inside a note are still ordinary links; they are not connections. Connections are the lines you draw on the canvas, or the lists written into files.

Drag from a card's handle onto another card to connect. Drop on empty canvas and BaseHalf creates a note or draft with that upstream already set. The badge on a card shows its description, Upstream, and Downstream. Downstream is computed from who points here. We never store it separately.

Agents and tools can edit the plain-text list themselves. BaseHalf uses whatever is in the file. Broken entries stay until you Relink, Relink Everywhere, or Remove them. That is deliberate: a missing path is still a signal until you decide what to do with it.

Where the list lives

Where BaseHalf writes the list depends on the file type.

File kindWhere upstream is stored
Markdown notesFrontmatter upstream: list of workspace-relative paths
Other files.bh/mirror/<path>/upstream.yaml

Markdown keeps the relationship next to the prose you already commit. Other files keep a mirror under .bh/ so we do not have to invent a frontmatter format for every extension. In both cases the list is ordinary text. Search finds it. Diffs show it. Claude Code and Codex read it the same way they read any other file in the folder.

We stopped rebuilding “what this depends on” inside the prompt box. The dependency is in the file. Draw the line once, and the next session starts with it already there.