Skip to content

feat(skills): add QoderWork skill host#117

Merged
BlackHole1 merged 1 commit into
mainfrom
add-qoderwork-skill
Apr 29, 2026
Merged

feat(skills): add QoderWork skill host#117
BlackHole1 merged 1 commit into
mainfrom
add-qoderwork-skill

Conversation

@BlackHole1
Copy link
Copy Markdown
Member

Publish oo-managed skills into QoderWork's ~/.qoderwork/skills directory so users can reuse the bundled skill templates there.

The QoderWork templates mirror the Claude-compatible skills while omitting the allowed-tools frontmatter that QoderWork does not support.

Publish oo-managed skills into QoderWork's ~/.qoderwork/skills
directory so users can reuse the bundled skill templates there.

The QoderWork templates mirror the Claude-compatible skills while omitting
the allowed-tools frontmatter that QoderWork does not support.

Signed-off-by: Kevin Cui <bh@bugs.cc>

# Conflicts:
#	src/application/commands/skills/embedded-assets.test.ts
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 29, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added QoderWork as a supported agent for bundled skill installation
    • Introduced oo-find-skills for discovering and installing published skills from the remote catalog
    • Introduced oo-create-skill for authoring local agent skills tied to OOMOL package workflows
  • Documentation

    • Added comprehensive reference guides for oo capability execution, including search, authentication, file transfer, package/connector execution, and task lifecycle management
    • Extended command documentation to include QoderWork alongside existing supported agents
  • Tests

    • Added test coverage for QoderWork host configuration and skill management operations

Walkthrough

This PR adds support for QoderWork as a new bundled skill agent in the oo CLI. It introduces three main skills for QoderWork (oo, oo-find-skills, oo-create-skill) with comprehensive reference documentation covering package execution, connector execution, file transfer, authentication/billing, task lifecycle, and skill search/selection workflows. The implementation extends existing bundled-skill infrastructure to recognize QoderWork's home directory (.qoderwork), embed QoderWork skill assets, resolve missing-host errors, and list QoderWork as an available managed skill host. Documentation is updated in English and Simplified Chinese to reflect QoderWork support.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly describes the main change: adding QoderWork as a new skill host. It follows the required format with type 'feat', scope 'skills', and a concise subject.
Description check ✅ Passed The description directly relates to the changeset, explaining that bundled oo-managed skills are being published to QoderWork's ~/.qoderwork/skills directory and noting the omission of allowed-tools frontmatter.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch add-qoderwork-skill

Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (8)
contrib/skills/qoderwork/oo/references/task-lifecycle.md (1)

3-3: Use consistent task identifier casing in prose.

Prefer taskId here to match the rest of the document and command examples.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/qoderwork/oo/references/task-lifecycle.md` at line 3, Change
the prose to use consistent camelCase task identifier naming: replace the
occurrence of "taskID" in the sentence "Read this file only after `oo cloud-task
run` returns a `taskID`." with "taskId" so it matches the rest of the document
and command examples (look for the phrase containing `oo cloud-task run` and
update the identifier token to `taskId`).
src/application/commands/skills/check.test.ts (1)

77-109: Add a local preflight test factory to remove repeated setup.

This test duplicates sandbox/store/canonical-root setup and assertions from the existing success-path test. A small helper (parameterized by agent/home resolver) would keep this file easier to maintain.

As per coding guidelines: "Extract repeated setup (mocks, stubs, setup objects) into local factory functions in test files; avoid copy-pasting test setup".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/check.test.ts` around lines 77 - 109, Extract
the repeated sandbox and store/canonical-root setup in the "checks QoderWork as
a requested agent" test into a local test factory function (e.g.,
createPreflightSandbox or buildPreflightTestContext) that accepts the agent
name/home resolver (resolveQoderWorkHomeDirectory) and returns the prepared
sandbox, canonicalRootDirectoryPath, and a cleanup function; refactor the test
to call this factory instead of repeating createCliSandbox, resolveStorePaths,
resolveLocalSkillCanonicalRootDirectoryPath, mkdir, and the post-run assertions
(assert exitCode/stderr/stdout and readdir check), keeping
sandbox.run(["skills","preflight","--agent", agent]) usage and ensuring the
factory handles mkdir(sandboxHome, { recursive: true }) and sandbox.cleanup().
src/application/commands/skills/list.ts (1)

29-34: Unify host order and host label mapping into one config object.

