Clearotron

io.github.CordilleraSarlPublished by GitHub account CordilleraSarlv0.5.0Updated Nov 7, 2026

Clearotron — trademark clearance that shows its work

Overview

AI-generated overview

Clearotron runs trademark clearance searches and lets an assistant brief, audit and monitor each run's findings, evidence and reports.

What you can do
  • Brief and inspect runs: plain-language briefing, run mechanics, decision timeline, telemetry and provider usage
  • Read artifacts and evidence: report sections, audit trail, register and common-law records, search terms and coverage gaps
  • Search and compare: keyword search within a run, cross-run search, artifact diffs and change feeds for live runs
  • Plan and start work: describe available search products, free preview of a run, enqueue or cancel runs, dry-run and execute what-if experiments
  • Operate delivery: list outbox events, read delivery packets, acknowledge events and mark packets sent, bind late context to a run
When to use it
For teams already running the Clearotron clearance engine locally who want an assistant to explain what a search found, show how a conclusion was reached, monitor a run in progress, or queue and cancel searches without opening the portal.
Requirements
Runs as a local stdio process on the user's machine (desktop only), installed via the npm package; the engine itself needs Node 22.13 or newer, a reasoning CLI (Claude or Codex) with billing configured, a register credential via CLEAROTRON_DATABASE and PERPLEXITY_API_KEY for web and marketplace research.
Before you install
Searches cost real money and take hours; start_run and what_if_run spend tokens or billed provider calls, and what_if_run is approval-gated by a confirmation token. Write tools such as stop_run, ack_event, mark_sent and feed_context change engine state. Reports describe unannounced names, so treat runs, archives and delivery packets as confidential. Credentials are configured in the engine, not by this server.

Installation

In SourceWeft

  1. Open Clearotron in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[Clearotron — trademark clearance that shows its work]

[Licence: AGPL-3.0-only] [Node 22.13+] [OpenSSF Scorecard] [OpenSSF Best Practices]

Before your company commits to a name, find out what stands in its way. Give Clearotron the name, the classes you trade in and the territories you sell into: it searches the trademark registers and the open web for conflicts, reasons about the risk the way a clearance lawyer would, and publishes a written report with a machine-readable audit trail behind every finding. It runs headless on your own machine: no gateway, no platform, and nothing about the names you are clearing reaches us.

Quickstart · Install & operate · Docs · Security · Contributing · Licence

Install

See it work first, with nothing installed.

bash
npx clearotron demo

That fetches the published package — it will ask once before downloading — then replays finished clearances into a local portal and prints the portal's address and the passphrase to sign in with. Open the address in your browser. No sign-up, no credentials, no network calls to us.

The demo runs for as long as that window stays open, and removes everything it made when you close it — nothing of it is left on the machine, and running it again later starts clean. If you want to keep the sample reports after closing the window, run npx clearotron demo --keep; it prints the one command that removes the folder when you are done with it. npx clearotron demo --once publishes the reports and exits, and keeps the folder the same way.

Then install it.

bash
npx clearotron install

Node 22.13 or newer, on macOS, Linux or Windows. It needs no root: it puts the program under ~/.local, with the clearotron command in ~/.local/bin, then asks one question at a time and checks each credential before it saves it. Every command below uses the clearotron it installed — the same channel you installed from — so if ~/.local/bin is not on your PATH yet, type the full path, ~/.local/bin/clearotron, instead. On Windows it runs natively, from PowerShell: no WSL2, no Git and no administrator rights. Install it with npm install --global clearotron, then run clearotron install. It runs in the window you start it from, as on a Mac: closing the window stops a search, and the next clearotron start picks it up again.

Installing with npm's own global form instead is covered in INSTALL.md §2.

npx clearotron install gives you the stable release — the one that has run a real clearance end to end before it was published. If you want the newest code instead, a beta is published whenever there is something worth testing:

bash
npx clearotron@beta install

What each channel promises, and when a stable is cut: docs/RELEASES.md. If you are not sure, the first command is the one you want.

Removing it later: INSTALL.md §2a lists every path an install writes, and says which one holds your reports so you can keep them deliberately.

Quick start

With it installed, check what it found before it does anything. doctor only reads — it writes nothing, calls nobody, and names whatever is still missing:

bash
clearotron doctor

Then start the product and open the portal address it prints:

bash
clearotron start

That is the portal everyone at your company uses. Ordering a clearance is the same screen — describe it in a sentence, or set the classes, marketplaces and search depth yourself:

[The new-clearance screen — classes, marketplaces and the four search depths]

