# Observing Desk > Paste tonight's target list - one line per object with a name, an RA and a Dec, optionally a > priority (p1-p3) and the minutes you want on it - choose the site and the local evening date, > and your browser computes the night: sunset and sunrise, civil, nautical and astronomical > twilight, the dark window and its length, local sidereal time at midnight, the Moon's phase, > illumination, rise and set and the share of the dark window it is up, and for every target its > rise, transit with altitude, set, the window above your altitude floor during darkness, its best > altitude and airmass and its separation from the Moon. Free, before you sign in. Two metered > lanes then run over the same list: PLAN orders the night into observing windows with reasons, > dropped targets, gaps, risks and a checklist; CHECK reads the draft schedule you already wrote > row by row against the same ephemeris and rewrites the rows that fail. Derived from the agent > skill @k-dense-ai/astropy (k-dense-ai/scientific-agent-skills, MIT). Not affiliated with the > Astropy Project. Observing Desk is the run-sheet check an observer does at the kitchen table before driving to the telescope, made rigorous. It is for the amateur with a list of Messier objects and one clear night, the imaging team splitting a mosaic across a session, and the student allocated four hours on a shared instrument who has to prove the targets are actually up. ## The engine Every number on the page comes from an in-browser ephemeris after Meeus, Astronomical Algorithms (2nd ed.): Greenwich apparent sidereal time with nutation, rigorous precession of J2000 positions to the equinox of date, the Sun to 0.01 degree, the Moon by the full sixty-term series for longitude, latitude and distance followed by topocentric parallax from the observer's actual position, Pickering (2002) airmass, and event solvers (bracketing on a sampled curve, then bisection) for every rise, set, transit and twilight crossing. Altitudes are geometric: no refraction is applied, and the page says so wherever it prints one. The build compared the engine against astropy 8 on 401 checks across five sites (Kitt Peak, Paranal, La Palma, Tromso, Siding Spring) and dates from 2025 to 2029: star altitudes and azimuths within 0.6 arcminutes, the Sun within 0.006 degrees, the topocentric Moon within one arcminute, Moon separations within one arcminute, twilight crossings within 2 seconds, moonrise and moonset within 4 seconds, transits within 4 seconds. A deliberately failing control (a star at 4 degrees, geometric versus astropy's refracted altitude) disagreed by 10.6 arcminutes, as it must - a comparison that cannot fail proves nothing. ## What the two lanes return Both lanes return one JSON object with `lane`, `verdict`, `headline` and `summary`. PLAN adds `night_summary`, `schedule` (ordered rows: target, start, end, minutes, why, alt_start, alt_end, airmass_start, moon_sep, notes), `dropped` (every target not scheduled, with the reason), `gaps`, `risks` and `checklist`. Verdict is `ready`, `thin` or `rework`. CHECK adds `findings` - exactly one per draft row, with `status` ok / marginal / problem, the problem and a concrete fix - `revised` (the corrected sequence in the schedule row shape) and `notes`. Verdict is `sound`, `fixable` or `rework`. ## Reconciliation The model is not trusted with the sky. Every time and altitude it writes is re-read against the same engine that produced the night facts: is the target in the list, is the slot inside the dark window and inside the target's own window, does the target stay above the floor for the whole slot, is the stated altitude within 3 degrees and the stated Moon separation within 6 degrees of the engine's, do rows overlap, is every target in exactly one of schedule or dropped. The page counts the statements checked and the disagreements, and shows each one. In the CHECK lane the browser also reads the observer's draft first and flags each row itself; a row the browser flagged that the model calls "ok" is a disagreement. ## Limits No catalogue: a name without coordinates is not a target. No weather, seeing or horizon profile. No refraction. The Moon is the only solar-system body computed; planets are not. The list sent to the model is capped at 60 targets, lowest priorities cut first, and the cut is announced. ## Sources Derived from @k-dense-ai/astropy in k-dense-ai/scientific-agent-skills (MIT; licence text at https://observing-desk.skillsafe.ai/LICENSE-K-DENSE-SCIENTIFIC-SKILLS.txt). Algorithms after Jean Meeus, Astronomical Algorithms, 2nd edition. Airmass after Pickering (2002). Verified against astropy (Astropy Collaboration), which is not otherwise used by the page. ## API https://observing-desk.skillsafe.ai/api.html documents the HTTP surface: token, /me, /estimate, /run and /run-stream, the `task` field, and both lanes' input and output contracts.