managedSkillHostOrder and readManagedSkillHostLabel duplicate the same key set. Consider a single managedSkillHostConfig source to avoid drift when adding hosts.

♻️ Proposed refactor
-const managedSkillHostOrder = {
-    codex: 0,
-    claude: 1,
-    openclaw: 2,
-    qoderwork: 3,
-} as const satisfies Record<BundledSkillAgentName, number>;
+const managedSkillHostConfig = {
+    codex: { order: 0, labelKey: "skills.list.host.codex" },
+    claude: { order: 1, labelKey: "skills.list.host.claude" },
+    openclaw: { order: 2, labelKey: "skills.list.host.openclaw" },
+    qoderwork: { order: 3, labelKey: "skills.list.host.qoderwork" },
+} as const satisfies Record<
+    BundledSkillAgentName,
+    { order: number; labelKey: "skills.list.host.codex" | "skills.list.host.claude" | "skills.list.host.openclaw" | "skills.list.host.qoderwork" }
+>;
@@
 function readManagedSkillHostLabel(
     hostName: BundledSkillAgentName,
     context: Pick<CliExecutionContext, "translator">,
 ): string {
-    switch (hostName) {
-        case "claude":
-            return context.translator.t("skills.list.host.claude");
-        case "codex":
-            return context.translator.t("skills.list.host.codex");
-        case "openclaw":
-            return context.translator.t("skills.list.host.openclaw");
-        case "qoderwork":
-            return context.translator.t("skills.list.host.qoderwork");
-        default:
-            return hostName satisfies never;
-    }
+    return context.translator.t(managedSkillHostConfig[hostName].labelKey);
 }
@@
-    const hostOrderDifference
-        = managedSkillHostOrder[left.hostName] - managedSkillHostOrder[right.hostName];
+    const hostOrderDifference
+        = managedSkillHostConfig[left.hostName].order - managedSkillHostConfig[right.hostName].order;

As per coding guidelines: "Consolidate multiple switch/map structures that share the same keys into a single configuration object (data-driven over parallel mappings)".

Also applies to: 317-332

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/list.ts` around lines 29 - 34, Replace the
parallel mappings managedSkillHostOrder and readManagedSkillHostLabel with a
single data-driven config object (e.g. managedSkillHostConfig) that maps each
BundledSkillAgentName to its order and label, then update all consumers
(including the readManagedSkillHostLabel function and any code paths referenced
near the other similar block) to read order and label from
managedSkillHostConfig; ensure the new config is typed to satisfy
Record<BundledSkillAgentName, { order: number; label: string }> (or equivalent)
so additions of new hosts only require a single edit.
src/application/commands/skills/bundled-skill-observation.test.ts (1)

166-190: Coverage is good; extract repeated host-home assertions into a helper.

This new test repeats the same create/expect/mkdir/re-expect/cleanup structure already used for other hosts. A local helper would reduce copy-paste and keep future host additions simpler.

As per coding guidelines: "Extract repeated setup (mocks, stubs, setup objects) into local factory functions in test files; avoid copy-pasting test setup".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/bundled-skill-observation.test.ts` around
lines 166 - 190, The test duplicates a create/expect/mkdir/re-expect/cleanup
pattern for verifying resolved host home directories; refactor by extracting a
local helper (e.g., assertRequiresResolvedHome or withTemporaryResolvedHome)
inside the test file that accepts the host key ("qoderwork") and performs:
createTemporaryDirectory, build env with HOME, call
requireBundledSkillHomeDirectory and assert rejection with exitCode/key, create
the actual host directory with mkdir, assert the successful resolved path equals
the created directory, then cleanup with rm; replace the repeated block in this
test (and other similar tests) with calls to that helper to remove duplication
and centralize setup/teardown while still using
requireBundledSkillHomeDirectory, createTemporaryDirectory, mkdir, and rm.
src/application/commands/skills/embedded-assets.test.ts (1)

176-183: Deduplicate SKILL.md lookup/guard into a local helper.

Lines 176-183 repeat the same lookup + missing-file guard used earlier in this file. A helper keeps failure messaging and file selection logic consistent across tests.

♻️ Suggested refactor
+function requireBundledSkillMarkdownSourcePath(
+    skillName: (typeof availableBundledSkillNames)[number],
+    agentName: (typeof availableBundledSkillAgentNames)[number],
+): string {
+    const skillFile = getBundledSkillFiles(skillName, agentName)
+        .find(file => file.relativePath === "SKILL.md");
+    if (skillFile === undefined) {
+        throw new Error(`Missing ${agentName} SKILL.md for ${skillName}`);
+    }
+    return skillFile.sourcePath;
+}