A finished clearance reads like this — the verdict, the risk band and the four answers. The mark VENQORI is invented; the register data behind it is real and live, and the report says so on its own face:

[A finished clearance report — the verdict, the risk band and the four answers]

The conflict landscape places every finding by mark similarity and goods proximity, and lists the rights-holders behind them by jurisdiction:

[The conflict landscape, with rights-holders grouped by jurisdiction]

Then run your own: order it in the portal, or hand the engine a job file:

bash
clearotron run --job my-job.json

How it fits together

  • A reasoning CLI does the thinking. Every stage runs as a headless turn of the Claude CLI (claude) or the Codex CLI (codex); setup installs it if the machine has none. CLEAROTRON_AI_BILLING chooses what pays: your signed-in subscription, an API key, or your own Google, Microsoft or Amazon cloud account. Whichever pays, the CLI is what runs — there is no path that calls the model directly.
  • One register credential sets coverage and cost. CLEAROTRON_DATABASE has no default — a run refuses rather than picking a vendor for you. EUIPO and a local USPTO index cost nothing; Clarivate, Signa and Corsearch are subscriptions. The six, and what each reaches.
  • One research key. PERPLEXITY_API_KEY covers the open web and the marketplaces. A clearance refuses without it at the door, before a register stage has spent.
  • A run takes hours, and survives interruption. Every finished stage stays on disk; a resume re-runs only what is missing, and a run parked on a provider cap continues by itself.
  • A finished run is queryable. An MCP server lets Claude, ChatGPT or your editor read and question any completed run in plain language: a trusted local stdio face, and an authenticated HTTP face whose read tools serve a signed-in identity while its write verbs — start_run among them, which spends — need an ops token. Connect it.
  • The engine is not coupled to a vendor. driver/register-plan.mjs — which decides what gets searched — takes a capabilities object as a parameter and imports no provider at all. An unknown register id throws rather than falling back.
  • A law firm runs one installation for every company it acts for. Each company is set up once, with its own classes, marketplaces and risk framework, and each person sees only the companies they are given. Adding a company · A connector for those companies' people.

Security

Reports describe names your company has not announced yet. Treat the pool, the archive and the delivery packets as you would any unreleased plan — and, at a law firm, as you would a case file.

The authors of this software receive nothing — no marks, no company context, no results, no usage reports, no crash reports. There is no telemetry in this tree and no endpoint we control: every destination is a register, a reasoning provider or a search provider you configured with your own credential. What leaves the machine, call by call · Report a vulnerability.

Documentation

GoalStart here
Get one search runningQUICKSTART.md
Install, configure and operate itINSTALL.md — the reference
Pick a register, or run without a paid vendorINSTALL.md § 3a
Submit jobs, or consume what a run emitsINTAKE · DELIVERY
Read and question a finished run from a chat appmcp-server/CONNECT.md
Check it works before spending anythingdocs/E2E.md
Understand the architecturedocs/architecture/ · decisions
Run it under your own name, or fork itdocs/branding.md · TRADEMARKS.md
Write a sentence a user will readdocs/writing-standard.md · docs/writing-rules.md

Development

A clone is the working tree, not a way to install the product — install it from the package above.

bash
git clone https://github.com/CordilleraSarl/clearotroncd clearotronnpm install                    # every workspacenpm run build:ui               # the browser bundle is not committed — build it oncenpm test                       # the offline suite — no credentials, no networknpx clearotron demo            # replays finished clearances into a local portal

From a clone the commands are npx clearotron …, run from that directory.

npm test is the offline suite and the first thing CONTRIBUTING.md asks of a contributor; npm run test:full, also free, is the merge gate.

Project documents

Linked explicitly rather than left to GitHub's sidebar. That chrome does not render every Code of Conduct format, it is not there at all when someone is reading this from a tarball or a mirror, and a document nobody can open is the same as one that was never written.

CODE_OF_CONDUCT.mdHow people are expected to behave here, and what happens when they do not
CONTRIBUTING.mdWhat a change needs before it can be reviewed
SECURITY.mdHow to report a vulnerability, and what to expect back
LICENSE · ADDITIONAL-TERMS.mdAGPL-3.0-only, and the section 7 terms that go with it
TRADEMARKS.mdThe names and marks, which the licence does not grant

Licence

AGPL-3.0-only, with additional terms under section 7. It covers the code and docs in this repository — not the reasoning CLI you install, not your agreements with the register and research providers, and not the npm dependencies, which carry their own licences. It grants no rights in the names or marks: TRADEMARKS.md.

