Profile
Back to NewsBack
GitHub Trending 10 min
Reader Mode
Danceiny/gotry: GoTry — 从出发到下一次出发的 AI 旅行 Agent(dsh 插件)

Danceiny/gotry: GoTry — 从出发到下一次出发的 AI 旅行 Agent(dsh 插件)

7 hours ago

English | 简体中文

GoTry

Body and soul — more travel, less tourism.
身体和灵魂,更多旅行,更少旅游。

GoTry is an AI travel agent for "departure to next departure." You say where you want to go and why; it asks what needs asking, then lets code — not the model — make the call: can you go, how, and at what true cost. Every number comes with a source; nothing is hallucinated.

GitHub Stars</a> CI</a> npm</a> License: MIT</a> Node</a> Docs</a>

What it does · How it works · Demo · Benchmark · Quick start · Privacy & trust · Status & roadmap · Contributing · Docs

What GoTry Does

Turns "I want to go somewhere" into "can I go, how, and at what true cost?" If this weekend won't work, GoTry doesn't drop the idea — the destination is parked in a wish pool with the exact conditions that would reopen it.

  • For travelers — it asks the right questions first (which days you can leave, departing from where, on what budget), then gives every destination a straight answer: yes, no, or why — plus the smallest change that turns a no into a yes.
  • For agent builders — the LLM only listens, translates, and explains; numbers are computed and verdicts made by code. Every delivered number carries a source tag; writes are gated by design.

How It Works

The model owns the language ends; deterministic code owns the numbers:

flowchart LR
  U(["Traveler: 'I want three relaxing days in Dali'"]) --> A
  subgraph LANG["LLM owns — language"]
    A["Motivation interview<br/>working window · bookings · departure city"] --> B["Fact extraction<br/>working-hours &amp; leave semantics"]
  end
  subgraph NUM["Deterministic TypeScript kernel — ordinary choice path"]
    C["Candidate enumeration<br/>solveChoiceSegment"] --> D["Evaluate each choice<br/>evaluateChoice · true-cost checks"] --> V["Choice verdict<br/>feasible / infeasible · recommendation"]
  end
  subgraph Z3PATH["Separate script/control-plane entry"]
    Z["solveUnified<br/>script/control-plane flight-chain · Z3"]
  end
  subgraph GATE["Gates &amp; memory"]
    E["Evidence chain<br/>every number carries a source tag"] --> F{"Fact gate"}
    F -->|"all claims trace to exact-date tools"| G["Verified itinerary delivered"]
    F -->|"unverifiable"| H["Blocked — never posed as verified"]
    I[("Wish pool<br/>saved with recall conditions")]
  end
  B --> C
  V --> E
  B -.->|"separate script/control-plane entry"| Z
  Z --> E
  V -.->|"infeasible today"| I
  I -.->|"conditions met — enumerate again"| C
  classDef llm fill:#1f6feb22,stroke:#1f6feb,color:#1f6feb;
  classDef solver fill:#2ea04322,stroke:#2ea043,color:#2ea043;
  classDef gate fill:#d2992222,stroke:#d29922,color:#9e6a03;
  class A,B llm;
  class C,D solver;
  class E,F,G,H,I gate;

Architecture — the sync path from chat through the kernel to the fact gate, plus the state/async control plane and the read-only data layer:

GoTry system architecture — sync path from chat through TypeScript candidate enumeration, evaluation, and choice to the fact gate, with the explicit flight-chain Z3 path shown separately, plus the state/async control plane and the read-only data layer

Interactive version: docs/assets/gotry-system-architecture.en.html (archify, showcase-validated). Layers: L2 dsh plugin · L3 ts/src/unified.ts kernel · L4 effect interpreter + realtime bridges · L5 loopx governance. ADRs: docs/architecture.md.

Capability groups:

  • Evidence-first retrieval and routing — realtime sources and your own browser session remain read-only, with source tags, channel-health advice, and fail-closed fact boundaries. See docs/tools.md, docs/data-sources.md, and the session data RFC.
  • Artifacts and local review — itinerary Markdown/HTML artifacts can be listed and read as source text; native preview and opt-in Lavish feedback remain separate host capabilities. See artifact and Lavish contracts.
  • External events — the W2A envelope is bounded and inert by default; listeners and sensor activation remain a separate seam. See external-event design.

Demo

https://github.com/user-attachments/assets/6628c254-eba1-4017-a883-c70d22616939

