Inkdown
Start writing

Claude-Code

62 filesยท4 subfolders

Shared Workspace

Claude-Code
codex

03-query-system

Shared from "Claude-Code" on Inkdown

Query System Architecture

Overview

The Query System is the heart of Claude Code - it manages the conversation with Claude's API, handles tool execution, and orchestrates the entire interaction flow.

Plain text
0000_start_here_index_and_recommended_reading_order.md
0100_project_overview_tech_stack_runtime_modes_and_folder_map.md
0200_startup_flow_entry_points_and_cold_start_sequence.md
0300_codebase_modules_layers_state_models_and_schemas.md
0400_system_architecture_and_design_rationale.md
0500_interactive_repl_request_flow_end_to_end.md
0600_headless_sdk_and_print_mode_request_flow_end_to_end.md
0700_mcp_integration_connection_and_tool_call_flow.md
0800_external_services_sdks_storage_and_local_dependencies.md
0900_environment_variables_settings_feature_flags_and_failure_modes.md
1000_non_obvious_patterns_gotchas_and_debugging_traps.md
1100_full_codebase_file_inventory_grouped_by_directory.md
kimi
00-overview.md
01-entrypoints.md
02-state-management.md
03-query-system.md
04-tools-system.md
05-tasks-system.md
06-ui-components.md
07-bridge-remote.md
08-services.md
09-skills-plugins.md
10-commands.md
11-testing-architecture.md
12-permission-system.md
13-build-system.md
14-ink-internals.md
15-git-internals.md
16-context-compaction.md
17-vim-mode.md
18-mailbox-notifications.md
19-session-persistence.md
20-hooks-system.md
21-error-recovery.md
README.md
qwen
00-overview.md
01-entry-points.md
02-query-engine.md
03-tools-and-tasks.md
04-commands-and-skills.md
05-state-management.md
06-ink-rendering.md
07-bridge-remote.md
08-mcp-services.md
09-services-overview.md
10-multi-agent.md
11-system-prompt-constants.md
12-tool-interface.md
13-memory-system.md
14-buddy-companion.md
15-keybindings.md
16-stop-hooks.md
17-vim-mode.md
18-upstreamproxy.md
19-cost-tracking-history.md
20-contexts-styles-onboarding.md
21-hooks.md
22-screens.md
tweets-explain
claude-code-memory-analysis.md
compact
memory-system
agentic-architecture

Core Files

FilePurpose
QueryEngine.tsMain class managing query lifecycle
query.tsCore streaming logic and API communication
query/config.tsQuery configuration building
query/deps.tsDependency injection for testing
query/transitions.tsState machine transitions
query/tokenBudget.tsToken limit management

Query Engine Class

TypeScript
Key Insight

QueryEngine is reusable across turns. You create it once per conversation, then call submitMessage() for each user input.


Query Flow

Plain text

Query Function (Streaming Core)

TypeScript

Tool Execution Flow

Plain text
Tool Execution Code
TypeScript

Streaming Architecture

Plain text
Why Generators?

Using AsyncGenerator allows incremental UI updates:

TypeScript

Message Compilation

Before sending to API, messages are normalized:

TypeScript

Context Window Management

Plain text
Compaction Types
TypeScript

Error Handling

TypeScript
Recovery Strategies
Error TypeStrategy
Rate LimitWait and retry with backoff
Server ErrorRetry with exponential backoff
Context LengthCompact and retry
Max OutputTruncate and continue
Invalid ToolReturn error to LLM

Configuration Building

TypeScript

Testing the Query System

TypeScript

Key Concepts

1. Turn-Based

Each submitMessage() is one "turn" - a complete request/response cycle.

2. Recursive for Tool Loops

The query function calls itself recursively when tools need to continue the conversation.

3. Streaming is Primary

All responses stream - no blocking waits. UI updates incrementally.

4. Stateless Core

QueryEngine holds state, but the query() function is pure - takes params, returns events.

5. Compaction is Automatic

Context window management happens transparently to the user.


Related Documentation

  • State Management - How query updates state
  • Tools System - How tools integrate with queries
  • Entrypoints - How queries are initiated