# Urbit OS

- [What is Urbit OS?](https://docs.urbit.org/urbit-os/what-is-urbit-os.md): Introduction to Urbit OS, a functional, deterministic personal server operating system. Includes documentation for the Arvo kernel, its modules, and the standard distribution in the %base desk.
- [Base](https://docs.urbit.org/urbit-os/base.md): Documentation for the %base desk, the Urbit OS standard distribution containing the kernel, Arvo, Hoon standard library, system apps like %hood, and affordances for writing threads.
- [Hood](https://docs.urbit.org/urbit-os/base/hood.md): API reference for %hood, a Gall agent that interfaces with Urbit OS. Includes documentation for its modules Drum (CLI management), Helm (system control), and Kiln (desk updates and filesystem).
- [Threads](https://docs.urbit.org/urbit-os/base/threads.md): Guide to writing threads, transient monadic functions for complex IO operations, managed by the %spider agent or the Khan vane, with tutorials, examples, and API reference.
- [Basics Tutorial](https://docs.urbit.org/urbit-os/base/threads/basics.md): Tutorial covering thread fundamentals including strands, monadic composition with form and pure, bind operations, input/output handling, and practical examples for writing threads.
- [Bind](https://docs.urbit.org/urbit-os/base/threads/basics/bind.md): Guide to monadic bind operations for strand composition using the ;< micgal rune, chaining strands sequentially, error handling, and strandio library functions for complex thread operations.
- [Fundamentals](https://docs.urbit.org/urbit-os/base/threads/basics/fundamentals.md): Thread fundamentals. Transient agent functionality, strand composition, thread definition, the +form and +pure arms, threads' location in /ted directory, and creating basic threads.
- [Input](https://docs.urbit.org/urbit-os/base/threads/basics/input.md): Guide to strand input including $bowl structure with ship, timing, and subscription data, input types (pokes, signs, agent communication), and accessing input data within thread execution.
- [Output](https://docs.urbit.org/urbit-os/base/threads/basics/output.md): Guide to strand output including cards and response codes (%wait, %skip, %cont, %fail, %done), flow control mechanisms, error handling, and completion patterns in thread execution.
- [Summary](https://docs.urbit.org/urbit-os/base/threads/basics/summary.md): Summary and recap of thread concepts including %spider agent management, strand composition, +form/+pure/+bind operations, input/output patterns, and strandio utility functions.
- [HTTP API Guide](https://docs.urbit.org/urbit-os/base/threads/http-api.md): Guide to running threads via HTTP API - URL structure, mark conversion, JSON handling, and authenticated requests through Eyre.
- [Spider API Reference](https://docs.urbit.org/urbit-os/base/threads/api.md): Spider API reference for starting, stopping, and interacting with threads. Pokes, subscriptions, and thread lifecycle management.
- [Strandio Reference](https://docs.urbit.org/urbit-os/base/threads/strandio.md): Reference for Strandio library functions - HTTP requests, pokes, subscriptions, scries, timers, and more for thread programming.
- [Examples](https://docs.urbit.org/urbit-os/base/threads/examples.md): Collection of practical thread examples including Gall agent integration, JSON fetching, child thread management, main-loop patterns, agent communication, scrying, and fact handling.
- [Child Thread](https://docs.urbit.org/urbit-os/base/threads/examples/child-thread.md): Thread examples showing how parent threads can start/stop child threads, and get their results.
- [Fetch JSON](https://docs.urbit.org/urbit-os/base/threads/examples/get-json.md): Practical example of fetching and parsing JSON data in threads using strandio's +fetch-json function, demonstrated with a Bitcoin price fetcher that queries external APIs and processes responses.
- [Gall](https://docs.urbit.org/urbit-os/base/threads/examples/gall.md): Examples of Gall agent integration with threads covering thread lifecycle management, starting threads, handling results, subscription patterns, cancellation, and inter-thread communication.
- [Poke Thread](https://docs.urbit.org/urbit-os/base/threads/examples/gall/poke-thread.md): Gall agent example demonstrating how to poke running threads.
- [Start Thread](https://docs.urbit.org/urbit-os/base/threads/examples/gall/start-thread.md): Gall agent examples for starting threads - inline vs file threads, Khan vs Spider APIs, thread IDs and subscription patterns.
- [Stop Thread](https://docs.urbit.org/urbit-os/base/threads/examples/gall/stop-thread.md): Gall agent example demonstrating how to stop running threads - Spider-stop pokes and thread lifecycle management.
- [Take Facts](https://docs.urbit.org/urbit-os/base/threads/examples/gall/take-facts.md): Gall agent example for receiving facts from running threads - subscription patterns and fact handling while threads execute.
- [Take Result](https://docs.urbit.org/urbit-os/base/threads/examples/gall/take-result.md): Gall agent examples showing how to handle thread results - success/failure cases for Khan and Spider thread execution.
- [Main-loop](https://docs.urbit.org/urbit-os/base/threads/examples/main-loop.md): Advanced thread examples using main-loop for continuous processing, multiple function patterns, and subscription handling.
- [Poke Agent](https://docs.urbit.org/urbit-os/base/threads/examples/poke-agent.md): Example thread demonstrating how to poke agents - sending a |hi command to a ship via the hood agent.
- [Scry](https://docs.urbit.org/urbit-os/base/threads/examples/scry.md): Thread example showing how to scry ames for ship IP addresses and ports - practical scrying with formatted output.
- [Take Fact](https://docs.urbit.org/urbit-os/base/threads/examples/take-fact.md): Thread example demonstrating subscription and fact handling - watching agents, taking facts, and processing subscription data.
- [Kernel](https://docs.urbit.org/urbit-os/kernel.md): API documentation and guides for the Urbit OS kernel and its modules Ames, Behn, Clay, Dill, Eyre, Gall, Iris, Jael, Khan, and Lick.
- [Arvo](https://docs.urbit.org/urbit-os/kernel/arvo.md): High-level technical introduction to Arvo, Urbit's functional operating system. Covers event handling, deterministic execution, and ACID database properties.
- [Cryptography](https://docs.urbit.org/urbit-os/kernel/arvo/cryptography.md): Arvo cryptography overview - Azimuth keys, networking keys, and cryptographic components across the system.
- [Move Trace](https://docs.urbit.org/urbit-os/kernel/arvo/move-trace.md): Arvo move trace tutorial - debugging kernel operations, tracing moves, and understanding system message flow.
- [Scries](https://docs.urbit.org/urbit-os/kernel/arvo/scry.md): Arvo scry guide - read-only requests to the global namespace, endpoint mechanics, and data retrieval patterns.
- [Subscriptions](https://docs.urbit.org/urbit-os/kernel/arvo/subscriptions.md): Arvo subscriptions guide - reactive data flow, subscription types, Clay/Gall/Jael subscriptions, and stream mechanics.
- [Ames](https://docs.urbit.org/urbit-os/kernel/ames.md): Technical documentation for Ames, Urbit's encrypted peer-to-peer networking protocol and the Arvo vane that implements it. Includes packet format, flows, congestion control, and cryptography.
- [Ames API Reference](https://docs.urbit.org/urbit-os/kernel/ames/tasks.md): Ames API reference - networking tasks for messaging, packet handling, remote scries, and ship communication.
- [Ames Cryptography](https://docs.urbit.org/urbit-os/kernel/ames/cryptography.md): Ames cryptography reference - AES encryption, Curve25519 key exchange, packet signing, and comet self-attestation.
- [Ames Data Types](https://docs.urbit.org/urbit-os/kernel/ames/data-types.md): Ames data type reference - networking structures for packets, lanes, ships, addresses, and message flow state.
- [Ames Scry Reference](https://docs.urbit.org/urbit-os/kernel/ames/scry.md): Ames scry reference - network queries for peers, routes, message flows, bones, and ship connectivity information.
- [Behn](https://docs.urbit.org/urbit-os/kernel/behn.md): Documentation for Behn, Arvo's timer module for scheduling and managing timers.
- [Behn API Reference](https://docs.urbit.org/urbit-os/kernel/behn/tasks.md): Behn API reference - timer tasks for setting and cancelling timers, scheduling events, and time management.
- [Behn Examples](https://docs.urbit.org/urbit-os/kernel/behn/examples.md): Behn timer examples - setting timers with wait tasks, handling wake gifts, and timing operations.
- [Behn Scry Reference](https://docs.urbit.org/urbit-os/kernel/behn/scry.md): Behn scry reference - timer queries for debugging timers, next timer, and scheduled timer information.
- [Clay](https://docs.urbit.org/urbit-os/kernel/clay.md): Documentation for Clay, Arvo's version-controlled, referentially-transparent, and global filesystem, including architecture, data types, marks, and usage patterns.
- [Clay API Reference](https://docs.urbit.org/urbit-os/kernel/clay/tasks.md): Clay API reference - filesystem tasks for reading, writing, tracking changes, and managing desks.
- [Clay Architecture](https://docs.urbit.org/urbit-os/kernel/clay/architecture.md): Clay filesystem architecture - distributed revision control, typed data, persistence, and versioned filesystem design.
- [Clay Data Types](https://docs.urbit.org/urbit-os/kernel/clay/data-types.md): Clay data type reference - filesystem structures for files, desks, revisions, merges, and version control.
- [Clay Examples](https://docs.urbit.org/urbit-os/kernel/clay/examples.md): Clay filesystem examples - reading files, tracking changes, managing desks, merging, and filesystem operations.
- [Clay Scry Reference](https://docs.urbit.org/urbit-os/kernel/clay/scry.md): Clay scry reference - filesystem queries by care for reading files, directories, hashes, and metadata.
- [Filesystem Hierarchy](https://docs.urbit.org/urbit-os/kernel/clay/filesystem.md): Clay filesystem hierarchy - desk organization, folder structure, app/gen/lib/sur/sys directories and conventions.
- [Marks](https://docs.urbit.org/urbit-os/kernel/clay/marks.md): Guide to using marks, Clay's conversion functions.
- [Mark Examples](https://docs.urbit.org/urbit-os/kernel/clay/marks/examples.md): Clay mark examples - CSV mark implementation with parsing, validation, and conversion code samples.
- [Using Marks](https://docs.urbit.org/urbit-os/kernel/clay/marks/using-marks.md): Clay marks usage - using mark cores and conversion gates for data transformation and type-safe operations.
- [Writing Marks](https://docs.urbit.org/urbit-os/kernel/clay/marks/writing-marks.md): Clay marks guide - writing mark files for data type conversion, validation, parsing, and format handling.
- [Using Clay](https://docs.urbit.org/urbit-os/kernel/clay/using.md): Clay usage guide - reading, subscribing, Unix sync, merge strategies, and filesystem best practices.
- [Dill](https://docs.urbit.org/urbit-os/kernel/dill.md): Guide to Dill, Arvo's terminal driver vane.
- [Dill API Reference](https://docs.urbit.org/urbit-os/kernel/dill/tasks.md): Dill API reference - terminal tasks for session management, input/output, and system printing.
- [Dill Data Types](https://docs.urbit.org/urbit-os/kernel/dill/data-types.md): Dill data type reference - terminal structures for dimensions, sessions, input, and output handling.
- [Dill Scry Reference](https://docs.urbit.org/urbit-os/kernel/dill/scry.md): Dill scry reference - terminal queries for sessions and system state information.
- [Eyre](https://docs.urbit.org/urbit-os/kernel/eyre.md): Guide to Eyre, Arvo's HTTP server vane.
- [EAuth](https://docs.urbit.org/urbit-os/kernel/eyre/eauth.md): Eyre authentication guide - web login, session management, cookies, and secure authentication mechanisms.
- [Eyre Data Types](https://docs.urbit.org/urbit-os/kernel/eyre/data-types.md): Eyre data type reference - web server structures for HTTP requests, responses, sessions, and server state.
- [Eyre External API](https://docs.urbit.org/urbit-os/kernel/eyre/external-api-ref.md): Eyre external API reference - HTTP endpoints, channel communication, authentication, and web interface integration.
- [Eyre Internal API](https://docs.urbit.org/urbit-os/kernel/eyre/tasks.md): Eyre API reference - web server tasks for HTTP handling, binding URLs, serving content, and session management.
- [Eyre Scry Reference](https://docs.urbit.org/urbit-os/kernel/eyre/scry.md): Eyre scry reference - web server queries for connections, bindings, authentication, and HTTP server state.
- [Low-Level Eyre Guide](https://docs.urbit.org/urbit-os/kernel/eyre/guide.md): Eyre web server guide - HTTP request handling, URL binding, authentication, channels, and web application development.
- [Noun channels](https://docs.urbit.org/urbit-os/kernel/eyre/noun-channels.md): Eyre noun channels guide - direct noun communication over HTTP for efficient data exchange with applications.
- [Gall](https://docs.urbit.org/urbit-os/kernel/gall.md): Documentation for Gall, Arvo's application framework for Urbit userspace apps.
- [Gall API Reference](https://docs.urbit.org/urbit-os/kernel/gall/gall-api.md): Gall API reference - agent notes and cards for communication, requests, arvo tasks, and inter-agent messaging.
- [Gall Data Types](https://docs.urbit.org/urbit-os/kernel/gall/data-types.md): Gall data type reference - agent structures for subscriptions, bowls, cards, signs, and agent lifecycle management.
- [Gall Scry Reference](https://docs.urbit.org/urbit-os/kernel/gall/scry.md): Gall scry reference - agent queries and vane-level endpoints for agent state, subscriptions, and metadata.
- [Iris](https://docs.urbit.org/urbit-os/kernel/iris.md): Documentation for Iris, Arvo's HTTP client module for making HTTP requests.
- [Iris API Reference](https://docs.urbit.org/urbit-os/kernel/iris/tasks.md): Iris API reference - HTTP client tasks for making requests, canceling requests, and receiving HTTP responses.
- [Iris Data Types](https://docs.urbit.org/urbit-os/kernel/iris/data-types.md): Iris data type reference - HTTP client structures for responses, MIME data, and outbound request configuration.
- [Iris Example](https://docs.urbit.org/urbit-os/kernel/iris/example.md): Iris HTTP client example - fetching remote resources with GET requests, handling responses, and processing HTTP data.
- [Jael](https://docs.urbit.org/urbit-os/kernel/jael.md): Guide to Jael, Arvo's vane for networking key infrastructure.
- [Jael API Reference](https://docs.urbit.org/urbit-os/kernel/jael/tasks.md): Jael API reference - PKI tasks and gifts for key management, subscriptions, domains, and ship identity operations.
- [Jael Data Types](https://docs.urbit.org/urbit-os/kernel/jael/data-types.md): Jael data type reference - PKI structures for keys, points, diffs, blocks, seeds, and Azimuth ship identity data.
- [Jael Examples](https://docs.urbit.org/urbit-os/kernel/jael/examples.md): Practical examples of Jael PKI tasks - subscribing to key updates, managing domains, web login codes, and key subscriptions.
- [Jael Scry Reference](https://docs.urbit.org/urbit-os/kernel/jael/scry.md): Jael scry reference - PKI queries for keys, lifes, rifts, domains, subscriptions, and ship identity information.
- [Khan](https://docs.urbit.org/urbit-os/kernel/khan.md): Guide to Khan, Arvo's thread-runner vane.
- [Khan API Reference](https://docs.urbit.org/urbit-os/kernel/khan/tasks.md): Khan API reference - thread runner tasks for executing threads, handling results, and thread lifecycle management.
- [Khan Data Types](https://docs.urbit.org/urbit-os/kernel/khan/types.md): Khan data type reference - thread runner structures for results, errors, and thread execution state.
- [Khan Example](https://docs.urbit.org/urbit-os/kernel/khan/example.md): Khan thread runner example - running threads from Gall agents with success/failure handling and result processing.
- [Lick](https://docs.urbit.org/urbit-os/kernel/lick.md): Guide to Lick, Arvo's IPC vane.
- [Lick API Reference](https://docs.urbit.org/urbit-os/kernel/lick/tasks.md): Lick API reference - IPC tasks for socket creation, data transmission, and inter-process communication.
- [Lick Guide](https://docs.urbit.org/urbit-os/kernel/lick/guide.md): Lick IPC guide - building applications that communicate with external programs through Unix sockets.
- [Lick Examples](https://docs.urbit.org/urbit-os/kernel/lick/examples.md): Lick IPC examples - inter-process communication with external programs, socket management, and data exchange.
- [Lick Scry Reference](https://docs.urbit.org/urbit-os/kernel/lick/scry.md): Lick scry reference - IPC queries for debugging socket connections and port status.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.urbit.org/urbit-os.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