Consulting, managed hosting and support are available from the people who built it — [email protected]. None of it is required to run Clearotron.

Source: README.md at commit 39f3bdc

Tools

32

brief

START HERE for any 'what do you have on X / what did the search find' question — ONE plain-language briefing of a run, in the client-voiced wording (which search product this run was, overall risk in plain words, each conflict in 1–2 plain sentences, any conditions on the result). Facts, never advice. No internal stage names, no risk-formula codes, no model names. Reach for the audit tools (get_run, trace, decision_timeline, get_telemetry) only when the user asks HOW the system reached a conclusion.

ParametersrunIdrequired

list_runs

List the searches this session can see (in progress and finished), newest first. A session may hold more than one client, so the list is NOT one client's: every row names the client it was run for, and the project where there is one. TO FIND ONE CLIENT'S SEARCHES, pass `mark` with the client's name — the same name-shaped filter reads the client and the project as well as the mark. TO FIND A SEARCH BY THE NAME IT CLEARED, pass `mark` — the stored identifier is a longer prefixed slug a client has never seen, so a bare mark name will not match `slug`. If a filtered call comes back empty, list unfiltered and read down the mark names before telling anyone there is nothing there. States: 'postponed' = paused on a provider cap and resuming by itself (resetsAt); 'recovering' = backing off and retrying (recoveryResumesAt); 'parked-for-human' = interrupted mid-search, resumes on the next activation. sendPending:true is the authoritative list of finished searches still owed their delivery notification. Follow up with brief for a plain-language summary of one search.

ParametersmarkslugagentlimitstatesendPending

list_profiles

List the customer ACCOUNTS the firm runs clearotron clearances for (key + name + industry + their PROJECTS) — the roster the intake step resolves a job's profileKey (and optional projectKey) against. profileKey selects that customer's marketplaces, default classes/jurisdictions, report format and risk posture; a project (spec 62) is an engagement UNDER a customer that overlays its own marketplaces/classes/sector/posture. Resolve by JUDGMENT (explicit name, misspelling, or implicit reference); OMIT profileKey for a new/unknown customer (uses the neutral generic profile — a customer who does not exist here yet never blocks a search; tell the requester it is running under the neutral profile, and that their own company can be set up in the portal if they want its framework, territories and marketplaces applied instead); set projectKey only when the request names a specific project in that customer's projects[], else OMIT it (runs on the customer profile); never pick a profile from the sender's email domain. Read-only.

Takes no parameters.

get_run

ENGINEERING/AUDIT view — full run mechanics: status, every pipeline stage (trigger/outcome), failover facts, artifact validity, and a coverage summary. Use when the user asks how the run executed; for 'what did it find', call brief instead.

ParametersrunIdrequired

read_artifact

Read a run artifact's raw text (or one '# Section', or its front-matter). For briefing a person, the report is the plain-language layer; the rest are internal working documents. Names: report, audit, narrative, registerFindings, commonLaw, placement, matterContext, variantManifest, skepticFlags, seniorEyeReview, caseLaw, clientSummary (internal cover-note source; ops only), a register axis (e.g. primary-sweep), status.json, run.jsonl.

ParametersnamerequiredrunIdrequiredsectionfrontMatterOnly

list_evidence

The records this search considered — every register and common-law entry, including ones the report does not name individually. Each carries the mark, owner and country, the classes, the register status, the source link, whether the provider record was actually retrieved (`retrieved`), and `superseded: true` if a later pass withdrew it. Use this to answer 'what exactly did you find, and who owns it?'. Filter with layer: register | common-law.

ParameterslayerrunIdrequired

list_searches

What the search looked for and where — the searches that came back empty as well as the ones that surfaced something. Each row carries the term, the match shapes tried (exact, fuzzy, phonetic, transliteration…), the classes and jurisdictions, the register office where one was named, and the outcome (no-hit | found | out-of-scope | screened-out | excluded-own-rights | negligible). This is the defensibility record: proof of where the search looked and found nothing. Filter by outcome.

ParametersrunIdrequiredoutcome

get_search_coverage

What the search covered and what is still open, in the report's own words — each area with its state (Searched — clean / Partially covered / Open item / Not run this run). An area that is not clean is NOT cleared: read it as open. Reach for this whenever a result looks clean and the user is about to rely on it.

ParametersrunIdrequired

list_findings

