Skip to main content

Module map

A reference to every module in src/skillgen/, taken from the source. Each public function has a Google-style docstring in the code; this page is the map, the code is the detail.

Top level​

ModuleRoleKey names
__init__.pyPackage constantsTOOL_NAME = "skillgendev", __version__
cli.pyCommand line; the only module that printsmain, build_parser, HANDLERS, emit, Reply, EXIT_OK/FAILED/ERROR/NEEDS, command_<name>
pipeline.pyPer-route orchestrationdiscover_routes, prepare_route, analyze_route, finish_route, write_skill, fingerprint_request, measure_page_model, write_index, ask_claude_for_routes
handoff.pyThe next step a stopped run hands overNextStep, build_next_step, format_command
workspace.py.skillgendev/ paths and atomic file accessWorkspace, find_workspace_root, write_text_atomically, GITIGNORE_LINES
config.pyconfig.jsonSettings, SliceSettings, Environment, AnalyzerKind, check_app_url
assets.pyShipped data in a wheel or checkoutfind_data_folder, read_fill_engine, read_index_template
export.pyExports, manifests, plugin layoutsexport_skills, export_chatgpt_plugin, check_export_safety, build_manifest, PLUGIN_AUTHOR
logs.pyRun logsstart_logging, list_logs, KEPT_LOGS = 30
errors.pyExceptions and needsSkillgenError and subclasses, Need, ActionNeededError

analyze/​

ModuleRoleKey names
prompt.pyThe prompt Claude Code receives for one route, and for listing routesPROMPT_VERSION = 3, AnalysisRequest, build_analysis_prompt, build_route_listing_prompt
runner.pyHeadless Claude Code, a file Claude wrote, or a replayClaudeCodeAnalyzer, FileAnalyzer, ReplayAnalyzer, build_claude_command, READ_ONLY_TOOLS, is_limit_reached

graph/​

ModuleRoleKey names
codegraph.pyFile-level code graph built with Graphify, with a staleness snapshotCodeGraph, build_code_graph, find_graph_staleness, find_route_nodes
connections.pyGraphify's own explain and path, through its command lineGraphifyGraph, explain_node, find_path
hubs.pyRanks files that probably declare routes (pure)rank_router_candidates, RouterHint
slice.pyPage slices and change impact (pure)slice_page, find_affected_files, find_stale_skills, resolve_component

routes/​

ModuleRoleKey names
hintpacks.pyLoads YAML hint packsload_hint_packs, FolderPack, RouterPack
folders.pyRoutes from folder-routing packs, monorepo rootsfind_folder_routes, find_project_roots
astgrep.pyRoutes declared in code, through ast-grepfind_declared_routes, run_ast_grep, is_in_skipped_folder
merge.pyMerges candidates into routes.json, keeping developer editsmerge_routes, rename_route, find_pattern_files, check_skill_name
naming.pySkill names and descriptions under the Agent Skills rulesbuild_skill_name, is_valid_name, build_description, MAX_NAME_LENGTH = 64
paths.pyOne canonical route shapenormalize_route, match_route, check_route_text, is_route_wanted

model/​

ModuleRoleKey names
page.pyThe page modelPageModel, FieldSpec, Strategy, ValueType, Condition, View, Layout, SubmitSpec
facts.pySources and evidenceSource, Provenance, Evidence
confidence.pyConfidence arithmeticcombine_confidence, cap_conflict, INCLUSION_THRESHOLD = 0.7, CONFLICT_CAP = 0.5
route.pyroutes.json and questions.json entriesRouteEntry, RouteTable, Question
serialize.pypage.json to and from the modelpage_to_dict, page_from_dict
probe.pyWhat the probe saw, as plain dataProbedPage, ProbedField

compile/​

ModuleRoleKey names
merge.pyAnalysis + probe + answers → page modelbuild_page_model, merge_open_steps, merge_views, is_risky_step
fields.pyMerges one fieldassess_field, build_field, collect_questions
assess.pyDecides one fact and applies answersassess_fact, apply_answer
layout.pyAttaches measurements as a layoutbuild_layout, carry_layout
unopened.pyWhat the live page had that the model missedfind_missed_on_page

generate/​

ModuleRoleKey names
skill_md.pyRenders SKILL.md and references/fill.mdrender_skill_md, render_fill_reference, BODY_TOKEN_BUDGET = 5000
inline_setter.pyThe setter SKILL.md carriesbuild_inline_setter, render_engine, choose_landmarks, STATUSES, LAYOUT_STATES
fill_script.pyscripts/fill.jsbuild_fill_script, find_forbidden_syntax, MAX_SCRIPT_BYTES = 48000
fill_engine.jsThe shared fallback engine
locators.pyreferences/locators.mdrender_locators
manual_steps.pyreferences/manual-steps.mdrender_manual_steps
layout_reference.pyreferences/layout.jsonrender_layout_reference
examples.pySynthetic example values from constraintsbuild_example_values
evals.pyevals/evals.jsonbuild_evals
folder.pyAll files of one skill, in memorybuild_skill_files, fit_skill_text
bundle.pyMany page skills into one skillbuild_bundle_files, build_entry_skill_md
user_rules.pyThe user block and check: annotationsextract_user_block, parse_check, append_user_rule
index_page.py, index_template.htmlskills-index.json and .htmlbuild_index_data, render_index_html

probe/​

ModuleRoleKey names
runner.pyPlaywright: probe, measure, loginprobe_route, measure_page_layout, find_xy_need, save_login, CAPTURE_VIEWPORT
extract.jsIn-page extraction of fields and clickables
measure.jsMeasures a skill's own selectors
classify.pyRaw controls → probed fields (pure)classify, describe_shape
capture.pySaves and reads probe capturesprobed_page_to_dict
journal.pyWhat discovery already learnt about a pageJournal, record_state, read_journal

validate/, drift/, schema/​

ModuleRoleKey names
validate/spec.pyAgent Skills spec checkscheck_skill_md, check_skill_files, check_fill_script, MAX_BODY_LINES = 500
validate/model_checks.pyPage model consistencycheck_page_model, find_cycle
validate/scan.pySecret and personal-data scanscan_files, SAFE_EMAIL_DOMAINS, SAFE_PHONE
drift/check.pyStale skills after code changesfind_drift, list_changed_files, IMPACT_DEPTH = 2
drift/diff.pySemantic diff of two page models (pure)diff_pages, Change
schema/JSON schemas and one validatorvalidate_document, find_schema_problems