Skip to content

Comments

feat: integrated ralph skill and CLI improvements (#166)#167

Merged
AaronAbuUsama merged 2 commits intomasterfrom
dev
Feb 1, 2026
Merged

feat: integrated ralph skill and CLI improvements (#166)#167
AaronAbuUsama merged 2 commits intomasterfrom
dev

Conversation

@AaronAbuUsama
Copy link
Contributor

  • fix(build): add inlineOnly option to tsdown configs for CI compatibility

In CI environments (CI=true), tsdown treats the "bundling dependencies" warning as an error and exits with code 1. Adding inlineOnly: false explicitly acknowledges that we intentionally bundle internal packages.

Verified fix works locally with CI=true bun run build returning exit 0.

  • fix(open-harness): separate tsconfig for build vs typecheck

The rolldown-plugin-dts plugin cannot resolve TypeScript project references during bundling. Created separate configs:

  • tsconfig.build.json: For tsdown - includes source paths directly without project references so types can be resolved inline
  • tsconfig.src.json: For tsc -b typecheck - uses project references for proper incremental compilation

Verified with full clean builds locally with CI=true.

  • test(server): skip live API tests in CI

These tests require real Anthropic API access which is not available in the CI environment. Use describe.skipIf(process.env.CI) to skip:

  • provider-streaming.test.ts
  • provider-recording.test.ts
  • recording-playback-e2e.test.ts

All 63 tests pass locally.

  • test(server): skip second describe block in provider-recording tests

The provider-recording.test.ts file has two describe blocks that both require live Anthropic API access. Added skip to the second one (Incremental Recording) as well.

  • fix(changeset): correct package name in ignore list

The CLI package is named @open-scaffold/cli, not @open-harness/cli.

  • fix(cli): rename @open-scaffold/cli to @open-harness/cli

Align with open-harness branding:

  • Renamed package to @open-harness/cli
  • Updated bin command from "scaffold" to "harness"
  • Fixed repository URL
  • Marked as private (not ready for publishing yet)
  • chore: update lockfile after CLI rename

  • fix(changeset): add repo to changelog-github config

The @changesets/changelog-github generator requires the repo to be specified for generating proper changelog links.

  • fix(scripts): remove missing version.mjs from changeset-version

The scripts/version.mjs file doesn't exist and isn't needed. changeset version handles everything already.

  • fix(ci): add permissions for changesets to push branches

The changesets action needs write permissions to:

  • contents: push the changeset-release/master branch
  • pull-requests: create version PRs
  • chore: trigger release workflow

  • fix(ci): use GitHub App for changesets authentication

Use the Open Harness Release Bot GitHub App to generate tokens for creating PRs, instead of the default GITHUB_TOKEN which has limited permissions.

Requires secrets:

  • RELEASE_BOT_APP_ID
  • RELEASE_BOT_PRIVATE_KEY
  • chore: version packages

  • chore: rename all packages from @open-scaffold to @Open-Harness

Complete rebrand of the project to Open Harness:

  • Renamed @open-scaffold/core → @open-harness/core
  • Renamed @open-scaffold/server → @open-harness/server
  • Renamed @open-scaffold/client → @open-harness/client
  • Renamed @open-scaffold/testing → @open-harness/testing
  • Renamed @open-scaffold/cli → @open-harness/cli (private)
  • Updated tsconfig.base.json path aliases
  • Updated all internal imports across packages and apps
  • Updated tsdown noExternal configurations
  • Updated bun.lock with new package names

All internal packages remain private - only the unified open-harness SDK and @open-harness/ralph CLI will be published.

  • fix(ci): use turbo for test command and add vitest config for ralph
  • Changed root test script from vitest run to turbo run test so tests run in each package with proper module aliases
  • Simplified changeset-publish to just changeset publish since build and tests are already run in the workflow
  • Added vitest.config.ts to harness-loop with passWithNoTests since the package has no tests yet

This fixes CI failures where vitest at root couldn't resolve @open-harness/* module imports.

  • fix(npm): rename SDK package to @open-harness/sdk

The package name open-harness is already taken on npm by another user. Renamed to @open-harness/sdk which is under our organization scope.

Usage:

import { run, workflow, agent } from "@open-harness/sdk"
import { EventStore } from "@open-harness/sdk/core"
  • feat(ralph): replace ralphy-harness with integrated ralph skill

Replace the old ralphy-harness skill with a new, streamlined ralph skill that works hand-in-hand with the @open-harness/ralph CLI.

Key changes:

  • New .claude/skills/ralph/SKILL.md with 5-phase workflow: Interview → Plan → Tasks → Approve → Execute
  • Uses Claude Code's built-in TaskCreate for task management
  • Executes via tmux session for background operation
  • Spinner now uses log-update for reliable terminal rendering
  • Spinner always visible (quiet mode only suppresses tool output)
  • Removed old .ralphy/ configuration files

CLI improvements:

  • Replaced custom ANSI spinner with log-update (listr2's approach)
  • Added succeed/fail methods for final status display
  • Observer always starts spinner for progress visibility
  • Spinner updates contextually: "Running X...", "Thinking...", etc.
  • feat(docs): add MkDocs Material documentation site

Add comprehensive documentation site at apps/docs using MkDocs with Material theme. Created autonomously by Ralph CLI as first real-world usage test.

Structure:

  • Getting Started guide with installation and quickstart
  • Concepts section (workflows, agents, phases, events)
  • Guides for building workflows and React integration
  • API reference documentation

Includes:

  • GitHub Actions workflow for Pages deployment
  • Turborepo integration with docs#build and docs#dev tasks
  • Python requirements.txt for MkDocs dependencies
  • Ralph plan file documenting the PRD for this work

* fix(build): add inlineOnly option to tsdown configs for CI compatibility

In CI environments (CI=true), tsdown treats the "bundling dependencies"
warning as an error and exits with code 1. Adding inlineOnly: false
explicitly acknowledges that we intentionally bundle internal packages.

Verified fix works locally with CI=true bun run build returning exit 0.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(open-harness): separate tsconfig for build vs typecheck

The rolldown-plugin-dts plugin cannot resolve TypeScript project
references during bundling. Created separate configs:

- tsconfig.build.json: For tsdown - includes source paths directly
  without project references so types can be resolved inline
- tsconfig.src.json: For tsc -b typecheck - uses project references
  for proper incremental compilation

Verified with full clean builds locally with CI=true.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(server): skip live API tests in CI

These tests require real Anthropic API access which is not available
in the CI environment. Use describe.skipIf(process.env.CI) to skip:

- provider-streaming.test.ts
- provider-recording.test.ts
- recording-playback-e2e.test.ts

All 63 tests pass locally.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(server): skip second describe block in provider-recording tests

The provider-recording.test.ts file has two describe blocks that both
require live Anthropic API access. Added skip to the second one
(Incremental Recording) as well.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(changeset): correct package name in ignore list

The CLI package is named @open-scaffold/cli, not @open-harness/cli.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(cli): rename @open-scaffold/cli to @open-harness/cli

Align with open-harness branding:
- Renamed package to @open-harness/cli
- Updated bin command from "scaffold" to "harness"
- Fixed repository URL
- Marked as private (not ready for publishing yet)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: update lockfile after CLI rename

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(changeset): add repo to changelog-github config

The @changesets/changelog-github generator requires the repo to be
specified for generating proper changelog links.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(scripts): remove missing version.mjs from changeset-version

The scripts/version.mjs file doesn't exist and isn't needed.
changeset version handles everything already.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ci): add permissions for changesets to push branches

The changesets action needs write permissions to:
- contents: push the changeset-release/master branch
- pull-requests: create version PRs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: trigger release workflow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ci): use GitHub App for changesets authentication

Use the Open Harness Release Bot GitHub App to generate tokens
for creating PRs, instead of the default GITHUB_TOKEN which has
limited permissions.

Requires secrets:
- RELEASE_BOT_APP_ID
- RELEASE_BOT_PRIVATE_KEY

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: version packages

* chore: rename all packages from @open-scaffold to @Open-Harness

Complete rebrand of the project to Open Harness:

- Renamed @open-scaffold/core → @open-harness/core
- Renamed @open-scaffold/server → @open-harness/server
- Renamed @open-scaffold/client → @open-harness/client
- Renamed @open-scaffold/testing → @open-harness/testing
- Renamed @open-scaffold/cli → @open-harness/cli (private)
- Updated tsconfig.base.json path aliases
- Updated all internal imports across packages and apps
- Updated tsdown noExternal configurations
- Updated bun.lock with new package names

All internal packages remain private - only the unified
`open-harness` SDK and `@open-harness/ralph` CLI will be published.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ci): use turbo for test command and add vitest config for ralph