Illustrative animation-harness capture of a condensed transcript — not a real gotry web product UI E2E (sources: SVG · webm):

> Two or three days staring at Erhai Lake, leaving from Shanghai, budget 3000, annual leave — no work.

GoTry: constraints captured — • window: 2 days • departure: Shanghai • budget: ¥3000 all-in • motivation: recovery [escape_rest: 0.7] • no bookings yet

Engine verdict: Erhai, Dali: not feasible now — a 2-day window can't hold "at least 5 days of Erhai recovery". Relax: extend to 5 days, ~¥4950. ★ saved to your "next departure" wish pool. Qiandao Lake: feasible (G7315 06:35, ¥996, arrival energy 84%, effective rest 4.4h) Taihu Lake: feasible (G101 09:00, ¥716, effective rest 4.6h) Suggestion: Qiandao Lake (imagery match 80%).

[skeleton:openflights] ✓ SZX↔PVG verified [realtime:hbcli] Shanghai airports live [static-pack:estimate] G7315/G7316 priced on Jul–Aug off-season rates

Tags: [skeleton:openflights] route verified against the public route DB · [realtime:...] pulled live seconds ago · [static-pack:estimate] estimate — verify before booking. Attached by the render layer, never the model.

Benchmark

The same real multi-country workation prompt — with planted traps (no year given, a vague "Wan-xx", an already-resolved ambiguity) — goes verbatim to mainstream assistants; answers are archived word-for-word and scored against a ground-truth rubric (docs/evaluation/persona-bench/).

| Dimension | Generic chat assistant (Kimi, 13 real turns) | OTA agent (Fliggy open platform, single turn) | GoTry contract | |---|---|---|---| | Calendar grounding | ✗ 2025 calendar; three user corrections, three apology-refits | ✗ derived weekdays land on the 2025 calendar — contradicting its own answer on the same page | (2)(8)(9) + time-anchor card | | Constraint interview | ✗ zero questions; both load-bearing constraints surfaced by the user at turn 6 | △ asks sales qualifiers (budget / star level / sea view); zero must-asks | (1)(10) | | Feasibility & time accounting | ✗ density illusion, caught by the user | ✗ HK errands + same-day flight with no time budget; an "8h" flight contradicting its own arrival time | (4) + door-to-door true cost | | Fact provenance | △ destination research holds up | ✗ sells a defunct airline (retired 2020); every price unsourced | (3)(7)(13)(20) | | Structure completeness | △ decent comparison table only at turn 13 | ✓✓ full skeleton in one turn — completeness is table stakes | verified completeness (fact gate) | | Persona in one line | erudite but stateless chatter — the user ends up doing four jobs | a flawless-brochure OTA clerk — every section ends in a price table | trusted travel engineer: interview first, the solver decides, infeasible says infeasible |

Evidence boundary: a qualitative comparison, not a scorecard. The Kimi/Fliggy columns summarize archived transcripts (13 turns vs one); the GoTry column summarizes repository behavior contracts. No ranking or uplift is asserted.

Single best finding: two unrelated products derived their weekdays from the 2025 calendar — calendar grounding must be a mechanism, not model luck (postmortem).

Quick Start

npx @danceiny/gotry web        # → http://127.0.0.1:3080
npx @danceiny/gotry doctor     # optional-channel health check (--fix to repair)
npx @danceiny/gotry "Two recovery days from Shenzhen, budget 3000"   # headless one-shot

Node ≥ 22.15. LLM keys live in the dsh host UI (OpenAI-compatible endpoints included) — gotry never asks for or echoes them. Any npm-compatible registry works; pin an exact version if a mirror's latest lags. Inside this repo use the source entry ./gotry web (bare-name npx fails there). Eligible launches may offer a one-time capability check; CI / non-TTY never prompts, never installs. Onboarding details + operator scripts: docs/tools.md. Source install: npm ci && npm --prefix ts ci && node scripts/build-dist.mjs — the same pinned DSH 0.2.0-rc.2 closure as the npm package. Full-stack verify: ./scripts/run-all-tests.sh.

Privacy and Trust

The personal desktop account-session channel reads realtime data from your own logged-in Chrome, under four hard rules:

  1. Login happens on the external website — no passwords, SMS codes, or cookie values; cookie names only.
  2. Consent card, once per session — refusal revokes it; master switch sessionAccess: ask|allow|off.
  3. Physically read-only — a ReadGuard aborts writes at the network layer; a captcha stops the agent.
  4. Never hijacks your browser — dedicated tabs only; tests never open windows.