Structured findings from the deterministic audit. kind: findings (default) | negatives | audit (audit-trail). Filter by sourceLayer (Register/Common-law). Pass group (on-field/off-field/out-of-scope) to get the curated report cards instead — the cards' one-liners are already plain-language.

ParameterskindgrouprunIdrequiredsourceLayer

get_finding

One finding/negative/audit-trail record by id (F#, NR#, AT#).

ParametersidrequiredrunIdrequired

trace

ENGINEERING/AUDIT view — HOW a conclusion was reached; use only when the user asks how/why, not for briefing findings. Walks the full logic flow from any target (a stage, an artifact name, a finding id, or 'verdict') back through the stage that emitted it (and whether a failover occurred), its inputs (with sha-at-consumption vs now), the audit-trail rationale, search terms + record URL, skeptic escalations, and the refutation verdict. Pass shallow:true for a fast skeleton (stage→input lineage + verdict only; skips the findings rebuild and the live provider-usage tally).

ParametersdepthrunIdrequiredtargetrequiredshallow

get_telemetry

ENGINEERING/AUDIT view — per-run + per-stage execution telemetry (models, tokens, wall, failovers, fail reasons) from run.jsonl + the per-attempt logs. The ONLY tool that reports model identity — keep model names out of answers unless explicitly asked. Pass stage (+axis) to focus.

ParametersaxisrunIdrequiredstage

get_provider_usage

ENGINEERING/AUDIT view — billed register-search provider call counts for the run, RECOMPUTED live from the ledger (more correct than the cached value) with a drift/low-confidence flag.

ParametersrunIdrequired

get_coverage

What was searched vs what's a gap: per-register-axis presence/validity, the coverage-ledger marker, negative-results count, and per-artifact validity.

ParametersrunIdrequired

decision_timeline

ENGINEERING/AUDIT view — the run's DECISION timeline: an ordered milestone list projected from the event log — stages (with trigger and a 'changedFromPrevious' marker when a stage was recomputed), skeptic escalations (with the reason), the verdict(s) (with the reviewer's head note), screen-gates, and the terminal outcome. Answers 'how did the verdict evolve?' in one call; for 'what did it find', call brief instead.

ParametersrunIdrequired

run_changes

Change-feed for monitoring a live run: the timeline events since a timestamp, plus a cursor to poll with. MCP has no push, so poll again with since=cursor. Optional kinds[] to filter event kinds (e.g. ['verdict','skeptic-escalation','failed']).

ParameterskindsrunIdrequiredsince

diff_artifact

Diff two versions of an artifact (what actually changed between them). Versions exist only when something snapshotted them — an in-place re-dispatch (_history) or a what-if experiment (_experiments); the automated escalation/correction overwrites in place, so a normal run has only 'canonical' and there's nothing to diff (reported honestly). Defaults: a=canonical, b=newest snapshot.

ParametersabaxisnamerequiredrunIdrequired

search_runs

Cross-run search across ALL runs (in-flight + archived) — e.g. 'has the MYRK- root shown up in prior clearances?'. scope: findings (default; the mark/owner/search-term columns — cheapest), audit, key-artifacts (report+registerFindings+commonLaw+narrative), or all-artifacts (full text, most expensive). Same ranked all|any|phrase modes as search. Capped by maxRuns.

ParametersmodeslugagentlimitqueryrequiredscopestatemaxRuns

what_if_plan

DRY-RUN a what-if (no spend), in one of two kinds. kind 'stage' (the default) re-runs a single stage of a LIVE run: what re-runs, the cost prior, what downstream is NOT recomputed, a completeness verdict, and a confirmationToken — pass `stage`, and express the change via instructions (e.g. 'treat ACME as expired') and/or model. kind 'memo' answers a what-if about a DELIVERED report instead: a bounded re-read of that run's archived findings and records under a stated assumption, spending model tokens only — no searching, no register calls, and the report and its archive are never modified. A memo takes no stage; put the reader's own words in `instructions`.

ParametersaxiskindmodelrunIdrequiredstageinstructions

what_if_run

EXECUTE a planned what-if (SPENDS tokens / maybe billed calls): re-runs ONE stage in a sandbox (original untouched) and diffs it. Requires the confirmationToken from what_if_plan. Approval-gated — confirm cost before calling. Over the client connector this QUEUES the experiment on the server and returns an experimentId instead of a diff — pass `runId` too, and collect the result with what_if_result.

ParametersrunIdconfirmationTokenrequired

what_if_result

Collect a QUEUED what-if: its state (queued | running | done | failed) and, once done, the diff against the canonical run. Pass runId and the experimentId what_if_run returned; omit experimentId to list every what-if asked of this run. The original run is never modified — the experiment lives in its own sandbox.

