Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,22 @@

## 💡 The Philosophy

**Vibe with a single agent.** You work in one conversation with one orchestrating agent. No terminal flipping. No context fragmentation. When you *ask* for parallel work, the agent delegates to background sub-agents and keeps you posted.
**The best orchestrator for Claude is Claude.**

**You control concurrency.** Bearing doesn't automatically spawn AI agents. *You* explicitly tell Claude when to parallelize ("run these in background agents"). You decide what runs in parallel, what to background, what needs your attention. The agent orchestrates, but you're always in the loop.
Bearing is not an orchestration framework. It's *infrastructure* that enables Claude to orchestrate itself.

**Not another framework.** This isn't some third-party agent framework you install. It's just Claude Code receiving instructions from CLAUDE.md. Fire up normal `claude` CLI and go. No API calls, no automation — just a workflow pattern for working with AI.
**Claude orchestrates, not Bearing.** You work in one conversation with one Claude agent. When you ask for parallel work, *Claude* decides how to delegate to background sub-agents. Bearing just provides the isolation (worktrees) and state (JSONL files) so those agents don't conflict.

**File system as interface.** Your workspace is laid out for parallel swarms — worktrees for isolation, JSONL files for state, `plans/` for tracking work. No databases. No services. Just files.
**Infrastructure, not framework.** Bearing provides:
- **Worktree management** — Isolated directories so parallel agents don't conflict
- **Plan visualization** — TUI to see all plans across repos
- **State sync** — JSONL files synced to GitHub issues for persistence
- **Query tools** — CLI commands agents can use to understand workspace state
- **Hooks** — Feed context to Claude Code agents automatically

**Pattern over tool.** Bearing is more of a philosophy than a product. We provide tools (CLI, TUI, daemon) but the core idea is the workflow pattern itself. Fork it. Adapt it. Make it yours.
**File system as interface.** Your workspace is laid out for parallel work — worktrees for isolation, JSONL files for state, `plans/` for tracking work. No databases. No services. Just files that Claude can read and write.

**AI for your AI.** Not an agent orchestrator. A *multiplier*. One Claude session sees all your plans across all repos. Say "implement all the auth-related plans with parallel background agents" and watch it spin up 20 PRs across 5 repos. The parallelism is opt-in — you can also run multiple `claude` sessions manually, each in its own worktree.
**Pattern over product.** Bearing is more of a philosophy than a tool. We provide utilities (CLI, TUI, daemon) but the core idea is the workflow pattern itself. Fork it. Adapt it. Make it yours.

---

Expand Down
4 changes: 2 additions & 2 deletions docs/src/components/PrevNext.astro
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ const { prev, next } = Astro.props;
{(prev || next) && (
<nav class="prev-next">
{prev ? (
<a href={`/${prev}/`} class="prev-next-link prev">
<a href={`/docs/${prev}/`} class="prev-next-link prev">
<span class="prev-next-label">Previous</span>
<span class="prev-next-title">{getTitle(prev)}</span>
</a>
) : <div></div>}
{next ? (
<a href={`/${next}/`} class="prev-next-link next">
<a href={`/docs/${next}/`} class="prev-next-link next">
<span class="prev-next-label">Next</span>
<span class="prev-next-title">{getTitle(next)}</span>
</a>
Expand Down
6 changes: 3 additions & 3 deletions docs/src/components/Sidebar.astro
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function isInSection(item: NavItem, targetSlug: string): boolean {
return (
<div class="nav-section" data-open={isOpen}>
<a
href={`/${slug}/`}
href={`/docs/${slug}/`}
class:list={['nav-item', 'nav-section-header', { active: isActive(slug) }]}
>
<svg class="nav-chevron" width="16" height="16" viewBox="0 0 16 16">
Expand All @@ -44,7 +44,7 @@ function isInSection(item: NavItem, targetSlug: string): boolean {
const childTitle = getTitle(childSlug);
return (
<a
href={`/${childSlug}/`}
href={`/docs/${childSlug}/`}
class:list={['nav-item', 'nav-child', { active: isActive(childSlug) }]}
>
{childTitle}
Expand All @@ -57,7 +57,7 @@ function isInSection(item: NavItem, targetSlug: string): boolean {
} else {
return (
<a
href={`/${slug}/`}
href={`/docs/${slug}/`}
class:list={['nav-item', { active: isActive(slug) }]}
>
{title}
Expand Down
16 changes: 13 additions & 3 deletions docs/src/content/docs/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Introduction
description: Worktree-based workflow for parallel AI-assisted development
description: Infrastructure for agentic workflows with Claude
---

# Bearing
Expand All @@ -9,15 +9,25 @@ description: Worktree-based workflow for parallel AI-assisted development
Bearing is experimental software. Read the [introductory blog post](https://www.joshribakoff.com/blog/deliberate-ai-use/). Expect breaking changes.
:::

Worktree-based workflow for parallel AI-assisted development.
**The best orchestrator for Claude is Claude.**

Bearing is not an orchestration framework. It's *infrastructure* that enables Claude to orchestrate itself.

## What Bearing Provides

- **Worktree management** — Isolated directories so parallel agents don't conflict
- **Plan visualization** — TUI to see all plans across repos
- **State sync** — JSONL files synced to GitHub issues for persistence
- **Query tools** — CLI commands agents can use to understand workspace state
- **Hooks** — Feed context to Claude Code agents automatically

## The Problem

Multiple AI agents working on the same codebase step on each other when they switch branches in shared folders.

## The Solution

Bearing enforces a **worktree-per-task** pattern. Each task gets its own isolated directory. No branch switching, no conflicts.
Bearing enforces a **worktree-per-task** pattern. Each task gets its own isolated directory. Claude orchestrates the work; Bearing provides the infrastructure.

## Install

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
import { getCollection } from 'astro:content';
import DocsLayout from '../layouts/DocsLayout.astro';
import DocsLayout from '../../layouts/DocsLayout.astro';

export async function getStaticPaths() {
const docs = await getCollection('docs');
Expand Down
18 changes: 18 additions & 0 deletions docs/src/pages/docs/index.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
import { getCollection } from 'astro:content';
import DocsLayout from '../../layouts/DocsLayout.astro';

// Get the index entry
const docs = await getCollection('docs');
const entry = docs.find(doc => doc.slug === 'index');

if (!entry) {
throw new Error('Index doc not found');
}

const { Content } = await entry.render();
---

<DocsLayout title={entry.data.title} slug="index">
<Content />
</DocsLayout>
Loading
Loading