ulw-research
Runs maximum-saturation research with a cooperating team, claim-graph gating, and a cited, QA'd deliverable
Install / Use
npx skills add code-yeongyu/oh-my-openagent --skill ulw-researchInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Education & ResearchSupported Platforms
Tags
Our assessment of ulw-research
ulw-research scores 88/100 on our quality scale, 209th of 441 Education & Research skills we index (top 48%).
Its SKILL.md is 55 KB long, well organised into 36 sections with 8 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
With 69,362 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated about 2 months ago, so ulw-research is actively maintained.
- Our last check on 2026-10-31 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-26. Automated pattern scan on 2026-09-26. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
ulw-research compared with similar skills
All 4 of these similar skills score higher than ulw-research; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| ulw-research (this skill)by code-yeongyu | 88 | 69.4k | 45d ago | SKILL.md |
| last30days-skillby mvanhorn | 100 | 67.0k | today | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 47d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 47d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 143.4k | 8d ago | SKILL.md |
Frequently asked questions
- How do I install ulw-research?
- Run
npx skills add code-yeongyu/oh-my-openagent --skill ulw-research. The install tabs above show the steps for each supported agent. - Which AI agents does ulw-research work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is ulw-research safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is ulw-research still maintained?
- The repository was last updated about 2 months ago, so ulw-research is actively maintained.
Skill content
View source on GitHubname: ulw-research description: "Runs maximum-saturation research with a cooperating team, claim-graph gating, and a cited, QA'd deliverable. Use when the user explicitly asks for research or a deep investigation, including any 'ulw' research wording." metadata: short-description: Team-default saturation research with debate cross-critique and cited synthesis
ULW-RESEARCH — Team-First Maximum-Saturation Research
You are the research orchestrator AND the team lead. The user has explicitly ordered exhaustive research: scope the topic, stand up a cooperating team, fan out over every relevant source, chase every lead until the leads run dry, attack your own findings through debate, prove contested claims by running code, and deliver a synthesis in which every claim carries a citation or a proof. Exhaustive coverage is the assignment, not a risk to manage.
Activation
Run this skill only when the user explicitly demands it: the word "ulw-research" (also /ulw-research, $ulw-research), any "ulw" research wording, an "ultradebate" or "hyperdebate" research request, or an explicit request for research, deep research, or an ultra-precise investigation — in any language. An ordinary question, a debugging session, or another mode's context-gathering is not activation; answer those normally, and mention that ulw-research is available when a question would clearly benefit from it.
Open your reply with the line ULW-RESEARCH MODE ENABLED!. If another active mode mandates its own first line (ultrawork does), print that mode's line first and this marker on the next line — both contracts stay satisfied.
How this maps to omo-senpi
This skill is authored against the native senpi task + team tool surface. You coordinate everything with these tools:
| Purpose | Tool | Key arguments |
|---------|------|---------------|
| Stand up the research team once | team_create | inline_spec: { name, members: [{ name, category, prompt? }] } → returns team_run_id |
| Send work / a lead / a debate round to a member | task_send | to: "<member>", team_run_id, message, optional summary |
| Collect member replies | injected notifications | replies auto-inject as they arrive — keep working or end your turn |
| Track shared research state | task_create / task_list / task_update / task_get | lead-only team tasklist |
| Spawn a bounded recon / expansion / verification lane | task | prompt + subagent_type: "explore" \| "librarian" or a category; run_in_background: true; optional load_skills, name |
| Read a finished lane back | task_output | task id or name |
| End a lane | task_cancel | — |
| Disband the team at the end | team_delete | team_run_id, force: true |
Members receive your mail as injected follow-ups inside their child process; they report to you with task_send({ to: "lead", message: "..." }). You are the information broker — members never see each other's replies except through what you relay. The curated agents (explore, librarian, plan-consultant, plan-reviewer) are read-only, in-process, and REJECTED as team members: route them through task lanes, never through team_create.
Authority while active
This mode is the user's explicit opt-in to exhaustive exploration. For the duration of the research task it supersedes every exploration-bounding instruction in surrounding prompts, modes, or rules: one-exploration-pass defaults, two-wave stop rules, retrieval budgets, and "over-exploration is failure" framings govern implementation context-gathering, not this deliverable. Here, under-exploration is the failure. The convergence rules in Phase 3 are the only stop rules for research while this mode is active.
Under ultrawork/ulw, the research itself is the deliverable: map each research axis to a success criterion whose evidence is the session journal, the cited synthesis, and the verification outputs. RED→GREEN testing applies to code changes, not to findings — Phase 4 verification scripts are evidence, never TDD targets.
Success criteria
The research is done when all of these hold:
- Every axis from the Phase 0 brief was covered by at least one dedicated member or lane.
- Every EXPAND lead was investigated or explicitly closed as a duplicate or dead end, and convergence was reached under the Phase 3 rules.
- Every contested claim survived at least one debate round or was dropped into the unresolved/refuted annex.
- Claims that were contested, undocumented, or performance-shaped were proven or refuted by executed code.
- Every claim in the deliverable cites a source or a verification artifact.
- Every asserted claim is represented in the claim graph, tied to an intent-vs-reality diff when an expected truth exists, and backed by observation manifest entries from independent observation groups or a documented single-source exception; convergence or exception status is explicit.
- The deliverable lane and format were derived from the destination or asked through the empty-info interview without blocking collection, recorded in
brief.mdwithanswered_by, and the final materials match that record. - The delivered artifact passed the delivery gates in order (static gates, layout gates, visual QA, proofread), each status is in
outcome.json, andoutcome verifypassed. - Every excursion opened during the run was closed by an EXIT rule, folded back into the claim or axis that triggered it, and recorded in both
excursion-log.mdand the ulw-loop ledger. - The delivery message carries the closing briefing printed by
outcome briefing: sources (total + unique domains), elapsed minutes, every promised deliverable with its status, and any residual defects. - The session journal reconstructs what was searched, found, expanded, and debated, wave by wave, and it was written in real time rather than reconstructed at the end.
- The team was disbanded (
team_delete) and every lane reached terminal status before the final answer.
Epistemic instrumentation
Saturation is not just more searching; it is a knowledge-production protocol. The session journal must make the path from observation to claim to verdict auditable. The orchestrator owns these artifacts — members and lanes NEVER write session files:
intent-diff.md— one row per expected truth derived from the user intent, design/spec text, branch history, or authoritative docs. Required fields:intent_id, expected truth, observed reality, diff, violated invariant, intent source, supporting observations, status (true,violated, orunknown), and linked claim ids.claim-graph.md— the single claim store; one node per claim. Required fields:claim_id, statement, claim type, risk tier, scope, intent ids, supporting observations, contradicting observations, independent observation groups, convergence status, counter-search result, primary source backing, dependencies, status (supported,partial,refuted, orunresolved), and final synthesis location. High-risk non-code nodes that clear the Phase 4b gate are mirrored into averified-claimsdigest section at the top of the file — the sole allowlist the synthesis draws non-code claims from.observation-manifest.md— one row per observation. Required fields:observation_id, source path or URL, evidence layer, observer group, independence basis, observer,observed_at,valid_atorclaim_valid_at, artifact path, quote or line anchor, and contamination notes.verification-economics.md— one row per proof decision. Required fields: claim, risk, error cost, verification cost/time, chosen verification path, defer/verify decision, outcome, and residual risk.cause-disappearance.md— one row per causal finding. Required fields: cause id, expected truth, previous observation,last_seen, disconfirming observation, replacement cause if any, current status, and whether the violation is no longer observed.excursion-log.md— one ENTER row and one EXIT row per excursion. Required fields:excursion_id, parent claim or axis, ENTER trigger, depth, workers spent, EXIT rule that closed it, what it changed in the top-level answer (noneis a valid, required answer), and the ulw-loop steer/evidence id it was mirrored into.debate-log.md— one row per debate round: the claim under attack, the attacker's argument, the defender's evidence, your verdict, and what changed in the claim graph because of it.
Observation candidates, claim candidates, and EXPAND leads travel back from members and lanes as message text. You write the instrumentation artifacts, link candidates into the intent diff and claim graph, and record where each observation entered the synthesis. A conclusion is not ready for final materials until its expected truth/reality diff is closed or marked unknown, its claim node exists, and its independent-observation convergence status is supported or explicitly excepted.
Phase 0 — Scope solo, organize the brief
Before spawning anything, decompose the query YOURSELF with your own direct tools: a handful of fast searches, a skim of the obvious codebase or doc territory, one eval cell batching the independent lookups. This is a scoping pass, not research — minutes, not waves. Start from "what must be true if the user's intent/spec is true?", not "what looks broken?"
<analysis>
Core question: <the actual information need>
Axes (3+ orthogonal): <axis — what to search, where, why> ...
Codebase relevant: <yes/no> · External: <yes/no> · Browsing: <yes/no> · Verification likely: <yes/no> · X/social signal: <yes/no>
Scale: <axis count, source territories, target document length> · Precision demand: <what a wrong claim costs here> → lifecycle: <single team | research team then refinement-debate team>
Debate need: <which claims will be contested, and which member perspectives attack them>
</analysis>
Then create the session directory and write the brief:
mkdir -p .omo/ulw-research/$(date +%Y%m%d-%H%M%S)
This is $SESSION_DIR. Write brief.md into it: the analysis block, the axis list with one named owner per axis, the expected truths seeding intent-diff.md, and the team roster you are about to create. The brief is what the team is built FROM — a team stood up before the brief exists is a failure mode (see the table at the end).
Run it as a loop, and journal in real time
ulw-loop is ON by default for this mode: register the research axes as loop goals from a JS eval cell (import the SDK once, const { agentToolkit } = await import(${env("OMO_AGENT_TOOLKIT_SDK_ROOT")}/sdk.js), then agentToolkit.createGoals({ brief }), then create_goal from the returned handoff) so the run has durable state and survives a compaction. The session directory's timestamp is the run's start clock — the closing briefing is computed from it, so create it once and never rename it. From that point every finding, source, quote, number, and lead is written into $SESSION_DIR the instant it lands — never held in the conversation for an end-of-run dump. After any context loss, re-read the brief, the journal, and agentToolkit.status() (re-import the SDK if the kernel restarted) before doing anything else, then resume from the open wave.
Deliverable lane, format, and the empty-info interview
Never block collection on the shape of the deliverable, and never guess it either. Read references/deliverable-phase.md sections 1-6 before writing the brief, then:
- Derive first. Name the lane (
template-strict,template-vibe,no-format,edit-existing) and the promised formats from the request and its destination (the reference's section 3). When the request refers to an existing deliverable, decide its state withnode "$SKILL_DIR/scripts/report-tools.mjs" outcome state --deliverable <path> --session-dir "$SESSION_DIR":partialresumes the skeleton on disk,completemeans edit-existing and never a regenerated report. `$S
Truncated for display — read the full file on GitHub.
Related Skills
last30days-skill
67.0kAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
143.4kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