ParametersrunIdrequiredexperimentId

describe_options

START HERE before composing a search — the option space, for free. Returns the four searches this deployment can actually run — each with the geography it accepts, how many names it reads, its turnaround, whether it carries the case-law reading, whether the native-language investigation is optional or automatic, and a plain note when one is unavailable — plus the combination rules the servers enforce (territories, native-language routing, marketplaces, classes, names per search), and — for a client connector — YOUR OWN account: its key (the profileKey plan_run and start_run require), its projects, its saved searches (the recipeKey slugs) and what is left of today's allowance. Omit profileKey to be answered about your own account(s); pass it to ask about a specific one. Reserves nothing, spends nothing, starts nothing. Then: plan_run (free) with the arguments you intend, and start_run with the SAME arguments once the requester has confirmed.

ParametersprofileKey

plan_run

FREE PREVIEW — resolve what a search WOULD do and return it, spending nothing and queueing nothing. Takes the SAME arguments as start_run. Use this BEFORE start_run whenever the requester has not already confirmed the specifics: it reports the PRODUCT that resolves and WHERE it came from (their request, the account default, a saved search, or the territories themselves), the territories and marketplaces that would ACTUALLY be searched, the turnaround, and any blockers as questions to put back. Show the result to the requester; then call start_run with the SAME arguments to actually run it. Nothing here reserves or holds anything.

ParametersrefgoodsmarksclassesproductcustomerdeadlinemarkNamepriorUseforwarderrequiredplatformsrecipeKey+11 more

start_run

OPS-ONLY. Enqueue a NEW clearance/search run the driver will pick up. Provide markName (or marks[] for a batch) + forwarder (and ideally classes/goods/customer/profileKey/ref). Returns the queue id + slug; the runId/codename is assigned when the runner claims it — poll list_runs (by markName) or run_changes for progress. Spends real money once it runs.

ParametersidrefagentbriefgoodsmarksmsgIdclassesproductcustomerdeadlinemarkName+23 more

stop_run

OPS-ONLY. Cancel a run. Pass id to remove a not-yet-claimed queued job (a real cancel, no spend). Pass runId to file a cancel request on a started run. By default the cancel is COOPERATIVE — the sentinel is written and a turn already in flight is allowed to finish, which has no deadline: a reasoning turn can run for tens of minutes. Add immediate:true to also end that turn: it is sent a stop, anything of it still running a few seconds later is killed, and the answer says the turn ended only once it has seen it end. If it could not be ended, the run ends at its next step boundary, and the answer says that instead.

ParametersidagentrunIdimmediateonBehalfOf

server_info

The AGPL §13 source offer: this server's name, version, licence, source repository and the COMMIT IT IS RUNNING. Callable by every session kind — the offer is owed to whoever interacts with the service. Reads no run and no account data.

Takes no parameters.

list_outbox_events

Integrator discovery read (docs/DELIVERY.md): every pending outbox event — delivered markers plus the self-contained run-failed / intake-rejected / duplicate-skipped / late-bind-ack packets. Route each, then mark_sent (delivered) or ack_event (the rest).

Takes no parameters.

get_delivery_packet

The run's send payload: _driver/delivery.json (subject, recipient routing, verbatim emailBodyHtml, whatsapp line) and/or failure.json, plus sendPending/.sent state. NOT exposed to client tokens.

ParametersrunIdrequired

ack_event

OPS-ONLY. Consume ONE routed outbox event by its file name (from list_outbox_events). Idempotent (ok+alreadyGone). The delivered marker is instead cleared by mark_sent.

Parametersfilerequired

mark_sent

OPS-ONLY. Integrator write-back after sending a delivered run's packet (docs/DELIVERY.md step 3): writes the .sent idempotency guard, clears status.sendPending, removes the outbox marker. Idempotent — an already-sent run returns ok+alreadySent. SETTLING REQUIRES EVIDENCE: pass messageId or attestation, or the call refuses. Never call this for a send that was blocked or failed — leave the marker so the send stays owed.

ParametersrunIdrequiredmessageIdattestation

feed_context

OPS-ONLY. Late-bind context onto a run: the applicant + exclusions (written as customer-bind.json, the pipeline's pre-start applicant bind). Use to resolve a customer-unknown run.

ParametersrunIdrequiredcustomerexclusions

Version history

2
  1. v0.5.0LatestNov 5, 2026
  2. v0.4.1Oct 18, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts