openclaw - ✅(Solved) Fix [Bug]: Lobster tool falls back to pipeline parsing for relative workflow file paths [2 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#68101Fetched 2026-04-18 05:53:56
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
0
Author
Participants
Timeline (top)
cross-referenced ×2labeled ×2referenced ×1

The Lobster tool incorrectly falls back to pipeline parsing when a relative workflow file path cannot be resolved.

For example, passing:

lobster/haiku-ppc64-hidden-alias-autofix-once.lobstercan result in:

Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobsterThis is misleading. The input is a workflow file path, not a pipeline stage name.

Environment

• OpenClaw version: 2026.4.15 • Platform: macOS 26 • Lobster used through the OpenClaw agent/tool runtime

Error Message

Observed tool error:

lobster failed: Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobster raw_params={"action":"run","pipeline":"lobster/haiku-ppc64-hidden-alias-autofix-once.lobster","cwd":".","timeoutMs":120000,"maxStdoutBytes":20000}

Root Cause

  • The first fix prevents file-like workflow inputs from being silently reparsed as pipeline commands.
  • The second fix ensures workflow-file detection uses the effective embedded-tool cwd.
  • The third fix keeps cwd resolution internally consistent by using a single base value inside resolveLobsterCwd().
  • My local hotfix also included a machine-specific workspace fallback only for immediate recovery, but that part is intentionally omitted here because it is not upstream-safe.

Fix Action

Fix / Workaround

This was locally patched and retested.

After the patch:

Additional note: I locally verified that after patching this behavior:

  • valid relative workflow paths are treated as workflow files
  • nonexistent workflow files return a clear path error
  • normal pipeline commands still work

PR fix notes

PR #68106: fix(lobster): surface workflow path errors

Description (problem / solution / changelog)

Summary

  • stop treating workflow-looking filenames as inline pipelines when resolution fails
  • surface the original workflow path error for .lobster, .yaml, .yml, and .json inputs
  • add a regression test for missing relative workflow files

Why this matters

Fixes #68101.

Today a missing relative workflow path like lobster/missing-workflow.lobster gets reinterpreted as a pipeline command and fails with a misleading Unknown command message. This keeps the existing inline pipeline path untouched, but fails closed for inputs that already look like workflow files so users get a real path/file error instead.

Validation

  • corepack pnpm install --filter @openclaw/lobster... --ignore-scripts --frozen-lockfile
  • corepack pnpm exec vitest run --project extensions extensions/lobster/src/lobster-runner.test.ts

Changed files

  • extensions/lobster/src/lobster-runner.test.ts (modified, +27/-0)
  • extensions/lobster/src/lobster-runner.ts (modified, +7/-6)

PR #68132: fix: surface Lobster workflow path errors

Description (problem / solution / changelog)

Summary

  • preserve missing-file errors when the Lobster tool input is clearly a workflow path
  • keep inline pipeline strings with slash-containing arguments on the pipeline execution path
  • add regression coverage for both cases

Testing

  • pnpm exec vitest run extensions/lobster/src/lobster-runner.test.ts extensions/lobster/src/lobster-tool.test.ts
  • git commit hook pnpm check suite

Fixes openclaw/openclaw#68101

Changed files

  • extensions/lobster/src/lobster-runner.test.ts (modified, +89/-0)
  • extensions/lobster/src/lobster-runner.ts (modified, +21/-2)

Code Example

lobster/haiku-ppc64-hidden-alias-autofix-once.lobstercan result in:

---

{
  "action": "run",
  "pipeline": "lobster/haiku-ppc64-hidden-alias-autofix-once.lobster",
  "cwd": ".",
  "timeoutMs": 120000,
  "maxStdoutBytes": 20000
}

---

Observed tool error:

lobster failed: Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobster
raw_params={"action":"run","pipeline":"lobster/haiku-ppc64-hidden-alias-autofix-once.lobster","cwd":".","timeoutMs":120000,"maxStdoutBytes":20000}

---

diff --git a/extensions/lobster/src/index.ts b/extensions/lobster/src/index.ts
@@
 async function detectWorkflowFile(candidate: string, cwd: string): Promise<string | null> {
   const trimmed = candidate.trim();
   if (!trimmed || trimmed.includes("|")) return null;
   try {
     return await resolveWorkflowFile(trimmed, cwd);
   } catch (err) {
-    return null;
+    if (looksLikeWorkflowFileCandidate(trimmed)) throw err;
+    return null;
   }
 }
@@
-        const filePath = await detectWorkflowFile(pipeline, params.cwd);
+        const filePath = await detectWorkflowFile(pipeline, ctx.cwd);

---

diff --git a/extensions/lobster/src/index.ts b/extensions/lobster/src/index.ts
@@
 function resolveLobsterCwd(cwdRaw?: string): string {
-  if (typeof cwdRaw !== "string" || !cwdRaw.trim()) return process.cwd();
+  const base = process.cwd();
+  if (typeof cwdRaw !== "string" || !cwdRaw.trim()) return base;
   const cwd = cwdRaw.trim();
   if (path.isAbsolute(cwd)) throw new Error("cwd must be a relative path");
-  const base = process.cwd();
   const resolved = path.resolve(base, cwd);
   const rel = path.relative(normalizeForCwdSandbox(base), normalizeForCwdSandbox(resolved));
   if (rel === "" || rel === ".") return resolved;
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

The Lobster tool incorrectly falls back to pipeline parsing when a relative workflow file path cannot be resolved.

For example, passing:

lobster/haiku-ppc64-hidden-alias-autofix-once.lobstercan result in:

Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobsterThis is misleading. The input is a workflow file path, not a pipeline stage name.

Environment

• OpenClaw version: 2026.4.15 • Platform: macOS 26 • Lobster used through the OpenClaw agent/tool runtime

Steps to reproduce

Call the Lobster tool with a relative workflow file path, for example:

{
  "action": "run",
  "pipeline": "lobster/haiku-ppc64-hidden-alias-autofix-once.lobster",
  "cwd": ".",
  "timeoutMs": 120000,
  "maxStdoutBytes": 20000
}

Expected behavior

If the input looks like a workflow file path, OpenClaw should either:

  1. resolve and run the workflow file, or
  2. return a clear workflow file/path error

It should not silently reinterpret the input as a Lobster pipeline.

Actual behavior

If workflow-file detection fails, the Lobster wrapper falls back to pipeline parsing, and the file path is treated as a command name. This produces the misleading error:

Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobster

OpenClaw version

2026.4.15

Operating system

macOS 26.3.1

Install method

npm global

Model

openai-codex/gpt-5.4

Provider / routing chain

openclaw -> built-in lobster tool wrapper -> local workflow file resolution

Additional provider/model setup details

This does not appear to depend on a specific LLM provider or model. The failure occurs in the OpenClaw Lobster tool wrapper when a relative workflow file path is passed via the tool run request, for example through the "pipeline" field. The relevant local context was cwd="." inside the workspace, with a relative workflow path such as lobster/haiku-ppc64-hidden-alias-autofix-once.lobster.

Logs, screenshots, and evidence

Observed tool error:

lobster failed: Unknown command: lobster/haiku-ppc64-hidden-alias-autofix-once.lobster
raw_params={"action":"run","pipeline":"lobster/haiku-ppc64-hidden-alias-autofix-once.lobster","cwd":".","timeoutMs":120000,"maxStdoutBytes":20000}

Impact and severity

Affected users/systems/channels: Users invoking the Lobster tool with relative workflow file paths in OpenClaw tool/runtime contexts.

Severity: Blocks or misleads workflow execution. It is not a crash, but it causes valid workflow invocations to fail with an incorrect error.

Frequency: Reproducible for the observed relative workflow-file invocation pattern.

Consequence: Valid workflow files can fail to run, and users receive a misleading "Unknown command" error that points them toward command registration or pipeline issues instead of the real workflow-file resolution problem.

Additional information

I have not confirmed whether this is a regression. I did not find an existing issue that clearly matches this exact bug. I found a related but different closed issue about Lobster workflow file shell quoting limitations, but this appears to be a separate behavior bug involving workflow-file detection and incorrect fallback to pipeline parsing.

Proposed fix: If the input clearly looks like a workflow file candidate, for example:

• ends in .lobster, .yaml, .yml, or .json • or contains / or \

then a workflow resolution failure should be surfaced directly as a file/path error.

It should not silently fall back to pipeline parsing.

Verification

This was locally patched and retested.

After the patch:

• valid relative workflow paths are treated as workflow files • nonexistent workflow files produce a clear path error such as ENOENT • normal pipeline commands like commands.list continue to work unchanged

Related note

I found a related but different closed issue:

• #29491 feat(lobster): document workflow file shell quoting limitation + suggest exec helper or JSON format

This seems separate. The current issue is specifically about relative workflow file detection and the incorrect silent fallback to pipeline parsing.

Additional note: I locally verified that after patching this behavior:

  • valid relative workflow paths are treated as workflow files
  • nonexistent workflow files return a clear path error
  • normal pipeline commands still work

OpenClaw made the following fixes.

Upstream fix 1-2

Path: extensions/lobster/src/index.ts

diff --git a/extensions/lobster/src/index.ts b/extensions/lobster/src/index.ts
@@
 async function detectWorkflowFile(candidate: string, cwd: string): Promise<string | null> {
   const trimmed = candidate.trim();
   if (!trimmed || trimmed.includes("|")) return null;
   try {
     return await resolveWorkflowFile(trimmed, cwd);
   } catch (err) {
-    return null;
+    if (looksLikeWorkflowFileCandidate(trimmed)) throw err;
+    return null;
   }
 }
@@
-        const filePath = await detectWorkflowFile(pipeline, params.cwd);
+        const filePath = await detectWorkflowFile(pipeline, ctx.cwd);

Upstream fix 3

Path: extensions/lobster/src/index.ts

diff --git a/extensions/lobster/src/index.ts b/extensions/lobster/src/index.ts
@@
 function resolveLobsterCwd(cwdRaw?: string): string {
-  if (typeof cwdRaw !== "string" || !cwdRaw.trim()) return process.cwd();
+  const base = process.cwd();
+  if (typeof cwdRaw !== "string" || !cwdRaw.trim()) return base;
   const cwd = cwdRaw.trim();
   if (path.isAbsolute(cwd)) throw new Error("cwd must be a relative path");
-  const base = process.cwd();
   const resolved = path.resolve(base, cwd);
   const rel = path.relative(normalizeForCwdSandbox(base), normalizeForCwdSandbox(resolved));
   if (rel === "" || rel === ".") return resolved;

Reviewer note

  • The first fix prevents file-like workflow inputs from being silently reparsed as pipeline commands.
  • The second fix ensures workflow-file detection uses the effective embedded-tool cwd.
  • The third fix keeps cwd resolution internally consistent by using a single base value inside resolveLobsterCwd().
  • My local hotfix also included a machine-specific workspace fallback only for immediate recovery, but that part is intentionally omitted here because it is not upstream-safe.

extent analysis

TL;DR

The Lobster tool incorrectly falls back to pipeline parsing when a relative workflow file path cannot be resolved, and the proposed fix involves modifying the detectWorkflowFile function to throw an error when the input looks like a workflow file candidate.

Guidance

  • Review the detectWorkflowFile function in extensions/lobster/src/index.ts to ensure it correctly handles relative workflow file paths and throws an error when the input looks like a workflow file candidate.
  • Verify that the resolveLobsterCwd function uses a single base value for cwd resolution to maintain internal consistency.
  • Test the changes with valid relative workflow paths, nonexistent workflow files, and normal pipeline commands to ensure the fix works as expected.
  • Consider adding additional error handling or logging to provide more informative error messages when workflow file resolution fails.

Example

The provided diff for detectWorkflowFile shows the necessary change to throw an error when the input looks like a workflow file candidate:

-    return null;
+    if (looksLikeWorkflowFileCandidate(trimmed)) throw err;
+    return null;

This change ensures that the function does not silently fall back to pipeline parsing when a relative workflow file path cannot be resolved.

Notes

The provided fixes and changes are specific to the extensions/lobster/src/index.ts file and may not be applicable to other parts of the codebase. Additionally, the local hotfix included a machine-specific workspace fallback that is not included in the proposed fix, as it is not upstream-safe.

Recommendation

Apply the proposed fix to modify the detectWorkflowFile function and ensure consistent cwd resolution in resolveLobsterCwd. This should prevent the Lobster tool from incorrectly falling back to pipeline parsing when a relative workflow file path cannot be resolved.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

If the input looks like a workflow file path, OpenClaw should either:

  1. resolve and run the workflow file, or
  2. return a clear workflow file/path error

It should not silently reinterpret the input as a Lobster pipeline.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix [Bug]: Lobster tool falls back to pipeline parsing for relative workflow file paths [2 pull requests, 1 participants]