Research threads
Ask a question in plain language. A master agent plans the research, pulls the records, splits them across up to ten analyst agents, writes one answer from exact totals computed in code, and runs a privacy review before anything is shown.
For example: of patients who had a cleaning or periodontal maintenance visit in the last six months, what share already have their next appointment booked? The thread pulled 7,736 records across all practices in the window, split them into eight shards of about a thousand rows, and answered in two minutes. Across those practices, 6,251 of 7,736 patients had a later appointment booked, a rate of 80.8 percent. The answer showed how it was measured, which numbers were verified against code, and the spread across practices.
Settings on every thread:
- Model: Fast, Standard or Detailed. Detailed runs the full analyst fleet.
- Scope: one practice, with exact numbers you can check against its reports, or all practices.
- Options: ask clarifying questions before running, review the plan before it runs, allow web search for public context (identifiers are blocked), and run the analysts on the fast model.
Each answer can be saved as a training example (the question, the grounded answer and the evidence) or a distillation record (the plan, the analyst outputs and the synthesis). The library exports a training dataset with metadata and abstention twins, meaning the same question with insufficient data and the correct refusal.
Dataset builder
Describe what you want a model to be good at. Galaxy checks what the record can support, agrees a plan with you, then writes the questions, answers them from the record, and checks every answer before you see it. For example: how long insurers take to pay for routine check-ups, and which ones are slowest.
The work runs in parallel and is handed along one question at a time. One agent writes the questions. One answers them from the record. One checks the answers and repairs what it can. One assembles the finished set. Every figure is computed in code and the model only writes the words around it, so each number in an answer can be traced back to the records it came from.
Questions the way people actually ask them
A set where every question is phrased the same way teaches a model very little. So the same question is asked in different voices: an office manager, a practice owner, a billing specialist. Some give exact dates, some say last year, some give no period at all. Some are typed in a hurry. Some want one line, some want the detail. However a question is worded, its answer is worked out the same way, so the phrasing never moves the answer key.
Questions with no good answer
Some records are there to teach restraint. Where the record cannot answer the question, the right answer says so and gives no figure. Where the question asks about one named patient or one named practice, the right answer declines and offers the group figure instead. A model trained only on answerable questions learns to guess.
What you get
A reviewed training set. You choose how big it is, whether it carries the reasoning behind each answer as well as the answer, and whether it covers one practice or many. Alongside the question and answer pairs come the extras a training run needs: preferred and rejected answers to compare, tasks that can be scored automatically, and the steps taken to reach each answer. Part of the set is held back, so there is something honest to test on.
The job stops after the first records so you can read them before it goes any further. You can approve, reject or rewrite any record, and a rewrite is checked the same way the original was. Nothing you rejected appears in what you download.
A dataset job runs under the same privacy rules as a research thread. No figure rests on too few records, small groups are not reported, and nothing in a finished set identifies an individual patient or practice.
Environments
A simulated dental practice where an agent does real office work through tools and is scored automatically. Every practice, patient and claim is synthetic. The same seed always builds the same world.
Each task comes in two forms. In a Fixture task, insurers and patients behave according to hand-set values, which is useful for development and tests. In a Measured task, they behave as measured in de-identified aggregates across the Sikka network. Every response is labeled with where its behavior came from.
Tasks available today
| Task | Role | Limits |
|---|---|---|
| Insurance claims follow-up and ERA posting. Work the outstanding claims over a two-week cycle: post each remittance the day it arrives, handle zero-pay and underpaid results under the office billing policy, and at the end of the cycle flag the claims that most need a follow-up call. | Billing coordinator | 150 steps, 14 simulated days |
| Next-day schedule, cancellations, no-shows and overbooking. It is the afternoon before a clinic day. Keep tomorrow's schedule true to what happens: record every cancellation call and every no-show under the office front-desk policy. | Front-desk scheduler | 120 steps, 1 simulated day |
What an episode looks like
This is an excerpt from the claims task in a Measured world, run by a hosted model. The agent posts remittances as they arrive, waits for the next business event, and at the end of the cycle flags the five claims most likely to stay unpaid.
Turn 25 Disposition recorded. Advancing to next event.
43 world.wait next_event=true Oct 19, 17:00
Turn 26 Last two ERAs on Oct 19 (final day)
44 payments.post_era remittance_id=R-021 Oct 19, 17:00
45 payments.post_era remittance_id=R-022 Oct 19, 17:00
Turn 27 All ERAs processed. Wait until 18:00 PDT.
46 world.wait until=2026-10-20T01:00Z Oct 19, 18:00
Turn 28 Cycle has ended. 18 claims still have no payer response.
Ranking by dollars likely to stay unpaid past each
payer's 90th percentile turnaround.
47 claims.record_disposition C-040 follow_up_call +0.05
48 claims.record_disposition C-006 follow_up_call
49 claims.record_disposition C-019 follow_up_call
50 claims.record_disposition C-033 follow_up_call
51 claims.record_disposition C-002 follow_up_call
Worklist 40 claims, 18 awaiting the insurer, 0 ERAs to post,
5 on the follow-up list
Every payer response in this run, the days to pay, the paid amount against the estimate, and which claims went quiet, came from what payers actually did across the network for the same kind of claim. The agent is scored on the state of the practice at the end of the cycle and on the dollars its follow-up list covers.
Where the behavior comes from
Every task shows the behavior table behind it. For the claims task in a Fixture world, the table looks like this. In a Measured world the same columns are filled from what payers actually did across the network, with the version of the measurement.
| Payer | Median days | 90th percentile days | No response | $0 primary | $0 secondary |
|---|---|---|---|---|---|
| Fixture Payer A | 11 | 20 | 3.0% | 6.0% | 30.0% |
| Fixture Payer B | 15 | 28 | 5.0% | 7.0% | 32.0% |
| Fixture Payer C | 22 | 37 | 4.0% | 4.0% | 25.0% |
| Fixture Payer D | 18 | 50 | 15.2% | 10.0% | 40.0% |
Tools in the claims task
- claims.get_status: current status of one claim, amounts, days since sent, any remittance and dispositions so far. Never reveals the payer's future decision.
- claims.record_disposition: record a structured disposition on a claim: follow-up call, escalate zero pay, transfer to patient, or underpaid review. Never changes amounts.
- payments.post_era: post a received remittance to the patient ledger. Each remittance can be posted once; the amount comes from the ERA.
- pms.get_ledger: charges and insurance payments on one patient's ledger, with the balance.
- policy.lookup: one section of the office policy by topic.
- world.get_time and world.wait: the simulated clock. Waiting past the cycle end truncates the episode.
Agents
You can run the scripted reference agent, which follows the office policy and serves as the answer key that shows the task is solvable. You can run a Sikka-hosted model from the console. Or you can connect your own policy through the Python SDK or the REST API, in which case it runs on your side and sees the instruction, the observation and the tool results, never rewards or hidden outcomes. You can also call any tool yourself through the same dispatcher.
Use it from code
from galaxy.interfaces.sdk import make
env = make("claims_followup_measured")
observation, info = env.reset(seed=7) # info["tools"]: names, descriptions
done = False
while not done:
action = policy(observation) # {"tool": "...", "arguments": {...}}
observation, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
curl -s -X POST https://galaxy.sikka.ai/api/galaxy/v1/episodes \
-H 'Content-Type: application/json' \
-d '{"task_id": "claims_followup_measured", "seed": 7}'
curl -s -X POST https://galaxy.sikka.ai/api/galaxy/v1/episodes/EP_.../actions \
-d '{"tool": "world.wait", "arguments": {"next_event": true}}'
curl -s -X POST https://galaxy.sikka.ai/api/galaxy/v1/episodes/EP_.../finish
curl -s https://galaxy.sikka.ai/api/galaxy/v1/episodes/EP_.../export > episode.jsonl
Each step returns the new observation and a reward. Milestone rewards plus the final adjustment always add up to the verifier's reward, so RL and evaluation see the same number. Episodes started from code show up in the console while they run.
Pricing
Galaxy is sold as an annual tier with a quota of episodes, research threads, data scanned and exported examples. Usage above the quota is metered monthly. Tool calls are never metered separately. Rates are from the Galaxy Environments Rate Card v1.2, effective October 12, 2026.
| Evaluation | Standard | Pro | Enterprise | |
|---|---|---|---|---|
| Price | $37,500 for 30 days | $270,000 a year | $720,000 a year | From $1,800,000 a year |
| Episodes a year | 500 Fixture, 100 Measured | 15,000 Fixture, 5,000 Measured | 60,000 Fixture, 20,000 Measured | 250,000 Fixture, 100,000 Measured |
| Research threads a year | 100 | 1,000 | 5,000 | 25,000 |
| Data scanned a month | 1 GB | 10 GB | 100 GB | 1 TB |
| Exported examples a year | 250 | 2,000 | 25,000 | 150,000 |
| Tasks | Current tasks, Fixture only | Current tasks, Fixture and Measured | All tasks as released | All tasks plus 10 custom tasks a year |
| Capacity | Shared | Shared | Shared, priority | Dedicated instance |
Above the quota:
- Episodes: Fixture $12.00, Measured $36.00, falling to $7.50 and $22.50 at volume. Up to 150 steps and 14 simulated days; longer episodes add 25 percent per extra 50 steps or 7 days. Reference agent episodes are not metered.
- Research threads: Fast $22.50, Standard $52.50, Detailed $90.00, follow-ups $30.00. Scope does not change the rate.
- Data scanned: $3.75 per gigabyte, with a 10 megabyte minimum per query rounded up to the next megabyte.
- Exports: training example $6.00, distillation record $15.00, episode JSONL $2.25 (included in Pro and Enterprise). Minimum batch 1,000 examples.
- Model inference: your own policy carries no inference charge. A Sikka-hosted model is passed through at the provider's list price plus 20 percent.
- Custom tasks: $3,750 Fixture, $9,000 Measured. Frozen evaluation set license $90,000 a year. Readiness report $37,500.
The Evaluation fee is credited to a Standard or higher tier signed within 60 days. Environments are licensed non-exclusively. Exclusivity on a task set, a world or a field of use is available only under a separate addendum. The full rate card is available on request.
Adjudication API
The Adjudication API is licensed separately from the tiers above. It returns a single-step calibrated claim response with evidence, and costs $378,000 a year including five million calls.
Governance
- Environments and research threads run on Sikka infrastructure. Models see synthetic identifiers and computed responses, never licensed records.
- Human records are de-identified under the HIPAA Safe Harbor method, 45 CFR 164.514(b)(2), before they inform any response. Veterinary records are outside HIPAA and governed by contract.
- Research threads are read-only and return aggregates only. Every answer passes a privacy review before it is shown or exported.
- No response is drawn from fewer than 500 matched cases. When a question is too narrow, the environment widens the conditions and says which ones.
- Coverage is the United States and Canada, about 99 percent English.
- Published exclusions: full-face and extraoral imagery, identity documents, cone beam CT and 3D volumes, cephalometric films, video, audio, employment and payroll records.
What is being built
Listed so you can plan. None of these is available today, and none is priced until released.
- More task families: eligibility and estimates, recall and reactivation, treatment plan follow-through, and a veterinary world.
- More application surfaces in the world: payer portal, eligibility, imaging and messaging, with simulated patients and staff calibrated on observed behavior.
- Practice panels for research threads, restricting a question to practices selected on measured traits such as note density or retention.
- Persistent worlds that carry state across episodes, and a red-team task set.
Contact
Galaxy License Team, Sikka Insights, Inc.
2870 Zanker Road, Suite 120, San Jose, CA 95134
galaxy@sikka.ai
To evaluate Galaxy, write to us with what you are building and what it has to pass. We will come back with whether we have it, how much, and how far back.