Then reuse it in both tests instead of repeating .find(...) + guard blocks.

As per coding guidelines: "`**/*.test.{ts,tsx}`: Extract repeated setup (mocks, stubs, setup objects) into local factory functions in test files; avoid copy-pasting test setup".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/embedded-assets.test.ts` around lines 176 -
183, Create a local helper function in this test file (e.g.,
findBundledSkillFile or getBundledSkillSkillMd) that encapsulates the repeated
logic using availableBundledSkillNames and getBundledSkillFiles to locate the
"SKILL.md" for a given skill and throw the same Error message when missing; then
replace the duplicate `.find(...)` + guard blocks in both tests (including the
"keeps QoderWork skill frontmatter free of Claude allowed tools" test) with
calls to that helper so file selection and missing-file messaging are
consistent.
src/application/commands/skills/list.cli.test.ts (1)

124-165: Extract host-specific startup-sync test flow into a shared helper.

Lines 124-165 duplicate the same flow already used by the OpenClaw case (setup → install → list → assert formatted block). Moving this to a local helper will reduce drift when output format or bundled skill set changes.

♻️ Suggested refactor
+async function expectStartupSynchronizedBundledInstalls(params: {
+    resolveHomeDirectory: (env: Record<string, string | undefined>) => string;
+    hostLabel: "OpenClaw" | "QoderWork";
+}): Promise<void> {
+    const sandbox = await createCliSandbox();
+    const homeDirectory = params.resolveHomeDirectory(sandbox.env);
+    try {
+        await mkdir(homeDirectory, { recursive: true });
+        await sandbox.run(["skills", "install", "oo"], { version: "9.9.9" });
+        const result = await sandbox.run(["skills", "list"], { version: "9.9.9" });
+        expect(result.exitCode).toBe(0);
+        expect(result.stderr).toBe("");
+        expect(result.stdout).toBe([
+            "✓ Found 3 oo-managed skills.",
+            "",
+            "oo",
+            `  Host: ${params.hostLabel}`,
+            "  Source: bundled",
+            "  Version: 9.9.9",
+            "",
+            "oo-find-skills",
+            `  Host: ${params.hostLabel}`,
+            "  Source: bundled",
+            "  Version: 9.9.9",
+            "",
+            "oo-create-skill",
+            `  Host: ${params.hostLabel}`,
+            "  Source: bundled",
+            "  Version: 9.9.9",
+            "",
+        ].join("\n"));
+    }
+    finally {
+        await sandbox.cleanup();
+    }
+}
As per coding guidelines: "`**/*.test.{ts,tsx}`: Extract repeated setup (mocks, stubs, setup objects) into local factory functions in test files; avoid copy-pasting test setup".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/list.cli.test.ts` around lines 124 - 165,
Extract the duplicated test flow into a local helper (e.g.,
runStartupSyncedSkillsCheck) that accepts the home-directory resolver
(resolveQoderWorkHomeDirectory / resolveOpenClawHomeDirectory), the installed
skill id(s) and expected version, and the expected formatted lines; inside the
helper create the sandbox with createCliSandbox(), create the host home dir via
mkdir(resolver(sandbox.env), { recursive: true }), perform
sandbox.run(["skills","install", id], { version }), call
sandbox.run(["skills","list"], { version }) and assert exitCode/stderr/stdout,
then cleanup; replace the duplicated body in the test named "lists
startup-synchronized QoderWork bundled installs when Codex is not installed"
(and the OpenClaw test) with a single call to this helper to avoid copy-paste.
src/application/commands/skills/index.test.ts (1)

1130-1214: Consider a host-matrix helper to reduce update drift in this test.

Line 1130–Line 1214 now maintain QoderWork across multiple parallel structures (mkdir list, stdout expectations, realpath checks, and content loop). A local host matrix factory would make future host additions safer and shorter.

As per coding guidelines, "Extract repeated setup (mocks, stubs, setup objects) into local factory functions in test files; avoid copy-pasting test setup".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/application/commands/skills/index.test.ts` around lines 1130 - 1214,
Extract the repeated host list into a local "host matrix" factory in the test
(e.g., createHostsMatrix() or hosts = getHosts(sandbox.env)) that returns an
array of host objects containing homeDirectory, skillDirectoryPath, and a flag
for whether the install should be a symlink to canonical (true/false); then
replace the mkdir(...) array, the stdout expectation lines, the realpath
assertions, the isSymbolicLink() check, and the final content loop to iterate
over that hosts array so every operation is driven from the single source of
truth (use the existing symbols codexHomeDirectory, claudeHomeDirectory,
openClawHomeDirectory, qoderWorkHomeDirectory, canonicalSkillDirectoryPath, and
qoderWorkSkillDirectoryPath to construct the host objects).
contrib/skills/qoderwork/oo-find-skills/SKILL.md (1)

95-97: Optional: normalize numbering style inside each step section.

Using local numbering/bullets per subsection (instead of continuing at 6/7/8/9...) would make the workflow easier to scan and maintain.

Also applies to: 100-104, 151-158

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/qoderwork/oo-find-skills/SKILL.md` around lines 95 - 97,
Normalize the numbered lists so each subsection uses local numbering/bullets
instead of continuing the global count: update the steps that currently read "6.
Rank the installable JSON items..." and "7. Pick one primary skill..." and any
other multi-step subsections (the blocks called out around the later sections)
to start their own 1., 2., 3. or use bullets within that subsection, keeping
numbering local and consistent for readability; adjust adjacent text so
references to step numbers inside that subsection are updated to the new local
numbering scheme.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@contrib/skills/qoderwork/oo-find-skills/references/oo-cli-contract.md`:
- Line 47: Update the wording of the sentence "Bundled skill names can be
installed directly by package name." to correctly state that bundled skills are
installed by bundled skill name (e.g., change to something like "Bundled skill
names can be installed directly by their skill name (for example, `oo skills
install oo`)") so the doc reflects that installs use the bundled skill name
rather than a package name; modify the line containing that sentence and ensure
the example `oo skills install oo` is present and consistent.

In `@contrib/skills/qoderwork/oo/SKILL.md`:
- Line 74: Replace the unhyphenated compound modifier "browse style" with the
hyphenated form "browse-style" in SKILL.md where the guideline reads "Expand
evidence gradually. For list, inbox, or browse style steps, start"; update that
phrase (refer to the line containing "Expand evidence gradually" / "list, inbox,
or browse style steps") so the compound adjective is hyphenated for readability.

In `@docs/commands.md`:
- Around line 449-450: Update the grammar in the "no-host" note sentence so the
plural subject agrees with the verb: change the phrase "when none of the
supported Codex, Claude Code, OpenClaw, or QoderWork home directories exists" to
use "exist" instead of "exists" (i.e., "...home directories exist").

---

Nitpick comments:
In `@contrib/skills/qoderwork/oo-find-skills/SKILL.md`:
- Around line 95-97: Normalize the numbered lists so each subsection uses local
numbering/bullets instead of continuing the global count: update the steps that
currently read "6. Rank the installable JSON items..." and "7. Pick one primary
skill..." and any other multi-step subsections (the blocks called out around the
later sections) to start their own 1., 2., 3. or use bullets within that
subsection, keeping numbering local and consistent for readability; adjust
adjacent text so references to step numbers inside that subsection are updated
to the new local numbering scheme.

In `@contrib/skills/qoderwork/oo/references/task-lifecycle.md`:
- Line 3: Change the prose to use consistent camelCase task identifier naming:
replace the occurrence of "taskID" in the sentence "Read this file only after
`oo cloud-task run` returns a `taskID`." with "taskId" so it matches the rest of
the document and command examples (look for the phrase containing `oo cloud-task
run` and update the identifier token to `taskId`).

In `@src/application/commands/skills/bundled-skill-observation.test.ts`:
- Around line 166-190: The test duplicates a
create/expect/mkdir/re-expect/cleanup pattern for verifying resolved host home
directories; refactor by extracting a local helper (e.g.,
assertRequiresResolvedHome or withTemporaryResolvedHome) inside the test file
that accepts the host key ("qoderwork") and performs: createTemporaryDirectory,
build env with HOME, call requireBundledSkillHomeDirectory and assert rejection
with exitCode/key, create the actual host directory with mkdir, assert the
successful resolved path equals the created directory, then cleanup with rm;
replace the repeated block in this test (and other similar tests) with calls to
that helper to remove duplication and centralize setup/teardown while still
using requireBundledSkillHomeDirectory, createTemporaryDirectory, mkdir, and rm.

In `@src/application/commands/skills/check.test.ts`:
- Around line 77-109: Extract the repeated sandbox and store/canonical-root
setup in the "checks QoderWork as a requested agent" test into a local test
factory function (e.g., createPreflightSandbox or buildPreflightTestContext)
that accepts the agent name/home resolver (resolveQoderWorkHomeDirectory) and
returns the prepared sandbox, canonicalRootDirectoryPath, and a cleanup
function; refactor the test to call this factory instead of repeating
createCliSandbox, resolveStorePaths,
resolveLocalSkillCanonicalRootDirectoryPath, mkdir, and the post-run assertions
(assert exitCode/stderr/stdout and readdir check), keeping
sandbox.run(["skills","preflight","--agent", agent]) usage and ensuring the
factory handles mkdir(sandboxHome, { recursive: true }) and sandbox.cleanup().

In `@src/application/commands/skills/embedded-assets.test.ts`:
- Around line 176-183: Create a local helper function in this test file (e.g.,
findBundledSkillFile or getBundledSkillSkillMd) that encapsulates the repeated
logic using availableBundledSkillNames and getBundledSkillFiles to locate the
"SKILL.md" for a given skill and throw the same Error message when missing; then
replace the duplicate `.find(...)` + guard blocks in both tests (including the
"keeps QoderWork skill frontmatter free of Claude allowed tools" test) with
calls to that helper so file selection and missing-file messaging are
consistent.

In `@src/application/commands/skills/index.test.ts`:
- Around line 1130-1214: Extract the repeated host list into a local "host
matrix" factory in the test (e.g., createHostsMatrix() or hosts =
getHosts(sandbox.env)) that returns an array of host objects containing
homeDirectory, skillDirectoryPath, and a flag for whether the install should be
a symlink to canonical (true/false); then replace the mkdir(...) array, the
stdout expectation lines, the realpath assertions, the isSymbolicLink() check,
and the final content loop to iterate over that hosts array so every operation
is driven from the single source of truth (use the existing symbols
codexHomeDirectory, claudeHomeDirectory, openClawHomeDirectory,
qoderWorkHomeDirectory, canonicalSkillDirectoryPath, and
qoderWorkSkillDirectoryPath to construct the host objects).

In `@src/application/commands/skills/list.cli.test.ts`:
- Around line 124-165: Extract the duplicated test flow into a local helper
(e.g., runStartupSyncedSkillsCheck) that accepts the home-directory resolver
(resolveQoderWorkHomeDirectory / resolveOpenClawHomeDirectory), the installed
skill id(s) and expected version, and the expected formatted lines; inside the
helper create the sandbox with createCliSandbox(), create the host home dir via
mkdir(resolver(sandbox.env), { recursive: true }), perform
sandbox.run(["skills","install", id], { version }), call
sandbox.run(["skills","list"], { version }) and assert exitCode/stderr/stdout,
then cleanup; replace the duplicated body in the test named "lists
startup-synchronized QoderWork bundled installs when Codex is not installed"
(and the OpenClaw test) with a single call to this helper to avoid copy-paste.

In `@src/application/commands/skills/list.ts`:
- Around line 29-34: Replace the parallel mappings managedSkillHostOrder and
readManagedSkillHostLabel with a single data-driven config object (e.g.
managedSkillHostConfig) that maps each BundledSkillAgentName to its order and
label, then update all consumers (including the readManagedSkillHostLabel
function and any code paths referenced near the other similar block) to read
order and label from managedSkillHostConfig; ensure the new config is typed to
satisfy Record<BundledSkillAgentName, { order: number; label: string }> (or
equivalent) so additions of new hosts only require a single edit.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d0454036-a210-490b-bb8c-2a7e0d527bae

📥 Commits

Reviewing files that changed from the base of the PR and between 41601c3 and f90e67c.

📒 Files selected for processing (24)
  • contrib/skills/qoderwork/oo-create-skill/SKILL.md
  • contrib/skills/qoderwork/oo-find-skills/SKILL.md
  • contrib/skills/qoderwork/oo-find-skills/references/oo-cli-contract.md
  • contrib/skills/qoderwork/oo/SKILL.md
  • contrib/skills/qoderwork/oo/references/auth-and-billing.md
  • contrib/skills/qoderwork/oo/references/connector-execution.md
  • contrib/skills/qoderwork/oo/references/file-transfer.md
  • contrib/skills/qoderwork/oo/references/package-execution.md
  • contrib/skills/qoderwork/oo/references/search-and-selection.md
  • contrib/skills/qoderwork/oo/references/task-lifecycle.md
  • docs/commands.md
  • docs/commands.zh-CN.md
  • src/application/commands/skills/bundled-skill-observation.test.ts
  • src/application/commands/skills/bundled-skill-observation.ts
  • src/application/commands/skills/bundled-skill-paths.ts
  • src/application/commands/skills/check.test.ts
  • src/application/commands/skills/check.ts
  • src/application/commands/skills/embedded-assets.test.ts
  • src/application/commands/skills/embedded-assets.ts
  • src/application/commands/skills/index.test.ts
  • src/application/commands/skills/list.cli.test.ts
  • src/application/commands/skills/list.ts
  • src/application/commands/skills/managed-skill-host-errors.ts
  • src/i18n/catalog.ts


Facts:

- Bundled skill names can be installed directly by package name.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix bundled install wording (skill name vs package name).

Line 47 is misleading: bundled installs are by bundled skill name, not package name (for example, oo skills install oo).

Suggested doc fix
-- Bundled skill names can be installed directly by package name.
+- Bundled skills are installed directly by bundled skill name (for example, `oo skills install oo`).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Bundled skill names can be installed directly by package name.
- Bundled skills are installed directly by bundled skill name (for example, `oo skills install oo`).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/qoderwork/oo-find-skills/references/oo-cli-contract.md` at
line 47, Update the wording of the sentence "Bundled skill names can be
installed directly by package name." to correctly state that bundled skills are
installed by bundled skill name (e.g., change to something like "Bundled skill
names can be installed directly by their skill name (for example, `oo skills
install oo`)") so the doc reflects that installs use the bundled skill name
rather than a package name; modify the line containing that sentence and ensure
the example `oo skills install oo` is present and consistent.

concrete user values over defaults, samples, and placeholders. Reuse a
user-provided remote URL when it already satisfies the input. Ask one
focused follow-up only when a required value is missing or risky to infer.
6. Expand evidence gradually. For list, inbox, or browse style steps, start
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate compound modifier for readability.

Line 74 should use “browse-style” as a compound adjective.

Suggested wording tweak
-- 6. Expand evidence gradually. For list, inbox, or browse style steps, start
+- 6. Expand evidence gradually. For list, inbox, or browse-style steps, start
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
6. Expand evidence gradually. For list, inbox, or browse style steps, start
6. Expand evidence gradually. For list, inbox, or browse-style steps, start
🧰 Tools
🪛 LanguageTool

[grammar] ~74-~74: Use a hyphen to join words.
Context: ...ce gradually. For list, inbox, or browse style steps, start with the lightest ...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/qoderwork/oo/SKILL.md` at line 74, Replace the unhyphenated
compound modifier "browse style" with the hyphenated form "browse-style" in
SKILL.md where the guideline reads "Expand evidence gradually. For list, inbox,
or browse style steps, start"; update that phrase (refer to the line containing
"Expand evidence gradually" / "list, inbox, or browse style steps") so the
compound adjective is hyphenated for readability.

Comment thread docs/commands.md
Comment on lines 449 to +450
- Notes: the command exits with an error when none of the supported Codex,
Claude Code, or OpenClaw home directories exists.
Claude Code, OpenClaw, or QoderWork home directories exists.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix grammar in the no-host note.

At Line 450, use “home directories exist” (not “exists”).

✏️ Suggested wording fix
-- Notes: the command exits with an error when none of the supported Codex,
-  Claude Code, OpenClaw, or QoderWork home directories exists.
+- Notes: the command exits with an error when none of the supported Codex,
+  Claude Code, OpenClaw, or QoderWork home directories exist.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Notes: the command exits with an error when none of the supported Codex,
Claude Code, or OpenClaw home directories exists.
Claude Code, OpenClaw, or QoderWork home directories exists.
- Notes: the command exits with an error when none of the supported Codex,
Claude Code, OpenClaw, or QoderWork home directories exist.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/commands.md` around lines 449 - 450, Update the grammar in the "no-host"
note sentence so the plural subject agrees with the verb: change the phrase
"when none of the supported Codex, Claude Code, OpenClaw, or QoderWork home
directories exists" to use "exist" instead of "exists" (i.e., "...home
directories exist").

@BlackHole1 BlackHole1 merged commit 2d85bff into main Apr 29, 2026
5 checks passed
@BlackHole1 BlackHole1 deleted the add-qoderwork-skill branch April 29, 2026 02:37
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