One-time prerequisite: the Stai Travel Bridge extension (one-click, auto-updates) — until installed, tools return needs-extension with the store link and spend nothing. The separate HotelByte employee-portal flow can send search data to an authorized backend bridge and can handle one-time supplier-login credentials in memory; see the extension privacy policy.

Trust is structural, not promised:

  1. The model translates; code decides — no LLM feasibility verdicts or arithmetic.
  2. Every number carries a source tag — attached by the render layer, switched honestly on degradation.
  3. No active supplier booking/payment write path exists — the mechanism exists but is not activated; such tools must pass WriteGate before they ship.
  4. Unverifiable means blocked — the fact gate never lets an untraceable claim ship as "verified"; anchors are fingerprinted.
  5. Prices fail closed — unknown model, no guessed price; the price table changes only by PR.
  6. Your data is yours — state under gotry-state/; tests run on isolated roots.

Project Status and Roadmap

Current boundary: deterministic planning and evidence-bound read capabilities are available; booking and real-user acceptance remain outside the shipped claim. See the architecture and roadmap.

v0.2.0-rc.28 on npm (latest). Pre-1.0: the core loop works end to end; evaluation is still at deterministic contracts and validators, with no external scores or uplift claims. External W2A events are contract-only and inert; no real sensor bridge or consumer is active yet.

Working today

  • Interview, deterministic feasibility verdicts, and itineraries with door-to-door true cost.
  • Read-only realtime retrieval with typed, invocation-bound facts and explicit provenance.
  • Tenant-scoped memory for motivation, wishes, companions, timeline, and durable work.
  • Non-overwriting itinerary HTML generation from registered session facts, plus a scoped self-check and approved repair path.
Not yet
  • No supplier booking or payment path is active; any future write remains behind WriteGate and trusted user confirmation.
  • Live-availability evidence is partial, and the real-user cohort has not reached its exit bar.
  • English coverage remains limited to the solver output layer.
timeline
  title From departure to next departure
  M0 ✅ : Deterministic pipeline — dual engines reconciled
  M1 ✅ : Agent form — chat as interface
  M2 ✅ : Realtime data — evidence tags go live
  M3 ◀ current : MVP — web face + 50–200 seed users, evidence open
  M4 : Memory &amp; next departure — wish pool · cohort evidence
  M5 : Transaction loop — WriteGate-gated booking
  M6 : B2B embedding — zero-kernel-diff sponsor plugin

Milestone gates: docs/roadmap.md · engineering state: docs/architecture.md · per-version decisions: docs/release-notes.md + CHANGELOG.md.

Contributing

Branch off latest main (feat/ · fix/ · docs/ · chore/), keep typecheck + full regression green, open a PR. Red tests never merge. Guide: CONTRIBUTING.md.

AI agents: AGENTS.md is the binding contract — sweep async work orders on entry · arithmetic only in the evaluate layer, solving only in unified.* · never write shared state (ts/dsh-runtime/gotry-state/) · update only the affected documentation authority defined by architecture.md §11 · stage named files only, no git add -A.

Documentation

Documents ship as bilingual pairs (x.md English + x.zh-CN.md 中文); divergence within a pair is treated as a bug (machine-generated CHANGELOG.md and the tool-managed superpowers/ namespace exempt).

| Document | Purpose | |---|---| | docs/architecture.md | System, ADRs, evolution, debt (authoritative) | | docs/roadmap.md | M0–M6 timeline & current position | | docs/user-guide.md | End-user guide | | docs/tools.md | Tool reference: contracts, routing, onboarding | | docs/data-sources.md | Data sources & evidence-chain policy | | docs/release-notes.md | Release decisions per version (the "why") | | CHANGELOG.md | Machine-derived changelog | | docs/README.md | Docs conventions & full index |

License

MIT — same as upstream dsh. See LICENSE.

Built with: DeepSeek Harness 0.2.0-rc.2 (root-pinned) · Cordis · Z3 (WASM) · loopx (pipx) · hotelbyte-cli · Agent-Reach v1.5.0 · OpenFlights · TypeScript

Version baseline: v0.2.0-rc.28 (npm latest). Verification gates: scripts/run-all-tests.sh; release flow: scripts/publish-npm.sh.

Star History Chart

Chat with me