# Rowboat Known Issues: Critical Limitations and Workarounds in rowboatlabs/rowboat

> Discover critical known issues and workarounds for rowboatlabs/rowboat including PDF failures, OAuth restrictions, and CLI errors. Stay informed about rowboat limitations.

- Repository: [RowBoat Labs/rowboat](https://github.com/rowboatlabs/rowboat)
- Tags: known-issues
- Published: 2026-02-16

---

**Developers using Rowboat should be aware of six documented limitations including PDF generation failures with overlapping HTML elements, Google Meet requiring paid Workspace accounts, OAuth Dynamic Client Registration restrictions, disabled validation checks, CLI event stream errors, and OpenRouter compatibility quirks.**

Rowboat is an open-source AI agent framework designed for building complex workflow applications. While powerful, the codebase contains several Rowboat known issues that developers must address during implementation. Understanding these limitations prevents runtime failures and integration headaches.

## PDF Generation Failures in Presentation Creation

The presentation creation skill in Rowboat contains strict HTML validation that can block PDF generation.

### HTML Layout Validation Requirements

The `create-presentations` skill validates generated HTML before converting to PDF. If the HTML contains layout problems such as overlapping rectangles, the conversion fails with an explicit warning to *"Fix before proceeding"*. The code treats these layout issues as known problems requiring manual resolution.

- **Source**: [`apps/x/packages/core/src/application/assistant/skills/create-presentations/skill.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/packages/core/src/application/assistant/skills/create-presentations/skill.ts) (lines 113-117)

### Mitigation Strategy

Pre-validate HTML for absolute positioning conflicts before invoking the skill:

```typescript
// Guard against known PDF layout problems before invoking the skill
import { createPresentation } from '@x/core';

async function safeCreatePresentation(input: unknown) {
  const html = await generateHtmlFromInput(input);
  // Quick sanity-check: ensure no overlapping absolute-positioned elements
  if (/style\s*=\s*["'][^"']*position\s*:\s*absolute/.test(html)) {
    throw new Error('Detected absolute-positioned elements that may cause PDF overlap.');
  }
  return await createPresentation(html);
}

```

## Google Meet Integration Limitations

Rowboat's interview scheduler and meeting workflows face strict account requirements for video conferencing.

### Workspace Account Requirements

When workflows create Google Meet links, they **require a paid Google Workspace account**. Personal Gmail accounts trigger an *"Invalid conference type value"* error. The prebuilt interview scheduler card explicitly documents this limitation and suggests upgrading to Workspace, using domain-wide delegation, or omitting the conference entirely.

- **Source**: [`apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json`](https://github.com/rowboatlabs/rowboat/blob/main/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json) (line 186)

### Handling Google Meet Requirements

Detect Workspace configuration before attempting Meet creation:

```typescript
import { scheduleInterview } from '@rowboat/prebuilt';

async function scheduleWithMeet(details) {
  if (!process.env.GOOGLE_WORKSPACE) {
    console.warn('Google Meet requires a paid Workspace account – falling back to plain event.');
    delete details.meetLink; // avoid API error
  }
  return await scheduleInterview(details);
}

```

## OAuth Dynamic Client Registration Restrictions

The OAuth implementation contains strict configuration validation that prevents certain deployment patterns.

### Discovery Mode Configuration

The OAuth helper ([`oauth-handler.ts`](https://github.com/rowboatlabs/rowboat/blob/main/oauth-handler.ts)) enforces that **Dynamic Client Registration (DCR) can only function when discovery mode is set to `"issuer"`**. If developers configure discovery mode `"static"` alongside DCR, the code throws: *"DCR requires discovery mode 'issuer', not 'static'"*. This represents a known configuration pitfall that blocks authentication flows.

- **Source**: [`apps/x/apps/main/src/oauth-handler.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/apps/main/src/oauth-handler.ts) (line 136)

### Enforcing Correct OAuth Configuration

Validate configuration before initialization:

```typescript
import { getOAuthConfig } from '@x/core';

function validateOAuthConfig(cfg) {
  if (cfg.discovery.mode === 'static' && cfg.discovery.dcr) {
    throw new Error('DCR cannot be used with static discovery mode – set mode to "issuer".');
  }
}

```

## Disabled Validation Checks (Pending Fix)

A critical validation step remains disabled in the current codebase.

The builtin-tools module contains a **TODO comment** indicating that a validation check is currently disabled at line 1055. Until this check is re-enabled, malformed tool inputs may pass through validation layers, potentially causing downstream runtime errors or unexpected agent behavior.

- **Source**: [`apps/x/packages/core/src/application/lib/builtin-tools.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/packages/core/src/application/lib/builtin-tools.ts) (line 1055)

Once resolved, developers should implement explicit validation:

```typescript
// Once the TODO is resolved, the following call will be safe:
import { validateToolInput } from '@x/core';

function runTool(name, input) {
  const errors = validateToolInput(name, input);
  if (errors.length) {
    throw new Error(`Tool input validation failed: ${errors.join('; ')}`);
  }
  // …execute tool
}

```

## CLI Event Stream Errors

The command-line interface contains a known runtime warning.

The CLI's TUI (text-user interface) emits an *"Event stream issue"* message when the live event stream encounters problems. This signals a known runtime issue affecting real-time monitoring capabilities in terminal environments.

- **Source**: [`apps/cli/src/tui/ui.tsx`](https://github.com/rowboatlabs/rowboat/blob/main/apps/cli/src/tui/ui.tsx) (line 766)

## Agent Runtime Compatibility Issues

External provider compatibility requires specific workarounds.

The core agent runtime contains a comment referencing **OpenRouter issue #262** at line 423. This indicates a known compatibility quirk with the OpenRouter AI-SDK provider that requires specific handling in the runtime code.

- **Source**: [`apps/x/packages/core/src/agents/runtime.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/packages/core/src/agents/runtime.ts) (line 423)

## Summary

- **PDF generation fails** when HTML contains overlapping elements; pre-validate layouts before calling `create-presentations`.
- **Google Meet requires paid Workspace accounts**; personal Gmail triggers "Invalid conference type value" errors.
- **OAuth DCR only works with discovery mode `"issuer"`**; using `"static"` mode throws configuration errors.
- **Builtin-tools validation is disabled** pending a TODO fix, allowing malformed inputs to pass through.
- **CLI TUI emits "Event stream issue" warnings** during real-time monitoring.
- **OpenRouter compatibility** requires workarounds referenced in agent runtime comments.

## Frequently Asked Questions

### What causes PDF generation to fail in Rowboat?

PDF generation fails in the `create-presentations` skill when generated HTML contains layout problems such as overlapping rectangles or absolute positioning conflicts. The code at [`apps/x/packages/core/src/application/assistant/skills/create-presentations/skill.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/packages/core/src/application/assistant/skills/create-presentations/skill.ts) explicitly validates HTML before conversion and aborts with a "Fix before proceeding" warning if layout issues are detected.

### Can I use Google Meet with a personal Gmail account in Rowboat?

No. The interview scheduler workflow requires a **paid Google Workspace account** to generate Google Meet links. Personal Gmail accounts trigger an "Invalid conference type value" error as documented in [`apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json`](https://github.com/rowboatlabs/rowboat/blob/main/apps/rowboat/app/lib/prebuilt-cards/interview-scheduler.json). Workarounds include upgrading to Workspace, using domain-wide delegation, or omitting video conferencing from the event.

### How do I fix the OAuth DCR configuration error?

The OAuth handler at [`apps/x/apps/main/src/oauth-handler.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/apps/main/src/oauth-handler.ts) requires **discovery mode to be set to `"issuer"`** when using Dynamic Client Registration (DCR). If you configure discovery mode `"static"` with DCR enabled, the system throws "DCR requires discovery mode 'issuer', not 'static'". To resolve this, change your OAuth configuration to use discovery mode `"issuer"`.

### Is the validation check TODO going to be fixed soon?

The disabled validation check in [`apps/x/packages/core/src/application/lib/builtin-tools.ts`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/packages/core/src/application/lib/builtin-tools.ts) (line 1055) is currently marked with a TODO comment, indicating it is a known pending fix. Until the maintainers re-enable this validation, malformed tool inputs may bypass checks and cause downstream errors. Monitor the repository for updates to this specific file to determine when the fix is implemented.