- Changed root test script from `vitest run` to `turbo run test` so
  tests run in each package with proper module aliases
- Simplified changeset-publish to just `changeset publish` since
  build and tests are already run in the workflow
- Added vitest.config.ts to harness-loop with passWithNoTests since
  the package has no tests yet

This fixes CI failures where vitest at root couldn't resolve
@open-harness/* module imports.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(npm): rename SDK package to @open-harness/sdk

The package name `open-harness` is already taken on npm by another user.
Renamed to `@open-harness/sdk` which is under our organization scope.

Usage:
```typescript
import { run, workflow, agent } from "@open-harness/sdk"
import { EventStore } from "@open-harness/sdk/core"
```

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(ralph): replace ralphy-harness with integrated ralph skill

Replace the old ralphy-harness skill with a new, streamlined ralph skill that
works hand-in-hand with the @open-harness/ralph CLI.

Key changes:
- New `.claude/skills/ralph/SKILL.md` with 5-phase workflow:
  Interview → Plan → Tasks → Approve → Execute
- Uses Claude Code's built-in TaskCreate for task management
- Executes via tmux session for background operation
- Spinner now uses log-update for reliable terminal rendering
- Spinner always visible (quiet mode only suppresses tool output)
- Removed old .ralphy/ configuration files

CLI improvements:
- Replaced custom ANSI spinner with log-update (listr2's approach)
- Added succeed/fail methods for final status display
- Observer always starts spinner for progress visibility
- Spinner updates contextually: "Running X...", "Thinking...", etc.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(docs): add MkDocs Material documentation site

Add comprehensive documentation site at apps/docs using MkDocs with
Material theme. Created autonomously by Ralph CLI as first real-world
usage test.

Structure:
- Getting Started guide with installation and quickstart
- Concepts section (workflows, agents, phases, events)
- Guides for building workflows and React integration
- API reference documentation

Includes:
- GitHub Actions workflow for Pages deployment
- Turborepo integration with docs#build and docs#dev tasks
- Python requirements.txt for MkDocs dependencies
- Ralph plan file documenting the PRD for this work

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@greptile-apps
Copy link

greptile-apps bot commented Feb 1, 2026

Too many files changed for review. (127 files found, 100 file limit)

Resolve conflicts:
- packages/open-harness/package.json: keep version 0.1.1 from master
- packages/open-harness/CHANGELOG.md: include 0.1.1 release notes
- bun.lock: regenerated

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@AaronAbuUsama AaronAbuUsama merged commit 4645c5d into master Feb 1, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant