



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0f910d8806d5761b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-a7abd4d4c49ac593.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-5fc4c4a9cb41e596.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-ed0cee9214dedabd.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-78a2491d538dab5a.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-c26b63d7c532d0a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a6f60cea68c08405.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-f66faf28b2ea18b6.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-6701f6218c53cf5b.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-7037fa46ae124d97.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-97df7784617ce1ea.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-9be9fe6313f476af.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-62747e27e61258dc.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-7a418ea859d1654d.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-72bd7d974b5ac1cc.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-4c5c0895f723f870.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_caches_react_shell","actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_shell","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_early_task_provisioning","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_awps_batching","copilot_mission_control_early_stop","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_index_data_router","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","milestone_show_data_router","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_merge_control","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_logged_out_repository_header","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_declutter","repo_pulls_dashboard_ga","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_nav_spark_models_removed","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-b752d992928a526c.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-789f756ca38b5dee.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-2f08c823163591a8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-633ad94fa06c334b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-0fb4c544a797ec0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-7c872b58ac9f1b39.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tp-7e9817cf5c068979.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-4a2eea6c963ceeb7.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.bef03fb24bb03be8.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-52ed81112a548e10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e8810f64c443fb9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-0417f617ad744a0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-9da36843ba9d191d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-9a1160b939f2cd52.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h-55903cf2303047ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hk-f1498fec45311acd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7aa1ff0a0e750f41.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-1d800d09e9a8720a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-9697c1c8f5cbf523.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-ad3b8b99367a3725.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-ad2b49a16d2a4933.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-5e0b3ae3c4036207.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-524a06aa946df6fc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-b1ee53c2200b172a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-7bf7b9d689fe3d10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a9-ca3bc10b816bcc1f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-21ec1e439ee2d87c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-4c39f7195fc42cc8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb-53cfff089eaac51b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-afcf86ccabc4cad2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zj-4d9cf83cf08e1643.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-6991af5b3829ffe8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nfv-a6c14301d3ea6d67.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b5-a2fde30ce0c692b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sw-9d0489dbf9a9c942.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ttf-7d5abe1b447ced2c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sj-c7a44023ee90d468.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0pd-c46d8dfae89c2b64.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-50d165856436f839.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.255cab819a92f7e1.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-9a54c2ca617029eb.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-8503588299651923.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-66e64888bc4615bb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-c7cfba40cf5a93b0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-148a74299e5a01ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-a9404625ec30bbc7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-8f9f1d6be01d6a22.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s0-68d09e5e8a80cb94.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y5-0cb3f75cec297941.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-cd9039ad946274ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-00bd469c4017a543.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27679061f16e1495.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iu-2d03f5e6d4fdd54d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gru-2b0fac8887ff8c57.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a0-234e967e7c6d22ce.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gz3-5bdfbfceac967bb6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/15m-64f3034430471048.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1e-c15441bdb94d54ae.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-6ad9a0527a5d7afd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi-3a42b8714e06c4d0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tu1-37e16844272ddefa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-ac66ededed061993.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gmn-1e5497c041b66231.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-d1b2a63015b5eb6d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2-e85522be441acf73.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-baf0a4193779952e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-87dce99c82a27004.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zkm-116b01b8485bbe3f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-518d12c9e011601d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-947db365ea875cfa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/14-8c7b4ad3c845664c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-2e7d883cb843e9e6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-38012819307fd539.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-6607da3b8b579202.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-f43eb09c2be69457.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-107312645ac2b72d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-fa7cdc0f7656d876.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p0l-fe491d943adf7508.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/v1e-d099d9fd21ad25e5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fn-7b298a45c55fb6fb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7cw-6e493a20eaaa04b5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ok-290e4b9465ba9c5b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6d-ca6d584a0fd6368c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y8-e2f18f5a24733f3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-3fd4a2e7dcbad8e2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vjg-2874f95f389c4d3f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-00b4e67334a0c652.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.501e99879e15a48e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.de2b1dde0494f261.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.0ffb5e588b18e1a5.module.css" />


  <title>claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:5c34a286-7155-efbd-2c89-91dbafaf0e93">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="B9B4:3DCEC3:3BD0F6:3889B0:6AC748E0" data-pjax-transient="true"/><meta name="html-safe-nonce" content="50cf26270c7a13aa83df202b0aeedfd53802f0214958f57a12b06c3adf19ed4b" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCOUI0OjNEQ0VDMzozQkQwRjY6Mzg4OUIwOjZBQzc0OEUwIiwidmlzaXRvcl9pZCI6IjM1NjQ0MTAwNDIzOTQ4MjI4ODAiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="b294a79c04782cf88669416cbfae907b1854c614970365be24bb610cc042a719" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:1182535754" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="Persistent memory for Claude Code — identity, context, and continuity across sessions - claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/e8c3ec5e17017989796e742b9a1f33b000132341ea83d04c01cfe7c28a816e36/Digital-Process-Tools/claude-remember" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember" /><meta name="twitter:description" content="Persistent memory for Claude Code — identity, context, and continuity across sessions - Digital-Process-Tools/claude-remember" />
  <meta property="og:image" content="https://opengraph.githubassets.com/e8c3ec5e17017989796e742b9a1f33b000132341ea83d04c01cfe7c28a816e36/Digital-Process-Tools/claude-remember" /><meta property="og:image:alt" content="Persistent memory for Claude Code — identity, context, and continuity across sessions - Digital-Process-Tools/claude-remember" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember" /><meta property="og:url" content="https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md" /><meta property="og:description" content="Persistent memory for Claude Code — identity, context, and continuity across sessions - Digital-Process-Tools/claude-remember" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="e111fc5d953c4ccc9fe372ee3ca9af49938847212708009cd003a8f459b40d99" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c4a65e47b0c850e1157ae8e66298070851d7e3b558038de5a3b4ff7a93e630ed" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="1ff3f1d4e1abd61f6f135b47d3b815e2f7169f8dd418f0118c6b1cf4de6cbc86" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="05282bf7f52de6d856d8251fd23b4d998d5520c9372a47808b9acf91a77386e0" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/Digital-Process-Tools/claude-remember git https://github.com/Digital-Process-Tools/claude-remember.git">

  <meta name="octolytics-dimension-user_id" content="150799090" /><meta name="octolytics-dimension-user_login" content="Digital-Process-Tools" /><meta name="octolytics-dimension-repository_id" content="1182535754" /><meta name="octolytics-dimension-repository_nwo" content="Digital-Process-Tools/claude-remember" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1182535754" /><meta name="octolytics-dimension-repository_network_root_nwo" content="Digital-Process-Tools/claude-remember" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="7dbf834a08f035e635ac14386e0657498aa6b451" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qc-1bbbe8787ea1cd4b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-4b95d20f4497e422.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.e2ab74db231fe5a2.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-6c612b51f355f96f.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.98ecd74f68dd8e8f.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-e468179ba7123a2e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rwd-069fc3d9814ff9fe.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz-e662bc3745e171e7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jag-3559ee48016881a2.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-7f22b36f29a9dd94.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-4998592d21eb16f7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8i-ea1b3f2e11ed8cd3.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-11ed636a612b7285.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.05b219cdb8e80c43.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/8i.5d9e6dcb0dade694.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FDigital-Process-Tools%2Fclaude-remember%2Fblob%2Fmain%2Fdocs%2Fconfiguration.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=Digital-Process-Tools%2Fclaude-remember","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md\",\"user_id\":null}}","auth_hydro_click_hmac":"0bc46ec5380e410af2d0f60b5765f3a94daae5b2678bab5bd39428c6b1980232","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2FDigital-Process-Tools%2Fclaude-remember%2Fblob%2Fmain%2Fdocs%2Fconfiguration.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="0bc46ec5380e410af2d0f60b5765f3a94daae5b2678bab5bd39428c6b1980232"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2FDigital-Process-Tools%2Fclaude-remember%2Fblob%2Fmain%2Fdocs%2Fconfiguration.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="0bc46ec5380e410af2d0f60b5765f3a94daae5b2678bab5bd39428c6b1980232"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=Digital-Process-Tools%2Fclaude-remember" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="0bc46ec5380e410af2d0f60b5765f3a94daae5b2678bab5bd39428c6b1980232"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-c551b5a7-370a-4346-b5ff-c202ffded5e0" aria-labelledby="tooltip-c3da8ab8-3ed9-4536-bc4d-b2cdacdf00b4" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-c3da8ab8-3ed9-4536-bc4d-b2cdacdf00b4" for="icon-button-c551b5a7-370a-4346-b5ff-c202ffded5e0" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      
    


    








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ym-1a7ce813a378e1f7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mn-bb458474353a279e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t5-26d19272bbf73ca3.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2d5-9abb2f6ba5c935d0.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/24-b11e1c4108322883.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mrn-12afac2ecd2be980.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dgq-bbf7670f9cdba2e0.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7w-740b4e942974ccba.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/we-c9f93392098ad6c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/775-f58305f9bcded6f1.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bn-fcef0645a47703fc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xgw-6c6cb7b2ed77f52e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ge-ca1c0ba8656f9680.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9f-3f61950dd9225c4a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-5bc29cc0ec528c19.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.501e99879e15a48e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.2c2cd1e307dba786.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"organization","label":"Digital-Process-Tools","is_root":false,"href":"/Digital-Process-Tools"},{"crumb_type":"repository","label":"claude-remember","is_root":false,"href":"/Digital-Process-Tools/claude-remember"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/Digital-Process-Tools/claude-remember","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/Digital-Process-Tools/claude-remember/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":11,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/Digital-Process-Tools/claude-remember/pulls","selectedLinks":["repo_pulls","checks"],"count":3,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"discussions","icon":"comment-discussion","label":"Discussions","href":"/Digital-Process-Tools/claude-remember/discussions","selectedLinks":["repo_discussions"],"popoverTarget":false,"commandId":"repositories:go-to-discussions","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/Digital-Process-Tools/claude-remember/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"actions-workflows","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/Digital-Process-Tools/claude-remember/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/Digital-Process-Tools/claude-remember/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/Digital-Process-Tools/claude-remember/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:Digital-Process-Tools/claude-remember","current_repo_name":"claude-remember","current_repo_nwo":"Digital-Process-Tools/claude-remember","current_repo_org":"Digital-Process-Tools","user_id":"Digital-Process-Tools"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=6","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ GlobalNavBar-module__loggedOut__Jv1rk prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/Digital-Process-Tools" data-discover="true"><span class="">Digital-Process-Tools</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/Digital-Process-Tools/claude-remember" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">claude-remember</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ styles-module__rightWithResponsiveCreateButton__SKn2W prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">11</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->11<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">3</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->3<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="discussions" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/discussions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg></span><span data-component="text" data-content="Discussions">Discussions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="actions-workflows" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="projects" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/projects" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Digital-Process-Tools/claude-remember/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktl_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":2,"text":"Configuration","anchor":"configuration","htmlText":"Configuration"},{"level":3,"text":"The summarizer's environment","anchor":"the-summarizers-environment","htmlText":"The summarizer's environment"},{"level":3,"text":"The Codex summarizer's allow-list (#724)","anchor":"the-codex-summarizers-allow-list-724","htmlText":"The Codex summarizer's allow-list (#724)"},{"level":3,"text":"Environment variables","anchor":"environment-variables","htmlText":"Environment variables"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguration\u003c/h2\u003e\u003ca id=\"user-content-configuration\" class=\"anchor\" aria-label=\"Permalink: Configuration\" href=\"#configuration\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConfig is resolved by deep-merging three layers (highest priority wins):\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLayer\u003c/th\u003e\n\u003cth\u003ePath\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003ePlugin bundled\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;plugin\u0026gt;/config.json\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShipped defaults\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUser-global\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e~/.remember/config.json\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAll your projects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePer-project\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;REMEMBER_DIR\u0026gt;/config.json\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne project\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003ePut cross-project preferences (timezone, cooldowns) in \u003ccode\u003e~/.remember/config.json\u003c/code\u003e. Put project-specific overrides in \u003ccode\u003e\u0026lt;REMEMBER_DIR\u0026gt;/config.json\u003c/code\u003e. See \u003ccode\u003econfig.user.example.json\u003c/code\u003e for a user-global template and \u003ccode\u003econfig.example.json\u003c/code\u003e for all available keys.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eDefault\u003c/th\u003e\n\u003cth\u003ePurpose\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edata_dir\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e.remember\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhere memory files are written. Relative paths resolve inside the project root (legacy default). Absolute paths or paths starting with \u003ccode\u003e~\u003c/code\u003e are expanded and treated as external — see \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md#external-storage-mode\"\u003eExternal storage mode\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecooldowns.save_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e120\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMinimum seconds between saves\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecooldowns.ndc_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3600\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCompression interval (hourly)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecooldowns.git_backup_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e900\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMinimum seconds between auto-backup commits (no-op if \u003ccode\u003e~/.remember/\u003c/code\u003e is not a git repo)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.remote\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eRemote to push memory backups to. Empty → bare \u003ccode\u003egit push\u003c/code\u003e, relying on the branch's upstream tracking (the standard \u003ccode\u003eorigin main\u003c/code\u003e setup). Set this if you have multiple remotes or a non-standard tracking config.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eBranch to push to. Only used when \u003ccode\u003egit_backup.remote\u003c/code\u003e is set; empty pushes the current branch. The resolved remote/branch is logged on the first push.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.reject_notice_after\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConsecutive \u003cem\u003epermanently rejected\u003c/em\u003e pushes before the backup interrupts you with a \u003ccode\u003esystemMessage\u003c/code\u003e on the next prompt, on top of the log line. A rejection never clears itself, so this only postpones a true report — it cannot swallow one. Transient failures (offline, no credentials) never count toward it. \u003ccode\u003e0\u003c/code\u003e disables the interruption and leaves the log line.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.commit_notice_after\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConsecutive \u003cem\u003efailed commits\u003c/em\u003e before the backup interrupts you with a \u003ccode\u003esystemMessage\u003c/code\u003e, on top of the log line. A failed commit is worse than a failed push — the memory is recorded in no git history at all, not even locally — and every cause is durable (no \u003ccode\u003euser.email\u003c/code\u003e, a full disk, a stale index lock, a pre-commit hook on the backup repo), so this only postpones a true report. git's own error is always in the log line. \u003ccode\u003e0\u003c/code\u003e disables the interruption.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.no_remote_notice_after\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e10\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConsecutive saves with \u003cstrong\u003eno remote configured\u003c/strong\u003e before the backup says so once — and only once for the lifetime of the store. Unlike every other counter here the condition may be entirely intentional: a local-only history is a legitimate choice, and a notice that repeated on every save would cost the others their meaning. \u003ccode\u003e0\u003c/code\u003e disables it.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.gpg_sign\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSign auto-backup commits. Default passes \u003ccode\u003e--no-gpg-sign\u003c/code\u003e so background commits never hang on a passphrase prompt. Set \u003ccode\u003etrue\u003c/code\u003e only with non-interactive signing (e.g. a hardware key) to honour your global \u003ccode\u003ecommit.gpgSign\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_backup.allow_remote_change\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne-shot opt-in to accept a changed push remote. The backup hook records the remote URL on first push and aborts every later push if it changed, since a swapped URL can mean a poisoned \u003ccode\u003econfig.json\u003c/code\u003e pointing at someone else's host. Set \u003ccode\u003etrue\u003c/code\u003e only when you are deliberately re-pointing at a new repo, then set it back. See \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/docs/git-backup-security.md\"\u003e\u003ccode\u003edocs/git-backup-security.md\u003c/code\u003e\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_restore.enabled\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eOff by default.\u003c/strong\u003e Fast-forward \u003ccode\u003e~/.remember/\u003c/code\u003e from the backup remote at session start, before memory is read into context — the read counterpart to git backup, for stores used from more than one machine (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/253\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/253/hovercard\"\u003e#253\u003c/a\u003e). Fast-forward only: a diverged store is refused and reported, never merged or rebased. The \u003ccode\u003egit fetch\u003c/code\u003e is detached and lands next session, so no network runs before your first prompt. See \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md#restoring-on-a-second-machine-off-by-default\"\u003eRestoring on a second machine\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_restore.remote\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eRemote to restore from. Empty → \u003ccode\u003egit_restore.remote\u003c/code\u003e falls back to \u003ccode\u003egit_backup.remote\u003c/code\u003e, then to \u003ccode\u003eorigin\u003c/code\u003e. A store that pushes to one place and reads from another is almost always a mistake, so the default is to share the backup's setting. \u003cstrong\u003eTreated as untrusted\u003c/strong\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/723\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/723/hovercard\"\u003e#723\u003c/a\u003e): \u003ccode\u003econfig.json\u003c/code\u003e is git-tracked and is exactly what \u003ccode\u003egit_restore\u003c/code\u003e's own fast-forward syncs FROM the remote, so this value can be attacker-controlled on a shared store. A leading \u003ccode\u003e-\u003c/code\u003e, or a value containing \u003ccode\u003e:\u003c/code\u003e or \u003ccode\u003e/\u003c/code\u003e, is rejected and the restore falls back to \u003ccode\u003eorigin\u003c/code\u003e rather than passing it to \u003ccode\u003egit fetch\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_restore.branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eBranch to restore from. Empty → \u003ccode\u003egit_backup.branch\u003c/code\u003e, then the branch currently checked out. With a detached HEAD and this unset, the restore refuses rather than guessing. \u003cstrong\u003eTreated as untrusted for the same reason as \u003ccode\u003egit_restore.remote\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/723\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/723/hovercard\"\u003e#723\u003c/a\u003e): a leading \u003ccode\u003e-\u003c/code\u003e is rejected rather than passed to \u003ccode\u003egit fetch\u003c/code\u003e. \u003ccode\u003egit_backup.remote\u003c/code\u003e/\u003ccode\u003egit_backup.branch\u003c/code\u003e get the identical treatment on the push side.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_restore.fetch_timeout_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e20\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHow long the detached background fetch may run before it is killed. It never blocks your prompt either way; the bound exists so a hung transport cannot leave a git process alive indefinitely, and so a fetch that never came back is reported as such next session rather than passing for \"up to date\".\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_restore.diverged_notice_after\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConsecutive session starts finding a \u003cem\u003ediverged\u003c/em\u003e store before the restore interrupts you with a \u003ccode\u003esystemMessage\u003c/code\u003e, on top of the log line. A divergence never clears itself, so this only postpones a true report — it cannot swallow one. A failed or unreachable fetch never counts toward it. \u003ccode\u003e0\u003c/code\u003e disables the interruption and leaves the log line.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_reconcile.enabled\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eOff by default, and currently hard-disabled regardless of this setting\u003c/strong\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/969\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/969/hovercard\"\u003e#969\u003c/a\u003e): \u003ccode\u003ehooks.d/after_save/60-git-reconcile.sh\u003c/code\u003e reads this flag first, then exits immediately either way, after a fifth consecutive \u003ccode\u003edestroys\u003c/code\u003e-class finding on the hook (#932/#939/#946/#952/#966) left a residual TOCTOU window open. If this is \u003ccode\u003etrue\u003c/code\u003e, the hook logs a \u003ccode\u003edisabled pending #969\u003c/code\u003e notice to \u003ccode\u003ehook-errors.log\u003c/code\u003e on every save -- which trips \u003ccode\u003e/remember:doctor\u003c/code\u003e's Recent errors WARN for exactly the users who opted in. Setting this to \u003ccode\u003etrue\u003c/code\u003e currently does nothing else until #969's real fix lands. The rest of this row describes the hook's intended behavior once that fix ships: an optional reconcile step for a store written from more than one machine (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/903\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/903/hovercard\"\u003e#903\u003c/a\u003e), in its own hook so \u003ccode\u003egit_backup\u003c/code\u003e's commit-and-push-only promise (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/253\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/253/hovercard\"\u003e#253\u003c/a\u003e) and \u003ccode\u003egit_restore\u003c/code\u003e's fast-forward-only promise both still hold with this off. When enabled: fetches, fast-forwards when purely behind, and when both ahead and behind (diverged) rebases local commits onto the remote tip and pushes, with one retry if the remote moves again between the fetch and the push. On a real conflict: aborts the rebase, changes nothing else, and reports the conflicting file names through a \u003ccode\u003egit-reconcile-notice\u003c/code\u003e -- surfaced the same way \u003ccode\u003egit_restore\u003c/code\u003e's own diverged notice is, as a one-line \u003ccode\u003esystemMessage\u003c/code\u003e on your next prompt (\u003ccode\u003escripts/user-prompt-hook.sh\u003c/code\u003e). Never resets, force-pushes or creates a merge commit. Declines while this slug's consolidation is rewriting \u003ccode\u003erecent.md\u003c/code\u003e/\u003ccode\u003earchive.md\u003c/code\u003e (shares consolidation's own lock) rather than risk a rebase mid-rewrite. NDC compression (\u003ccode\u003esave-session.sh\u003c/code\u003e's background \u003ccode\u003enow.md\u003c/code\u003e-\u0026gt;\u003ccode\u003etoday-*.md\u003c/code\u003e summarizer) is the OTHER writer of \u003ccode\u003enow.md\u003c/code\u003e, and its own staleness guards used to be blind to a rebase/merge landing while they were mid-check (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/932\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/932/hovercard\"\u003e#932\u003c/a\u003e) -- reconcile cannot share \u003ccode\u003esave-session.sh\u003c/code\u003e's own lock the way it shares consolidation's (that lock is held across the ENTIRE save, so checking it here would decline almost every save, not just the rare racing one), so instead every successful fast-forward/rebase bumps NDC's own generation marker, the same counter NDC already compares before/after its own commit, making NDC's existing guard also catch this hook as a writer.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_reconcile.remote\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eRemote to reconcile against. Empty → falls back to \u003ccode\u003egit_backup.remote\u003c/code\u003e, then the branch's own push target, then \u003ccode\u003eorigin\u003c/code\u003e. \u003cstrong\u003eTreated as untrusted for the same reason as \u003ccode\u003egit_restore.remote\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/723\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/723/hovercard\"\u003e#723\u003c/a\u003e): a leading \u003ccode\u003e-\u003c/code\u003e, or a value containing \u003ccode\u003e:\u003c/code\u003e or \u003ccode\u003e/\u003c/code\u003e, is rejected rather than passed to \u003ccode\u003egit fetch\u003c/code\u003e/\u003ccode\u003egit push\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit_reconcile.branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eBranch to reconcile against. Empty → falls back to \u003ccode\u003egit_backup.branch\u003c/code\u003e, then the branch currently checked out. With a detached HEAD and this unset, reconcile refuses rather than guessing. \u003cstrong\u003eTreated as untrusted for the same reason as \u003ccode\u003egit_restore.branch\u003c/code\u003e.\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehooks.dispatch_timeout_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e15\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHow long \u003cstrong\u003eone\u003c/strong\u003e \u003ccode\u003ehooks.d/\u003c/code\u003e listener may take before it is stopped, for the events the agent is waiting on: \u003ccode\u003eafter_post_tool\u003c/code\u003e, \u003ccode\u003eafter_user_prompt\u003c/code\u003e, \u003ccode\u003ebefore_session_start\u003c/code\u003e, \u003ccode\u003eafter_session_start\u003c/code\u003e. Until \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/286\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/286/hovercard\"\u003e#286\u003c/a\u003e nothing bounded them, so a listener that blocked stalled the agent for as long as it blocked and logged nothing — nothing had failed. Claude Code kills a hook at 60s of its own accord, so a budget at or above that is the host killing the process with no report from the plugin. The shipped listeners take 0.17–0.58s here. Per hook, not per dispatch: one slow listener never spends the next one's allowance. \u003ccode\u003e0\u003c/code\u003e disables the bound.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehooks.dispatch_timeout_detached_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e120\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eThe same budget for \u003ccode\u003ebefore_save\u003c/code\u003e, \u003ccode\u003eafter_save\u003c/code\u003e, \u003ccode\u003ebefore_consolidate\u003c/code\u003e and \u003ccode\u003eafter_consolidate\u003c/code\u003e, which are dispatched from \u003ccode\u003esave-session.sh\u003c/code\u003e / \u003ccode\u003erun-consolidation.sh\u003c/code\u003e — started with \u003ccode\u003enohup … \u0026amp;\u003c/code\u003e, so nobody is waiting on them. A listener doing real work there is doing it on its own time, and 15s would be a deadline no one is keeping. \u003ccode\u003e0\u003c/code\u003e disables the bound.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehooks.dispatch_kill_grace_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e5\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBetween \u003ccode\u003eSIGTERM\u003c/code\u003e and \u003ccode\u003eSIGKILL\u003c/code\u003e. bash runs an \u003ccode\u003eEXIT\u003c/code\u003e trap when it dies of an untrapped \u003ccode\u003eSIGTERM\u003c/code\u003e and does not on \u003ccode\u003eSIGKILL\u003c/code\u003e, and git removes its own \u003ccode\u003eindex.lock\u003c/code\u003e on \u003ccode\u003eSIGTERM\u003c/code\u003e and cannot on \u003ccode\u003eSIGKILL\u003c/code\u003e — so this window is a listener's chance to release a lock or unwind a partial write. It is a courtesy, not a veto: one that traps \u003ccode\u003eTERM\u003c/code\u003e and keeps going is killed anyway.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.min_human_messages\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMinimum human messages before saving. Keeps greetings and one-liners out of memory.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.min_exchanges_without_human\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e30\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSave anyway when the span has at least this many exchanges, even if the human count is below \u003ccode\u003emin_human_messages\u003c/code\u003e. Without it, an agentic session (many tool calls, few human turns) never clears the gate and never saves at all. \u003ccode\u003e0\u003c/code\u003e disables the fallback.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.max_summary_failures\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConsecutive summarization failures on the \u003cem\u003esame\u003c/em\u003e span before it is dropped and the position advanced past it. Keeping the position is right for a transient error (the span retries next run), but a persistent failure would otherwise retry forever and no later span could ever be saved. \u003ccode\u003e0\u003c/code\u003e retries forever.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.delta_lines_trigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e50\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTool call output lines that trigger auto-save\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.extract_max_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e300000\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMax UTF-8 size of the session extract sent to Haiku. Larger extracts are truncated to their most-recent tail so a very long session can't overflow the model's context window and silently stall saves. \u003ccode\u003e0\u003c/code\u003e disables the cap.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.autonomous_log_retention_days\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e7\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAge, in days, after which a \u003ccode\u003elogs/autonomous/*.log\u003c/code\u003e file is reclaimed regardless of content (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/487\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/487/hovercard\"\u003e#487\u003c/a\u003e). That directory's only prior retention was \u003ccode\u003e-empty -delete\u003c/code\u003e, which stopped covering \u003ccode\u003esession-end-*.log\u003c/code\u003e the moment \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/483\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/483/hovercard\"\u003e#483\u003c/a\u003e seeded it with a header before its subshell opens it — every one is non-empty by construction, so nothing ever reclaimed that class again. An empty file is still reclaimed immediately, on the same first pass; this age-keyed check runs right after it, over both file classes (\u003ccode\u003esave-*.log\u003c/code\u003e and \u003ccode\u003esession-end-*.log\u003c/code\u003e share the \u003ccode\u003e*.log\u003c/code\u003e glob) — one portable \u003ccode\u003estat\u003c/code\u003e-based sweep now covers both, not two separate \u003ccode\u003efind\u003c/code\u003e calls. Runs on every ordinary flush, independent of \u003ccode\u003efeatures.ndc_compression\u003c/code\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/498\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/498/hovercard\"\u003e#498\u003c/a\u003e) — this housekeeping used to live inside NDC's own gated block by accident of placement, so turning NDC compression off silently turned log retention off too, with this setting configured and doing nothing. \u003ccode\u003estat\u003c/code\u003e, not \u003ccode\u003efind -mtime\u003c/code\u003e/\u003ccode\u003e-empty\u003c/code\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/502\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/502/hovercard\"\u003e#502\u003c/a\u003e): \u003ccode\u003efind\u003c/code\u003e is the one command on this path with a real PATH-shadowing risk on Windows Git Bash.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efeatures.ndc_compression\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnable hourly compression of daily files. Independent of \u003ccode\u003elogs/autonomous/\u003c/code\u003e retention (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/498\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/498/hovercard\"\u003e#498\u003c/a\u003e) — disabling this no longer disables that housekeeping too.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efeatures.recovery\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRecover missed saves on session start\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efeatures.plugin_promos\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCross-plugin promo at \u003ccode\u003eSessionStart\u003c/code\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/574\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/574/hovercard\"\u003e#574\u003c/a\u003e): a \u003ccode\u003esystemMessage\u003c/code\u003e naming one sibling Digital-Process-Tools plugin you have not installed, checked against \u003ccode\u003e~/.claude/plugins/installed_plugins.json\u003c/code\u003e. Since \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/657\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/657/hovercard\"\u003e#657\u003c/a\u003e the same rotation also carries a one-time star ask, gated on \u003ccode\u003erecent.md\u003c/code\u003e being a non-empty file rather than on install status -- it waits until a full day of your sessions has actually been consolidated before ever asking. \u003ccode\u003efalse\u003c/code\u003e turns the whole feature off entirely, and every entry's line both identifies itself (\u003ccode\u003eclaude-remember:\u003c/code\u003e) and names this key inline, so it is attributable and actionable at the moment it fires (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/631\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/631/hovercard\"\u003e#631\u003c/a\u003e). Copy lives in \u003ccode\u003epromos.json\u003c/code\u003e beside \u003ccode\u003econfig.example.json\u003c/code\u003e, not in the hook; prefix, text, URL and the inline hint together must fit 170 characters or the entry is skipped and logged. See \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/README.md#from-the-same-workshop\"\u003eFrom the same workshop\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecooldowns.promo_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e604800\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMinimum seconds between plugin promos, persisted per \u003cstrong\u003emachine\u003c/strong\u003e under \u003ccode\u003e~/.remember/tmp/\u003c/code\u003e regardless of \u003ccode\u003edata_dir\u003c/code\u003e — the throttle describes what this machine has already been shown, not one project's store. Default is 7 days. \u003ccode\u003e0\u003c/code\u003e shows a promo on every \u003ccode\u003eSessionStart\u003c/code\u003e that has a candidate to show.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etimezone\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(system local)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eIANA name (e.g. \u003ccode\u003eAmerica/New_York\u003c/code\u003e, \u003ccode\u003eEurope/Paris\u003c/code\u003e) for timestamps and daily file boundaries. Omit or leave empty to use the system clock's local zone. Set this explicitly on a VPS whose system clock is UTC.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etime_format\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e24h\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e24h\u003c/code\u003e or \u003ccode\u003e12h\u003c/code\u003e — controls timestamp format in log files (e.g. \u003ccode\u003e14:30:00\u003c/code\u003e vs \u003ccode\u003e2:30:00 PM\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eprompt_stamp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efull\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhat the \u003ccode\u003eUserPromptSubmit\u003c/code\u003e hook injects into the model's context. \u003ccode\u003efull\u003c/code\u003e — \u003ccode\u003e[14:30 CEST — jack — 45%]\u003c/code\u003e, unchanged from every previous release. \u003ccode\u003estable\u003c/code\u003e — \u003ccode\u003e[jack]\u003c/code\u003e only: the clock and the context percentage both change between turns, and the percentage climbs on \u003cem\u003eevery\u003c/em\u003e prompt for anyone running the status line, so dropping only the clock would leave the line volatile. The \u003ccode\u003e\u0026gt;= 95\u003c/code\u003e context warning is \u003cstrong\u003ekept\u003c/strong\u003e, because it is threshold-gated and changes bytes only when it changes behaviour. \u003ccode\u003eoff\u003c/code\u003e — nothing at all, warning included. An unrecognised value reads as \u003ccode\u003efull\u003c/code\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/301\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/301/hovercard\"\u003e#301\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emodel\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ehaiku\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eModel used for the summarization / consolidation \u003ccode\u003eclaude -p\u003c/code\u003e call. \u003ccode\u003eREMEMBER_MODEL\u003c/code\u003e overrides it. Documented as an env var only until #176, though \u003ccode\u003econfig.json\u003c/code\u003e is the source of truth.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereject_pattern\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eOverrides the reject-gate regex that keeps model refusals out of the memory layer. Empty → the narrow built-in default; \u003ccode\u003enone\u003c/code\u003e → gate off; anything else → a case-insensitive regex. An invalid regex falls back to the default. \u003ccode\u003eREMEMBER_REJECT_PATTERN\u003c/code\u003e overrides it.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehandoff_mode\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esingle\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eOff by default.\u003c/strong\u003e \u003ccode\u003esingle\u003c/code\u003e — every interactive session shares one \u003ccode\u003eremember.md\u003c/code\u003e, byte-identical to every previous release. \u003ccode\u003eper_session\u003c/code\u003e — the handoff becomes \u003ccode\u003eremember.\u0026lt;session_id\u0026gt;.md\u003c/code\u003e, so two sessions sharing one project store (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/56\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/56/hovercard\"\u003e#56\u003c/a\u003e) each write and read their own note instead of the second silently overwriting the first (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/363\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/363/hovercard\"\u003e#363\u003c/a\u003e). History, \u003ccode\u003erecent.md\u003c/code\u003e, \u003ccode\u003earchive.md\u003c/code\u003e and consolidation are unaffected either way — only the single handoff slot is namespaced. If no usable \u003ccode\u003esession_id\u003c/code\u003e reaches the hook, \u003ccode\u003eper_session\u003c/code\u003e falls back to the shared file — the hint still points at it, since that path is still correct — but a visible line says the fallback happened, so it does not read as isolation that never applied. No pruning ships with this key: stale \u003ccode\u003eremember.\u0026lt;session_id\u0026gt;.md\u003c/code\u003e files accumulate until removed by hand.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.consolidate_max_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e600000\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMax UTF-8 size of the staging content sent to the consolidation model. Read by \u003ccode\u003erun-consolidation.sh\u003c/code\u003e; documented in \u003ccode\u003econfig.example.json\u003c/code\u003e but missing from this table until #176. Since \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/346\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/346/hovercard\"\u003e#346\u003c/a\u003e the same number also caps what consolidation may \u003cstrong\u003ewrite\u003c/strong\u003e: a response larger than this is refused rather than copied over \u003ccode\u003erecent.md\u003c/code\u003e/\u003ccode\u003earchive.md\u003c/code\u003e. It is measured on staging + \u003ccode\u003erecent.md\u003c/code\u003e + \u003ccode\u003earchive.md\u003c/code\u003e together, and a store already over it now \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/README.md#a-store-over-the-consolidation-cap\"\u003erotates its way out\u003c/a\u003e rather than skipping forever (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/348\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/348/hovercard\"\u003e#348\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.memory_inject_max_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e200000\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA memory file larger than this is \u003cstrong\u003enamed with its size instead of injected\u003c/strong\u003e at session start (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/346\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/346/hovercard\"\u003e#346\u003c/a\u003e). It stays on disk and stays greppable; what stops is pouring it into a context window that cannot hold it — a multi-GB \u003ccode\u003erecent.md\u003c/code\u003e froze every \u003ccode\u003eclaude\u003c/code\u003e launch in the reporter's project. A healthy memory file is kilobytes, so this only ever fires on a store that is already broken. Set \u003ccode\u003e0\u003c/code\u003e to disable. When this is configured \u003cstrong\u003ebelow\u003c/strong\u003e the bundled default, the over-cap notice says \"capped by config\" and drops the \u003ccode\u003e/remember:doctor\u003c/code\u003e suggestion (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/842\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/842/hovercard\"\u003e#842\u003c/a\u003e) — a deliberately lowered cap is not evidence of a broken store. That holds only for files the lowered cap alone explains: a file larger than the bundled 200000 default is malformed whatever the cap, and keeps the original warning and the \u003ccode\u003e/remember:doctor\u003c/code\u003e advice.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.session_start_max_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e9000\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTotal byte budget for the whole SessionStart body (handoff + the \u003ccode\u003e=== REMEMBER ===\u003c/code\u003e legend + the \u003ccode\u003e=== MEMORY ===\u003c/code\u003e section), counted in \u003cstrong\u003ebytes, not characters\u003c/strong\u003e — see \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/842\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/842/hovercard\"\u003e#842\u003c/a\u003e for why bytes are the conservative choice under Claude Code's own character-based preview cap. \u003ccode\u003ememory_inject_max_bytes\u003c/code\u003e above caps one file at a time and has no notion of a TOTAL: six individually-healthy files can still sum past Claude Code's own persist-to-file threshold (observed around 10,000 characters), at which point the model sees only a short preview and never the \u003ccode\u003e=== MEMORY ===\u003c/code\u003e section at all. Filled in priority order handoff → now.md → recent.md → today-*.md → archive.md; whatever does not fit is \u003cstrong\u003elisted by name and size\u003c/strong\u003e, never silently dropped, the same convention \u003ccode\u003esource=compact\u003c/code\u003e already uses for its own deferred files. Does not apply at \u003ccode\u003esource=compact\u003c/code\u003e, which already minimizes its own output a different way. Set \u003ccode\u003e0\u003c/code\u003e to disable.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.handoff_max_redeliveries\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOnce the same (unchanged) handoff content has been delivered this many times, a further delivery is \u003cstrong\u003elisted by path instead of re-injected\u003c/strong\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/842\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/842/hovercard\"\u003e#842\u003c/a\u003e) — \u003ccode\u003eremember.delivered\u003c/code\u003e already tracks the count (see \u003ccode\u003ehandoff_mode\u003c/code\u003e above), but until this it only ever changed the \"already delivered N times\" banner text, re-injecting the full, unchanged body on every single start regardless. The delivery record still advances past the cap, so a later redelivery still reports how long the note has been pending, and \u003ccode\u003e/remember\u003c/code\u003e still replaces it immediately. Set \u003ccode\u003e0\u003c/code\u003e to disable.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.staging_warn_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e2000000\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eByte threshold for a one-time WARNING when a \u003ccode\u003etoday-*.md\u003c/code\u003e staging file grows past it (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/349\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/349/hovercard\"\u003e#349\u003c/a\u003e). \u003ccode\u003estaging_append()\u003c/code\u003e is append-only by design — only a successful consolidation round retires one of these files — so sustained lock contention, a full disk, or a stalled consolidation round (a misconfigured \u003ccode\u003efeatures.ndc_compression\u003c/code\u003e, or the \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/346\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/346/hovercard\"\u003e#346\u003c/a\u003e skip-forever state) leaves the same kind of span landing there every round, forever, with nothing to notice. This does \u003cstrong\u003enot\u003c/strong\u003e cap or truncate anything — the append is unchanged either way — it only logs once, via the same \u003ccode\u003ereport_error()\u003c/code\u003e path that reaches \u003ccode\u003ehook-errors.log\u003c/code\u003e and is surfaced by \u003ccode\u003e/remember:doctor\u003c/code\u003e's existing \"Recent errors\" section. Set \u003ccode\u003e0\u003c/code\u003e to disable. On a store whose \u003ccode\u003elogs/\u003c/code\u003e cannot be created (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/361\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/361/hovercard\"\u003e#361\u003c/a\u003e/\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/372\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/372/hovercard\"\u003e#372\u003c/a\u003e), \u003ccode\u003elog.sh\u003c/code\u003e never gets to read this key at all; the same \u003ccode\u003ereport_error()\u003c/code\u003e path logs once, separately, whenever a \u003ccode\u003eREMEMBER_CONFIG\u003c/code\u003e exists but went unparsed for that reason — the \u003ccode\u003e2000000\u003c/code\u003e used below it may not be the configured value (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/399\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/399/hovercard\"\u003e#399\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.ndc_timeout_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e180\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWall-clock budget (seconds) for the NDC \u003ccode\u003enow.md\u003c/code\u003e -\u0026gt; \u003ccode\u003etoday-*.md\u003c/code\u003e compression call. Output length scales with input length, so a \u003ccode\u003enow.md\u003c/code\u003e large enough to need longer than this timed out on every run, was left untouched, and grew further each round — a one-way ratchet that never recovered on its own (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/788\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/788/hovercard\"\u003e#788\u003c/a\u003e). Raise this if the daily log shows repeated \u003ccode\u003e[ndc] ERROR\u003c/code\u003e lines mentioning a timeout.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ethresholds.consolidate_timeout_seconds\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e180\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWall-clock budget (seconds) for the staging -\u0026gt; \u003ccode\u003erecent.md\u003c/code\u003e/\u003ccode\u003earchive.md\u003c/code\u003e consolidation call. The same fix shape as \u003ccode\u003endc_timeout_seconds\u003c/code\u003e above (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/806\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/806/hovercard\"\u003e#806\u003c/a\u003e, reopening the intent of \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/788\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/788/hovercard\"\u003e#788\u003c/a\u003e): output length scales with input length, so a large enough staging batch can time out on every run, be left uncompressed, and grow further every round with no recovery. Raise this if the daily log shows repeated \u003ccode\u003econsolidation\u003c/code\u003e ERROR lines mentioning a timeout.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edebug\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(unset)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003eVerbose logging for cooldowns and locks. Unset, each script keeps its own default — \u003ccode\u003esave-session.sh\u003c/code\u003e is verbose, the git-backup hook is quiet — which is what they did before this option was wired up (#176). \u003ccode\u003eREMEMBER_DEBUG\u003c/code\u003e overrides it.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehaiku.oauth_token\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cem\u003e(empty)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRemoved entirely (#860, round 4).\u003c/strong\u003e Never read for authentication, on any host -- this plugin has no recovery-token path of its own at all, on Claude Code or Codex; a nested call that cannot authenticate simply runs unauthenticated, and refreshing your coding agent's own CLI login is the fix. A still-configured value here is not read for anything, is not detected, and is not logged anywhere -- there is nothing to migrate it to; remove it whenever convenient, but leaving it in place is harmless.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003esession_start_slow_threshold_s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e5\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eThe \u003ccode\u003eSessionStart\u003c/code\u003e hook's own wall-clock duration is always written to the daily log (\u003ccode\u003esession-start took Ns\u003c/code\u003e); at or above this many whole seconds it is \u003cstrong\u003ealso\u003c/strong\u003e printed into the session, under \u003ccode\u003e=== SESSION-START ===\u003c/code\u003e, so a slow host is visible without going looking for the daily log first (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/706\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/706/hovercard\"\u003e#706\u003c/a\u003e). Measured with bash 5's \u003ccode\u003eEPOCHSECONDS\u003c/code\u003e builtin (no added fork) or, on older bash, one \u003ccode\u003edate +%s\u003c/code\u003e at each end — never per log line. Set \u003ccode\u003e0\u003c/code\u003e to surface every start; there is no key that silences the daily-log line.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eA per-project \u003ccode\u003e.remember/config.json\u003c/code\u003e's \u003ccode\u003ehaiku\u003c/code\u003e block is never read, in the default\n(legacy) storage layout.\u003c/strong\u003e Keys under \u003ccode\u003ehaiku\u003c/code\u003e have been security-relevant (\u003ccode\u003ehaiku.oauth_token\u003c/code\u003e\nchose the credential the nested summarizer authenticated with). In the default layout\n\u003ccode\u003e.remember/\u003c/code\u003e sits inside the project checkout, so a repository you clone can ship a\n\u003ccode\u003e.remember/config.json\u003c/code\u003e of its own -- and before\n\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/726\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/726/hovercard\"\u003e#726\u003c/a\u003e, its \u003ccode\u003ehaiku\u003c/code\u003e\nblock was trusted exactly like one you wrote yourself. It no longer is, \u003cstrong\u003eregardless of\nwhether that file is tracked by the repository's own git index\u003c/strong\u003e -- set \u003ccode\u003ehaiku\u003c/code\u003e keys in\n\u003ccode\u003e~/.remember/config.json\u003c/code\u003e (user-global), never in a project's own config file, if you\nwant them honoured.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003ccode\u003emodel\u003c/code\u003e and \u003ccode\u003ereject_pattern\u003c/code\u003e from that same per-project config are stripped too, but\nonly when the file is git-TRACKED\u003c/strong\u003e -- committed by the repository, not merely sitting\nin the default layout\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/757\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/757/hovercard\"\u003e#757\u003c/a\u003e). Unlike\nthe \u003ccode\u003ehaiku\u003c/code\u003e block, neither can redirect where a transcript goes -- only which model\nis billed for every save, or whether the refusal gate runs at all (\u003ccode\u003ereject_pattern: \"none\"\u003c/code\u003e turns it off outright; any other value is a regex run over model output, an\nattacker-controlled ReDoS surface) -- severe enough to strip from a file the repository\nitself committed, not severe enough to break every single-user project's own untracked\nper-project override the way #726 already accepted paying for \u003ccode\u003ehaiku\u003c/code\u003e. An \u003cstrong\u003euntracked\u003c/strong\u003e\nper-project \u003ccode\u003econfig.json\u003c/code\u003e -- the ordinary case, written by you, never \u003ccode\u003egit add\u003c/code\u003eed --\nstill has \u003ccode\u003emodel\u003c/code\u003e/\u003ccode\u003ereject_pattern\u003c/code\u003e take effect, exactly as before #757.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eExternal storage mode (\u003ccode\u003edata_dir\u003c/code\u003e absolute or home-relative, e.g. \u003ccode\u003e~/.remember/{slug}\u003c/code\u003e)\nis unaffected by any of the above -- \u003ccode\u003eREMEMBER_DIR\u003c/code\u003e there is the operator's own\ndirectory, never one a clone ships, so its config stays trusted \u003cstrong\u003eonce it is genuinely\nthe operator's own\u003c/strong\u003e. Nothing is moved into that mode automatically any more (#898):\nif you move an old in-project \u003ccode\u003e.remember/\u003c/code\u003e there by hand, leave behind any \u003ccode\u003econfig.json\u003c/code\u003e\nyour repository tracks in git, or it becomes trusted config\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/757\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/757/hovercard\"\u003e#757\u003c/a\u003e; see\n\u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md\"\u003eexternal-storage-mode.md\u003c/a\u003e).\nSee \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/git-backup-security.md\"\u003egit-backup-security.md\u003c/a\u003e for the wider \"a cloned project's\nconfig is untrusted input\" note.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eThe summarizer's environment\u003c/h3\u003e\u003ca id=\"user-content-the-summarizers-environment\" class=\"anchor\" aria-label=\"Permalink: The summarizer's environment\" href=\"#the-summarizers-environment\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eThe \u003ccode\u003eclaude\u003c/code\u003e summarizer.\u003c/strong\u003e The summarizer runs a nested \u003ccode\u003eclaude -p\u003c/code\u003e that inherits your\nenvironment, including your Claude Code login, exactly like any process a hook starts, and\nremember itself reads no credential\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/898\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/898/hovercard\"\u003e#898\u003c/a\u003e). Only the\nparent Claude Code session's own variables are removed for the length of that call, so it\ndoes not pass as that session\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/95\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/95/hovercard\"\u003e#95\u003c/a\u003e,\n\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/204\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/204/hovercard\"\u003e#204\u003c/a\u003e), and put\nback afterwards: \u003ccode\u003eCLAUDECODE\u003c/code\u003e, \u003ccode\u003eCLAUDE_JOB_DIR\u003c/code\u003e, \u003ccode\u003eCLAUDE_PROJECT_DIR\u003c/code\u003e,\n\u003ccode\u003eCLAUDE_CODE_SESSION_ID\u003c/code\u003e, \u003ccode\u003eCLAUDE_CODE_ENTRYPOINT\u003c/code\u003e, \u003ccode\u003eCLAUDE_CODE_CHILD_SESSION\u003c/code\u003e,\n\u003ccode\u003eCLAUDE_CODE_SESSION_ATTENDED\u003c/code\u003e, \u003ccode\u003eCLAUDE_CODE_EXECPATH\u003c/code\u003e, \u003ccode\u003eCLAUDE_CODE_MESSAGING_SOCKET\u003c/code\u003e,\n\u003ccode\u003eCLAUDE_CODE_SSE_PORT\u003c/code\u003e -- the reason for each is a comment beside the code in\n\u003ccode\u003epipeline/haiku.py\u003c/code\u003e. \u003ccode\u003eCLAUDE_CODE_MESSAGING_TOKEN\u003c/code\u003e, the handshake paired with the messaging\nsocket, is not on the list and reaches the nested call: with the socket removed, the nested\ncall has no channel to present it on. Your login credential is never on that list\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/131\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/131/hovercard\"\u003e#131\u003c/a\u003e); provider\nsettings such as Bedrock selection are not either, so they reach the nested call\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/316\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/316/hovercard\"\u003e#316\u003c/a\u003e). To keep any\nother variable away from the summarizer -- for example an \u003ccode\u003eANTHROPIC_API_KEY\u003c/code\u003e set for some\nunrelated tool that would out-rank your \u003ccode\u003eclaude.ai\u003c/code\u003e login there\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/703\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/703/hovercard\"\u003e#703\u003c/a\u003e) -- unset it\nin the environment you start Claude Code from.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eThe list is code, not config.\u003c/strong\u003e Each name is written out literally in\n\u003ccode\u003epipeline/haiku.py\u003c/code\u003e and cannot be changed from \u003ccode\u003econfig.json\u003c/code\u003e. If a future Claude Code\nrelease adds a session variable, it reaches the summarizer until a plugin release adds it\nto the list. (Two earlier development rounds of #898 read this list, and the Codex one\nbelow, from \u003ccode\u003econfig.json\u003c/code\u003e; a release-candidate scan reports reading the environment by a\nname taken from config as \"an environment variable named at run time\", so both lists went\nback into code with the same names.) \u003cstrong\u003eRemoved:\u003c/strong\u003e \u003ccode\u003ehaiku.drop_env\u003c/code\u003e\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/898\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/898/hovercard\"\u003e#898\u003c/a\u003e).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eThe Codex summarizer's allow-list (#724)\u003c/h3\u003e\u003ca id=\"user-content-the-codex-summarizers-allow-list-724\" class=\"anchor\" aria-label=\"Permalink: The Codex summarizer's allow-list (#724)\" href=\"#the-codex-summarizers-allow-list-724\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eWhat it protects.\u003c/strong\u003e Codex's \u003ccode\u003e--sandbox read-only\u003c/code\u003e denies writes and network, but it\nstill runs whatever command the model asks for -- and a transcript can carry an\ninstruction that gets the model to ask for \u003ccode\u003eenv\u003c/code\u003e\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/724\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/724/hovercard\"\u003e#724\u003c/a\u003e). So the\nnested \u003ccode\u003ecodex exec\u003c/code\u003e process is not given your environment: it is given only these\nvariables, and nothing else -- no Anthropic key, no cloud credential, no unrelated secret\nyour shell happens to carry: \u003ccode\u003ePATH\u003c/code\u003e, \u003ccode\u003eHOME\u003c/code\u003e, \u003ccode\u003eLANG\u003c/code\u003e, \u003ccode\u003eLC_ALL\u003c/code\u003e, \u003ccode\u003eCODEX_HOME\u003c/code\u003e, \u003ccode\u003eTMPDIR\u003c/code\u003e,\n\u003ccode\u003eTEMP\u003c/code\u003e, \u003ccode\u003eTMP\u003c/code\u003e, \u003ccode\u003eSYSTEMROOT\u003c/code\u003e, \u003ccode\u003eUSERPROFILE\u003c/code\u003e, \u003ccode\u003eAPPDATA\u003c/code\u003e, \u003ccode\u003ePATHEXT\u003c/code\u003e -- what the Codex CLI\nneeds to run and find its own login in \u003ccode\u003eCODEX_HOME\u003c/code\u003e. (Separately,\n\u003ccode\u003e-c shell_environment_policy.inherit=none\u003c/code\u003e gives a command Codex spawns no environment\nat all; the allow-list bounds what Codex's own process can see.) An allow-list fails\nclosed: a variable nobody thought about stays out. Like the \u003ccode\u003eclaude\u003c/code\u003e list above, it is\ncode, not config: it cannot be changed from \u003ccode\u003econfig.json\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNo credential is on it\u003c/strong\u003e\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/898\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/898/hovercard\"\u003e#898\u003c/a\u003e). That is\nnarrower than earlier releases, which also passed Codex's own API-key variable\n(\u003ccode\u003eCODEX_API_KEY\u003c/code\u003e) through. If Codex finds its login in \u003ccode\u003eauth.json\u003c/code\u003e under \u003ccode\u003eCODEX_HOME\u003c/code\u003e\n(what \u003ccode\u003ecodex login\u003c/code\u003e writes), nothing changes for you. \u003cstrong\u003eIf you authenticate Codex only\nthrough an environment variable, it is not passed through and the \u003ccode\u003ecodex\u003c/code\u003e summarizer\nstarts without it\u003c/strong\u003e -- run \u003ccode\u003ecodex login\u003c/code\u003e so the login lives in \u003ccode\u003eauth.json\u003c/code\u003e, or use the\n\u003ccode\u003eclaude\u003c/code\u003e summarizer (\u003ccode\u003eREMEMBER_SUMMARIZER=claude\u003c/code\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNo proxy or CA-bundle variable is on it either\u003c/strong\u003e\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/898\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/898/hovercard\"\u003e#898\u003c/a\u003e).\n\u003ccode\u003eHTTPS_PROXY\u003c/code\u003e, \u003ccode\u003eHTTP_PROXY\u003c/code\u003e, \u003ccode\u003eNO_PROXY\u003c/code\u003e (in either casing), \u003ccode\u003eSSL_CERT_FILE\u003c/code\u003e and\n\u003ccode\u003eNODE_EXTRA_CA_CERTS\u003c/code\u003e used to be passed through\n(\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/751\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/751/hovercard\"\u003e#751\u003c/a\u003e); they are not\nany more. \u003cstrong\u003eIf you reach the network only through a proxy or a custom CA bundle, the \u003ccode\u003ecodex\u003c/code\u003e\nsummarizer cannot reach it -- set \u003ccode\u003eREMEMBER_SUMMARIZER=claude\u003c/code\u003e\u003c/strong\u003e: the \u003ccode\u003eclaude\u003c/code\u003e summarizer\ninherits your whole environment, proxy variables included.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEnvironment variables\u003c/h3\u003e\u003ca id=\"user-content-environment-variables\" class=\"anchor\" aria-label=\"Permalink: Environment variables\" href=\"#environment-variables\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eA few runtime overrides aren't in \u003ccode\u003econfig.json\u003c/code\u003e because they're per-shell rather than per-project.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eEnv var\u003c/th\u003e\n\u003cth\u003eEffect\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_BRANCH\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverrides the \u003ccode\u003e| \u0026lt;branch\u0026gt;\u003c/code\u003e identity field in each \u003ccode\u003e## HH:MM | \u0026lt;branch\u0026gt;\u003c/code\u003e memory header. Useful when your coding agent runs from a non-git directory (\u003ccode\u003e$HOME\u003c/code\u003e, a scratch dir) — without it the header falls back to the literal string \u003ccode\u003eunknown\u003c/code\u003e, which collapses the identity slot for every entry. Set to a meaningful tag (e.g. \u003ccode\u003elaptop\u003c/code\u003e, \u003ccode\u003ecloud\u003c/code\u003e, \u003ccode\u003estaging\u003c/code\u003e, an instance name) in your shell rc. It is process environment, read once at save time — one value per launched session, so it cannot distinguish several concurrent sessions of the \u003cem\u003esame\u003c/em\u003e project from each other; see \u003ccode\u003eREMEMBER_BRANCH_CMD\u003c/code\u003e below for that case.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_BRANCH_CMD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePath to an executable, invoked as \u003ccode\u003e$REMEMBER_BRANCH_CMD \"$SESSION_ID\"\u003c/code\u003e, whose stdout becomes the identity slot. Checked after \u003ccode\u003eREMEMBER_BRANCH\u003c/code\u003e and before the \u003ccode\u003egit branch --show-current\u003c/code\u003e fallback; a non-zero exit or empty stdout falls through to that fallback and logs a WARNING naming the configured command and the session — a resolver that is merely unconfigured stays silent, one that is configured and failing does not. This is the answer for \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/481\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/481/hovercard\"\u003e#481\u003c/a\u003e: several coding agent sessions running at once in one project all share \u003ccode\u003e$PROJECT_DIR\u003c/code\u003e, so the git-branch fallback (and a \u003ccode\u003eREMEMBER_BRANCH\u003c/code\u003e set once at launch) resolve to the same value for every one of them — \u003ccode\u003e$SESSION_ID\u003c/code\u003e is the value already in scope that differs per session. What a session id should map to is site-specific (a local registry of named sessions, \u003ccode\u003e${SESSION_ID:0:8}\u003c/code\u003e, ...), so this is a hook rather than a new built-in default. \u003cstrong\u003esave-session.sh runs under bash, including on Windows via Git Bash\u003c/strong\u003e — this is exec'd directly (no shell reparsing), so give it a forward-slash or PATH-resolvable path (\u003ccode\u003e/c/tools/resolve-identity\u003c/code\u003e, not \u003ccode\u003eC:\\tools\\resolve-identity.exe\u003c/code\u003e) the way you would for any other bash argv. \u003ccode\u003e$SESSION_ID\u003c/code\u003e itself is validated before this ever runs — hex digits and hyphens, anchored to a hex digit at position 1, so it can never reach your resolver's \u003ccode\u003eargv[1]\u003c/code\u003e looking like a flag (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/500\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/500/hovercard\"\u003e#500\u003c/a\u003e). The stdout your resolver prints is expected to be a single line with no embedded newline or carriage return: it is substituted verbatim into the summarizer prompt, so a multi-line or CR-bearing result is refused rather than used unbounded — logged the same WARNING-and-fall-through as a non-zero exit or empty stdout (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/501\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/501/hovercard\"\u003e#501\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_DEBUG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e emits verbose hook/cooldown lines to logs; \u003ccode\u003e0\u003c/code\u003e silences them. Highest precedence: it beats the \u003ccode\u003edebug\u003c/code\u003e config option. Unset \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003edebug\u003c/code\u003e unset, the defaults differ per script — \u003ccode\u003esave-session.sh\u003c/code\u003e verbose, the git-backup hook quiet — which this table used to paper over with a single \"default \u003ccode\u003e1\u003c/code\u003e\" (#176).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_MODEL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eModel used for summarization/consolidation (the \u003ccode\u003eclaude -p\u003c/code\u003e call). Default \u003ccode\u003ehaiku\u003c/code\u003e. Point it at a more capable tier (e.g. \u003ccode\u003esonnet\u003c/code\u003e) to improve salience and compression-cap compliance — the call is backgrounded, so there's no interactive-latency cost. \u003cstrong\u003e\u003ccode\u003econfig.json\u003c/code\u003e → \u003ccode\u003emodel\u003c/code\u003e is the source of truth\u003c/strong\u003e (per-project); this env var overrides it. Blank falls back to the default.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_REJECT_PATTERN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverrides the reject-gate regex that keeps model refusals/clarifications out of the memory layer. Blank → the narrow built-in default (anchored refusal/clarification stems only); \u003ccode\u003enone\u003c/code\u003e → gate disabled (only the literal \u003ccode\u003eSKIP\u003c/code\u003e contract applies); anything else → a custom case-insensitive regex. An invalid regex falls back to the default rather than failing the run. \u003cstrong\u003e\u003ccode\u003econfig.json\u003c/code\u003e → \u003ccode\u003ereject_pattern\u003c/code\u003e is the source of truth\u003c/strong\u003e; this env var overrides it.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_OAUTH_TOKEN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRemoved entirely (#860, round 3), on every host.\u003c/strong\u003e No longer read for authentication at all, and there is no replacement for it any more -- this plugin has no recovery-token path of its own, on Claude Code or Codex, for either the direct call or Codex's own fallthrough to the shared \u003ccode\u003eclaude -p\u003c/code\u003e code path (\u003ccode\u003eREMEMBER_SUMMARIZER_FALLBACK=claude\u003c/code\u003e). A nested call that cannot authenticate simply runs unauthenticated; refresh your coding agent's own CLI login instead (\u003ccode\u003eclaude setup-token\u003c/code\u003e if you have not already). A still-set value is detected by \u003cstrong\u003epresence only\u003c/strong\u003e and logged once per save as a \u003ccode\u003eNOTICE:\u003c/code\u003e line naming this var (never its content), surfaced by \u003ccode\u003e/remember:doctor\u003c/code\u003e's \"Legacy recovery-token config\" section, on either host -- there is nothing left to migrate it to; remove it. This fallback had no automated test even before removal — see \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/docs/verification.md\"\u003e\u003ccode\u003edocs/verification.md\u003c/code\u003e\u003c/a\u003e for the historical manual procedure (describes code that no longer exists; kept only as a record of what was once tested by hand). \u003cstrong\u003eIf you use git backup, this key must not live in any \u003ccode\u003econfig.json\u003c/code\u003e that ends up committed.\u003c/strong\u003e A per-project \u003ccode\u003e\u0026lt;slug\u0026gt;/config.json\u003c/code\u003e is never staged or committed by the backup hook regardless (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/719\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/719/hovercard\"\u003e#719\u003c/a\u003e), but this env var is still the safer place for it, and it is the only safe place for the user-global \u003ccode\u003e~/.remember/config.json\u003c/code\u003e, which \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md\"\u003eexternal-storage-mode.md\u003c/a\u003e does have you commit deliberately. See \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/git-backup-security.md\"\u003e\u003ccode\u003edocs/git-backup-security.md\u003c/code\u003e\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_MAX_CONCURRENT_SUMMARIZERS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHow many nested \u003ccode\u003eclaude -p\u003c/code\u003e summarizers may run at once, host-wide. Default \u003ccode\u003e4\u003c/code\u003e. This is the depth bound too: a summarizer that re-entered the plugin runs \u003cem\u003einside\u003c/em\u003e its parent's call, so recursion appears as concurrency (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/204\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/204/hovercard\"\u003e#204\u003c/a\u003e). Not \u003ccode\u003e1\u003c/code\u003e on purpose — several projects saving at the same time is normal. When it fires, \u003ccode\u003eDECLINED\u003c/code\u003e appears in the daily log and the span is summarized on a later run.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_MAX_SUMMARIZERS_PER_MIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHow many summarizers may be spawned in any 60-second window, host-wide. Default \u003ccode\u003e12\u003c/code\u003e. Covers the shape concurrency cannot see: a chain where each save spawns the next and no two ever overlap. A store saves at most once per \u003ccode\u003ecooldowns.save_seconds\u003c/code\u003e, so the default leaves room for roughly two dozen active projects. Same \u003ccode\u003eDECLINED\u003c/code\u003e log line when it fires.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_RUNTIME_DIR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhere spawn records for the two caps above are kept. Default \u003ccode\u003e~/.remember/run\u003c/code\u003e. Derived from \u003ccode\u003eHOME\u003c/code\u003e alone so a child process that inherited no plugin environment still finds it — that is the point of the bound. Set it only to relocate the runtime state (a read-only home, a test harness); if it is unusable the caps stop applying and the daily log says the spawn was \u003ccode\u003eUNBOUNDED\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_LOCK_TIMING\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e records how long each lock is held and how long each acquire waited, so a timeout default can be set from a distribution instead of from intuition (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/226\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/226/hovercard\"\u003e#226\u003c/a\u003e). \u003cstrong\u003eOff by default and deliberately opt-in\u003c/strong\u003e: \u003ccode\u003esave-session.sh\u003c/code\u003e runs on a \u003ccode\u003ePostToolUse\u003c/code\u003e hook, where an extra spawn per lock use is paid on every machine forever (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/227\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/227/hovercard\"\u003e#227\u003c/a\u003e/\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/230\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/230/hovercard\"\u003e#230\u003c/a\u003e/\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/204\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/204/hovercard\"\u003e#204\u003c/a\u003e). Off, it costs one string comparison and writes nothing. See \u003ca href=\"/Digital-Process-Tools/claude-remember/blob/main/docs/measuring-lock-hold-times.md#measuring-lock-hold-times\"\u003eMeasuring lock hold times\u003c/a\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_LOCK_TIMING_FILE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhere those records go. Default \u003ccode\u003e$REMEMBER_DIR/logs/lock-timing.tsv\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_LOCK_TIMING_MAX\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLine cap on that file. Default \u003ccode\u003e5000\u003c/code\u003e (~350KB). At the cap recording \u003cstrong\u003estops\u003c/strong\u003e and appends a \u003ccode\u003e# CAPPED\u003c/code\u003e line — it does not roll, because a rolled file silently drops the oldest records and the tail is the part a timeout is set from.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_TZ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSet automatically by \u003ccode\u003elog.sh\u003c/code\u003e from \u003ccode\u003econfig.json\u003c/code\u003e → \u003ccode\u003etimezone\u003c/code\u003e. Don't set this manually unless you're debugging.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_SUMMARIZER\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhich summarizer provider to use: \u003ccode\u003eclaude\u003c/code\u003e (always \u003ccode\u003eclaude -p\u003c/code\u003e, the historical behaviour), \u003ccode\u003ecodex\u003c/code\u003e (always \u003ccode\u003ecodex exec\u003c/code\u003e), or \u003ccode\u003eauto\u003c/code\u003e (the default) — \u003ccode\u003eauto\u003c/code\u003e reads the transcript the host actually wrote (\u003ccode\u003eREMEMBER_TRANSCRIPT_PATH\u003c/code\u003e, sniffed by \u003ccode\u003epipeline.extract.sniff_file_envelope()\u003c/code\u003e) and follows it: \u003ccode\u003ecodex\u003c/code\u003e for a Codex transcript, \u003ccode\u003eclaude\u003c/code\u003e for a Claude Code transcript, an Antigravity transcript (no native summarizer exists for it, so this logs a warning and falls back to \u003ccode\u003eclaude\u003c/code\u003e, \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/567\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/567/hovercard\"\u003e#567\u003c/a\u003e), no transcript, or one this plugin does not recognise. A Claude Code session's own resolution is unchanged by this: it was already \u003ccode\u003eclaude\u003c/code\u003e, and \u003ccode\u003eauto\u003c/code\u003e still answers \u003ccode\u003eclaude\u003c/code\u003e for it. \u003ccode\u003eauto\u003c/code\u003e no longer asks the environment for a Codex signature (\u003ccode\u003eCODEX_SESSION_ID\u003c/code\u003e/\u003ccode\u003eCODEX_THREAD_ID\u003c/code\u003e) — those never reach the process that actually runs the summariser, only a Codex \u003cem\u003etool shell\u003c/em\u003e (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/465\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/465/hovercard\"\u003e#465\u003c/a\u003e). An unrecognised value is reported and treated as unset (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/460\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/460/hovercard\"\u003e#460\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_SUMMARIZER_FALLBACK\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpt-in for what happens when the resolved \u003ccode\u003ecodex\u003c/code\u003e route cannot produce a result (binary missing, non-zero exit, empty output, timeout). Unset → raises loudly (\"could not summarize\") rather than silently retrying against Anthropic's API. \u003ccode\u003eclaude\u003c/code\u003e → falls back to \u003ccode\u003eclaude -p\u003c/code\u003e for that one call, exactly as though \u003ccode\u003eREMEMBER_SUMMARIZER=claude\u003c/code\u003e had been set, and it is logged every time it fires because it reproduces \u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/460\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/460/hovercard\"\u003e#460\u003c/a\u003e's own billing complaint on purpose, only because the operator asked for it.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eREMEMBER_CODEX_BIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverrides where the \u003ccode\u003ecodex\u003c/code\u003e executable is resolved from, mirroring \u003ccode\u003eclaude\u003c/code\u003e's own resolution: unset uses \u003ccode\u003eshutil.which(\"codex\")\u003c/code\u003e, falling back to the bare name \u003ccode\u003ecodex\u003c/code\u003e (so a spawn failure reports what was actually tried) when PATH resolves nothing. Only consulted when the \u003ccode\u003ecodex\u003c/code\u003e route is selected (\u003ca href=\"https://github.com/Digital-Process-Tools/claude-remember/issues/460\" data-hovercard-type=\"issue\" data-hovercard-url=\"/Digital-Process-Tools/claude-remember/issues/460/hovercard\"\u003e#460\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"Configuration","fully_qualified_name":"Configuration","kind":"section_2","ident_start":3,"ident_end":16,"extent_start":0,"extent_end":47538,"ident_utf16":{"start":{"line_number":0,"utf16_col":3},"end":{"line_number":0,"utf16_col":16}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":189,"utf16_col":0}}},{"name":"The summarizer's environment","fully_qualified_name":"The summarizer's environment","kind":"section_3","ident_start":31020,"ident_end":31048,"extent_start":31016,"extent_end":33434,"ident_utf16":{"start":{"line_number":98,"utf16_col":4},"end":{"line_number":98,"utf16_col":32}},"extent_utf16":{"start":{"line_number":98,"utf16_col":0},"end":{"line_number":132,"utf16_col":0}}},{"name":"The Codex summarizer's allow-list (#724)","fully_qualified_name":"The Codex summarizer's allow-list (#724)","kind":"section_3","ident_start":33438,"ident_end":33478,"extent_start":33434,"extent_end":35696,"ident_utf16":{"start":{"line_number":132,"utf16_col":4},"end":{"line_number":132,"utf16_col":44}},"extent_utf16":{"start":{"line_number":132,"utf16_col":0},"end":{"line_number":166,"utf16_col":0}}},{"name":"Environment variables","fully_qualified_name":"Environment variables","kind":"section_3","ident_start":35700,"ident_end":35721,"extent_start":35696,"extent_end":47538,"ident_utf16":{"start":{"line_number":166,"utf16_col":4},"end":{"line_number":166,"utf16_col":25}},"extent_utf16":{"start":{"line_number":166,"utf16_col":0},"end":{"line_number":189,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":1182535754,"defaultBranch":"main","name":"claude-remember","ownerLogin":"Digital-Process-Tools","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-03-15T16:47:29.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/150799090?v=4","public":true,"private":false,"isOrgOwned":true,"isArchived":false},"currentUser":null,"uploadToken":"RKCAyss6xplS0mPUmMvely55FiLP73aaxNx0zWqUxpcGOL30dVu_nmR_JhnAJvXqfeJb_FAn5ON2SGjz5sNgaQ","allShortcutsEnabled":false,"treeExpanded":true,"path":"docs/configuration.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1791445074.0","canEdit":false,"currentOid":"a54cd804f31d19b0b94a5c4efce8a92dea1b2939"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"docs":{"items":[{"name":"computing-the-slug-outside-bash.md","path":"docs/computing-the-slug-outside-bash.md","contentType":"file"},{"name":"configuration.md","path":"docs/configuration.md","contentType":"file"},{"name":"data-files.md","path":"docs/data-files.md","contentType":"file"},{"name":"diagnostics.md","path":"docs/diagnostics.md","contentType":"file"},{"name":"external-storage-mode.md","path":"docs/external-storage-mode.md","contentType":"file"},{"name":"git-backup-security.md","path":"docs/git-backup-security.md","contentType":"file"},{"name":"git-worktrees.md","path":"docs/git-worktrees.md","contentType":"file"},{"name":"handoff.md","path":"docs/handoff.md","contentType":"file"},{"name":"hooks.md","path":"docs/hooks.md","contentType":"file"},{"name":"how-memory-files-are-written.md","path":"docs/how-memory-files-are-written.md","contentType":"file"},{"name":"install-antigravity.md","path":"docs/install-antigravity.md","contentType":"file"},{"name":"install-claude-code.md","path":"docs/install-claude-code.md","contentType":"file"},{"name":"install-codex.md","path":"docs/install-codex.md","contentType":"file"},{"name":"install-gemini-cli.md","path":"docs/install-gemini-cli.md","contentType":"file"},{"name":"maintainer.md","path":"docs/maintainer.md","contentType":"file"},{"name":"marketplace-12k-installs.png","path":"docs/marketplace-12k-installs.png","contentType":"file"},{"name":"marketplace-1600-installs.png","path":"docs/marketplace-1600-installs.png","contentType":"file"},{"name":"measuring-lock-hold-times.md","path":"docs/measuring-lock-hold-times.md","contentType":"file"},{"name":"nested-model-output.md","path":"docs/nested-model-output.md","contentType":"file"},{"name":"privacy.md","path":"docs/privacy.md","contentType":"file"},{"name":"reading-the-transcript-path.md","path":"docs/reading-the-transcript-path.md","contentType":"file"},{"name":"releasing.md","path":"docs/releasing.md","contentType":"file"},{"name":"remember.png","path":"docs/remember.png","contentType":"file"},{"name":"running-tests.md","path":"docs/running-tests.md","contentType":"file"},{"name":"slug-vectors.json","path":"docs/slug-vectors.json","contentType":"file"},{"name":"terms.md","path":"docs/terms.md","contentType":"file"},{"name":"verification.md","path":"docs/verification.md","contentType":"file"},{"name":"windows-skip-triage.md","path":"docs/windows-skip-triage.md","contentType":"file"},{"name":"windows.md","path":"docs/windows.md","contentType":"file"}],"totalCount":29},"":{"items":[{"name":".agents","path":".agents","contentType":"directory"},{"name":".claude-plugin","path":".claude-plugin","contentType":"directory"},{"name":".claude","path":".claude","contentType":"directory"},{"name":".codex-plugin","path":".codex-plugin","contentType":"directory"},{"name":".gemini","path":".gemini","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":".oss","path":".oss","contentType":"directory"},{"name":"changelog.d","path":"changelog.d","contentType":"directory"},{"name":"commands","path":"commands","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"hooks.d","path":"hooks.d","contentType":"directory"},{"name":"hooks","path":"hooks","contentType":"directory"},{"name":"pipeline","path":"pipeline","contentType":"directory"},{"name":"prompts","path":"prompts","contentType":"directory"},{"name":"scripts","path":"scripts","contentType":"directory"},{"name":"skills","path":"skills","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":"trap.d","path":"trap.d","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".oss.json","path":".oss.json","contentType":"file"},{"name":".supertool.json","path":".supertool.json","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CLAUDE.md","path":"CLAUDE.md","contentType":"file"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"README.release.md","path":"README.release.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"config.example.json","path":"config.example.json","contentType":"file"},{"name":"config.user.example.json","path":"config.user.example.json","contentType":"file"},{"name":"conftest.py","path":"conftest.py","contentType":"file"},{"name":"identity.example.md","path":"identity.example.md","contentType":"file"},{"name":"promos.json","path":"promos.json","contentType":"file"},{"name":"pyproject.toml","path":"pyproject.toml","contentType":"file"}],"totalCount":35}},"fileTreeProcessingTime":31.12021,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1791445074.0","canEdit":false,"refType":"branch","currentOid":"a54cd804f31d19b0b94a5c4efce8a92dea1b2939","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"docs/configuration.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/Digital-Process-Tools/claude-remember/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"configuration.md","displayUrl":"https://github.com/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md?raw=true","headerInfo":{"blobSize":"46.4 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"b37b22c","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FDigital-Process-Tools%2Fclaude-remember%2Fblob%2Fmain%2Fdocs%2Fconfiguration.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"189","truncatedSloc":"171"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/Digital-Process-Tools/claude-remember/blob/main/docs/configuration.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/Digital-Process-Tools/claude-remember/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/Digital-Process-Tools/claude-remember/raw/refs/heads/main/docs/configuration.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["## Configuration","","Config is resolved by deep-merging three layers (highest priority wins):","","| Layer          | Path                         | Scope             |","| -------------- | ---------------------------- | ----------------- |","| Plugin bundled | `\u003cplugin\u003e/config.json`       | Shipped defaults  |","| User-global    | `~/.remember/config.json`    | All your projects |","| Per-project    | `\u003cREMEMBER_DIR\u003e/config.json` | One project       |","","Put cross-project preferences (timezone, cooldowns) in `~/.remember/config.json`. Put project-specific overrides in `\u003cREMEMBER_DIR\u003e/config.json`. See `config.user.example.json` for a user-global template and `config.example.json` for all available keys.","","| Key                              | Default          | Purpose                                                                                                                                                                                                                                |","| -------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |","| `data_dir`                       | `.remember`      | Where memory files are written. Relative paths resolve inside the project root (legacy default). Absolute paths or paths starting with `~` are expanded and treated as external — see [External storage mode](external-storage-mode.md#external-storage-mode). |","| `cooldowns.save_seconds`         | `120`            | Minimum seconds between saves                                                                                                                                                                                                          |","| `cooldowns.ndc_seconds`          | `3600`           | Compression interval (hourly)                                                                                                                                                                                                          |","| `cooldowns.git_backup_seconds`   | `900`            | Minimum seconds between auto-backup commits (no-op if `~/.remember/` is not a git repo)                                                                                                                                                |","| `git_backup.remote`              | _(empty)_        | Remote to push memory backups to. Empty → bare `git push`, relying on the branch's upstream tracking (the standard `origin main` setup). Set this if you have multiple remotes or a non-standard tracking config.                      |","| `git_backup.branch`              | _(empty)_        | Branch to push to. Only used when `git_backup.remote` is set; empty pushes the current branch. The resolved remote/branch is logged on the first push.                                                                                 |","| `git_backup.reject_notice_after` | `3`              | Consecutive *permanently rejected* pushes before the backup interrupts you with a `systemMessage` on the next prompt, on top of the log line. A rejection never clears itself, so this only postpones a true report — it cannot swallow one. Transient failures (offline, no credentials) never count toward it. `0` disables the interruption and leaves the log line.                        |","| `git_backup.commit_notice_after` | `3`              | Consecutive *failed commits* before the backup interrupts you with a `systemMessage`, on top of the log line. A failed commit is worse than a failed push — the memory is recorded in no git history at all, not even locally — and every cause is durable (no `user.email`, a full disk, a stale index lock, a pre-commit hook on the backup repo), so this only postpones a true report. git's own error is always in the log line. `0` disables the interruption. |","| `git_backup.no_remote_notice_after` | `10`          | Consecutive saves with **no remote configured** before the backup says so once — and only once for the lifetime of the store. Unlike every other counter here the condition may be entirely intentional: a local-only history is a legitimate choice, and a notice that repeated on every save would cost the others their meaning. `0` disables it. |","| `git_backup.gpg_sign`            | `false`          | Sign auto-backup commits. Default passes `--no-gpg-sign` so background commits never hang on a passphrase prompt. Set `true` only with non-interactive signing (e.g. a hardware key) to honour your global `commit.gpgSign`.            |","| `git_backup.allow_remote_change` | `false`          | One-shot opt-in to accept a changed push remote. The backup hook records the remote URL on first push and aborts every later push if it changed, since a swapped URL can mean a poisoned `config.json` pointing at someone else's host. Set `true` only when you are deliberately re-pointing at a new repo, then set it back. See [`docs/git-backup-security.md`](docs/git-backup-security.md).                                     |","| `git_restore.enabled`            | `false`          | **Off by default.** Fast-forward `~/.remember/` from the backup remote at session start, before memory is read into context — the read counterpart to git backup, for stores used from more than one machine ([#253](https://github.com/Digital-Process-Tools/claude-remember/issues/253)). Fast-forward only: a diverged store is refused and reported, never merged or rebased. The `git fetch` is detached and lands next session, so no network runs before your first prompt. See [Restoring on a second machine](external-storage-mode.md#restoring-on-a-second-machine-off-by-default). |","| `git_restore.remote`             | _(empty)_        | Remote to restore from. Empty → `git_restore.remote` falls back to `git_backup.remote`, then to `origin`. A store that pushes to one place and reads from another is almost always a mistake, so the default is to share the backup's setting. **Treated as untrusted** ([#723](https://github.com/Digital-Process-Tools/claude-remember/issues/723)): `config.json` is git-tracked and is exactly what `git_restore`'s own fast-forward syncs FROM the remote, so this value can be attacker-controlled on a shared store. A leading `-`, or a value containing `:` or `/`, is rejected and the restore falls back to `origin` rather than passing it to `git fetch`. |","| `git_restore.branch`             | _(empty)_        | Branch to restore from. Empty → `git_backup.branch`, then the branch currently checked out. With a detached HEAD and this unset, the restore refuses rather than guessing. **Treated as untrusted for the same reason as `git_restore.remote`** ([#723](https://github.com/Digital-Process-Tools/claude-remember/issues/723)): a leading `-` is rejected rather than passed to `git fetch`. `git_backup.remote`/`git_backup.branch` get the identical treatment on the push side.                        |","| `git_restore.fetch_timeout_seconds` | `20`          | How long the detached background fetch may run before it is killed. It never blocks your prompt either way; the bound exists so a hung transport cannot leave a git process alive indefinitely, and so a fetch that never came back is reported as such next session rather than passing for \"up to date\". |","| `git_restore.diverged_notice_after` | `3`           | Consecutive session starts finding a *diverged* store before the restore interrupts you with a `systemMessage`, on top of the log line. A divergence never clears itself, so this only postpones a true report — it cannot swallow one. A failed or unreachable fetch never counts toward it. `0` disables the interruption and leaves the log line. |","| `git_reconcile.enabled`          | `false`          | **Off by default, and currently hard-disabled regardless of this setting** ([#969](https://github.com/Digital-Process-Tools/claude-remember/issues/969)): `hooks.d/after_save/60-git-reconcile.sh` reads this flag first, then exits immediately either way, after a fifth consecutive `destroys`-class finding on the hook (#932/#939/#946/#952/#966) left a residual TOCTOU window open. If this is `true`, the hook logs a `disabled pending #969` notice to `hook-errors.log` on every save -- which trips `/remember:doctor`'s Recent errors WARN for exactly the users who opted in. Setting this to `true` currently does nothing else until #969's real fix lands. The rest of this row describes the hook's intended behavior once that fix ships: an optional reconcile step for a store written from more than one machine ([#903](https://github.com/Digital-Process-Tools/claude-remember/issues/903)), in its own hook so `git_backup`'s commit-and-push-only promise ([#253](https://github.com/Digital-Process-Tools/claude-remember/issues/253)) and `git_restore`'s fast-forward-only promise both still hold with this off. When enabled: fetches, fast-forwards when purely behind, and when both ahead and behind (diverged) rebases local commits onto the remote tip and pushes, with one retry if the remote moves again between the fetch and the push. On a real conflict: aborts the rebase, changes nothing else, and reports the conflicting file names through a `git-reconcile-notice` -- surfaced the same way `git_restore`'s own diverged notice is, as a one-line `systemMessage` on your next prompt (`scripts/user-prompt-hook.sh`). Never resets, force-pushes or creates a merge commit. Declines while this slug's consolidation is rewriting `recent.md`/`archive.md` (shares consolidation's own lock) rather than risk a rebase mid-rewrite. NDC compression (`save-session.sh`'s background `now.md`-\u003e`today-*.md` summarizer) is the OTHER writer of `now.md`, and its own staleness guards used to be blind to a rebase/merge landing while they were mid-check ([#932](https://github.com/Digital-Process-Tools/claude-remember/issues/932)) -- reconcile cannot share `save-session.sh`'s own lock the way it shares consolidation's (that lock is held across the ENTIRE save, so checking it here would decline almost every save, not just the rare racing one), so instead every successful fast-forward/rebase bumps NDC's own generation marker, the same counter NDC already compares before/after its own commit, making NDC's existing guard also catch this hook as a writer. |","| `git_reconcile.remote`           | _(empty)_        | Remote to reconcile against. Empty → falls back to `git_backup.remote`, then the branch's own push target, then `origin`. **Treated as untrusted for the same reason as `git_restore.remote`** ([#723](https://github.com/Digital-Process-Tools/claude-remember/issues/723)): a leading `-`, or a value containing `:` or `/`, is rejected rather than passed to `git fetch`/`git push`. |","| `git_reconcile.branch`           | _(empty)_        | Branch to reconcile against. Empty → falls back to `git_backup.branch`, then the branch currently checked out. With a detached HEAD and this unset, reconcile refuses rather than guessing. **Treated as untrusted for the same reason as `git_restore.branch`.** |","| `hooks.dispatch_timeout_seconds` | `15`             | How long **one** `hooks.d/` listener may take before it is stopped, for the events the agent is waiting on: `after_post_tool`, `after_user_prompt`, `before_session_start`, `after_session_start`. Until [#286](https://github.com/Digital-Process-Tools/claude-remember/issues/286) nothing bounded them, so a listener that blocked stalled the agent for as long as it blocked and logged nothing — nothing had failed. Claude Code kills a hook at 60s of its own accord, so a budget at or above that is the host killing the process with no report from the plugin. The shipped listeners take 0.17–0.58s here. Per hook, not per dispatch: one slow listener never spends the next one's allowance. `0` disables the bound. |","| `hooks.dispatch_timeout_detached_seconds` | `120`   | The same budget for `before_save`, `after_save`, `before_consolidate` and `after_consolidate`, which are dispatched from `save-session.sh` / `run-consolidation.sh` — started with `nohup … \u0026`, so nobody is waiting on them. A listener doing real work there is doing it on its own time, and 15s would be a deadline no one is keeping. `0` disables the bound. |","| `hooks.dispatch_kill_grace_seconds` | `5`           | Between `SIGTERM` and `SIGKILL`. bash runs an `EXIT` trap when it dies of an untrapped `SIGTERM` and does not on `SIGKILL`, and git removes its own `index.lock` on `SIGTERM` and cannot on `SIGKILL` — so this window is a listener's chance to release a lock or unwind a partial write. It is a courtesy, not a veto: one that traps `TERM` and keeps going is killed anyway. |","| `thresholds.min_human_messages`  | `3`              | Minimum human messages before saving. Keeps greetings and one-liners out of memory.                                                                                                                                                    |","| `thresholds.min_exchanges_without_human` | `30`     | Save anyway when the span has at least this many exchanges, even if the human count is below `min_human_messages`. Without it, an agentic session (many tool calls, few human turns) never clears the gate and never saves at all. `0` disables the fallback. |","| `thresholds.max_summary_failures` | `3`             | Consecutive summarization failures on the *same* span before it is dropped and the position advanced past it. Keeping the position is right for a transient error (the span retries next run), but a persistent failure would otherwise retry forever and no later span could ever be saved. `0` retries forever. |","| `thresholds.delta_lines_trigger` | `50`             | Tool call output lines that trigger auto-save                                                                                                                                                                                          |","| `thresholds.extract_max_bytes`   | `300000`         | Max UTF-8 size of the session extract sent to Haiku. Larger extracts are truncated to their most-recent tail so a very long session can't overflow the model's context window and silently stall saves. `0` disables the cap.          |","| `thresholds.autonomous_log_retention_days` | `7`    | Age, in days, after which a `logs/autonomous/*.log` file is reclaimed regardless of content ([#487](https://github.com/Digital-Process-Tools/claude-remember/issues/487)). That directory's only prior retention was `-empty -delete`, which stopped covering `session-end-*.log` the moment [#483](https://github.com/Digital-Process-Tools/claude-remember/issues/483) seeded it with a header before its subshell opens it — every one is non-empty by construction, so nothing ever reclaimed that class again. An empty file is still reclaimed immediately, on the same first pass; this age-keyed check runs right after it, over both file classes (`save-*.log` and `session-end-*.log` share the `*.log` glob) — one portable `stat`-based sweep now covers both, not two separate `find` calls. Runs on every ordinary flush, independent of `features.ndc_compression` ([#498](https://github.com/Digital-Process-Tools/claude-remember/issues/498)) — this housekeeping used to live inside NDC's own gated block by accident of placement, so turning NDC compression off silently turned log retention off too, with this setting configured and doing nothing. `stat`, not `find -mtime`/`-empty` ([#502](https://github.com/Digital-Process-Tools/claude-remember/issues/502)): `find` is the one command on this path with a real PATH-shadowing risk on Windows Git Bash. |","| `features.ndc_compression`       | `true`           | Enable hourly compression of daily files. Independent of `logs/autonomous/` retention ([#498](https://github.com/Digital-Process-Tools/claude-remember/issues/498)) — disabling this no longer disables that housekeeping too.        |","| `features.recovery`              | `true`           | Recover missed saves on session start                                                                                                                                                                                                  |","| `features.plugin_promos`         | `true`           | Cross-plugin promo at `SessionStart` ([#574](https://github.com/Digital-Process-Tools/claude-remember/issues/574)): a `systemMessage` naming one sibling Digital-Process-Tools plugin you have not installed, checked against `~/.claude/plugins/installed_plugins.json`. Since [#657](https://github.com/Digital-Process-Tools/claude-remember/issues/657) the same rotation also carries a one-time star ask, gated on `recent.md` being a non-empty file rather than on install status -- it waits until a full day of your sessions has actually been consolidated before ever asking. `false` turns the whole feature off entirely, and every entry's line both identifies itself (`claude-remember:`) and names this key inline, so it is attributable and actionable at the moment it fires ([#631](https://github.com/Digital-Process-Tools/claude-remember/issues/631)). Copy lives in `promos.json` beside `config.example.json`, not in the hook; prefix, text, URL and the inline hint together must fit 170 characters or the entry is skipped and logged. See [From the same workshop](../README.md#from-the-same-workshop). |","| `cooldowns.promo_seconds`        | `604800`         | Minimum seconds between plugin promos, persisted per **machine** under `~/.remember/tmp/` regardless of `data_dir` — the throttle describes what this machine has already been shown, not one project's store. Default is 7 days. `0` shows a promo on every `SessionStart` that has a candidate to show. |","| `timezone`                       | _(system local)_ | IANA name (e.g. `America/New_York`, `Europe/Paris`) for timestamps and daily file boundaries. Omit or leave empty to use the system clock's local zone. Set this explicitly on a VPS whose system clock is UTC.                        |","| `time_format`                    | `24h`            | `24h` or `12h` — controls timestamp format in log files (e.g. `14:30:00` vs `2:30:00 PM`)                                                                                                                                              |","| `prompt_stamp`                   | `full`           | What the `UserPromptSubmit` hook injects into the model's context. `full` — `[14:30 CEST — jack — 45%]`, unchanged from every previous release. `stable` — `[jack]` only: the clock and the context percentage both change between turns, and the percentage climbs on *every* prompt for anyone running the status line, so dropping only the clock would leave the line volatile. The `\u003e= 95` context warning is **kept**, because it is threshold-gated and changes bytes only when it changes behaviour. `off` — nothing at all, warning included. An unrecognised value reads as `full` ([#301](https://github.com/Digital-Process-Tools/claude-remember/issues/301)). |","| `model`                          | `haiku`          | Model used for the summarization / consolidation `claude -p` call. `REMEMBER_MODEL` overrides it. Documented as an env var only until #176, though `config.json` is the source of truth. |","| `reject_pattern`                 | _(empty)_        | Overrides the reject-gate regex that keeps model refusals out of the memory layer. Empty → the narrow built-in default; `none` → gate off; anything else → a case-insensitive regex. An invalid regex falls back to the default. `REMEMBER_REJECT_PATTERN` overrides it. |","| `handoff_mode`                   | `single`         | **Off by default.** `single` — every interactive session shares one `remember.md`, byte-identical to every previous release. `per_session` — the handoff becomes `remember.\u003csession_id\u003e.md`, so two sessions sharing one project store ([#56](https://github.com/Digital-Process-Tools/claude-remember/issues/56)) each write and read their own note instead of the second silently overwriting the first ([#363](https://github.com/Digital-Process-Tools/claude-remember/issues/363)). History, `recent.md`, `archive.md` and consolidation are unaffected either way — only the single handoff slot is namespaced. If no usable `session_id` reaches the hook, `per_session` falls back to the shared file — the hint still points at it, since that path is still correct — but a visible line says the fallback happened, so it does not read as isolation that never applied. No pruning ships with this key: stale `remember.\u003csession_id\u003e.md` files accumulate until removed by hand. |","| `thresholds.consolidate_max_bytes` | `600000`       | Max UTF-8 size of the staging content sent to the consolidation model. Read by `run-consolidation.sh`; documented in `config.example.json` but missing from this table until #176. Since [#346](https://github.com/Digital-Process-Tools/claude-remember/issues/346) the same number also caps what consolidation may **write**: a response larger than this is refused rather than copied over `recent.md`/`archive.md`. It is measured on staging + `recent.md` + `archive.md` together, and a store already over it now [rotates its way out](../README.md#a-store-over-the-consolidation-cap) rather than skipping forever ([#348](https://github.com/Digital-Process-Tools/claude-remember/issues/348)). |","| `thresholds.memory_inject_max_bytes` | `200000`     | A memory file larger than this is **named with its size instead of injected** at session start ([#346](https://github.com/Digital-Process-Tools/claude-remember/issues/346)). It stays on disk and stays greppable; what stops is pouring it into a context window that cannot hold it — a multi-GB `recent.md` froze every `claude` launch in the reporter's project. A healthy memory file is kilobytes, so this only ever fires on a store that is already broken. Set `0` to disable. When this is configured **below** the bundled default, the over-cap notice says \"capped by config\" and drops the `/remember:doctor` suggestion ([#842](https://github.com/Digital-Process-Tools/claude-remember/issues/842)) — a deliberately lowered cap is not evidence of a broken store. That holds only for files the lowered cap alone explains: a file larger than the bundled 200000 default is malformed whatever the cap, and keeps the original warning and the `/remember:doctor` advice. |","| `thresholds.session_start_max_bytes` | `9000`       | Total byte budget for the whole SessionStart body (handoff + the `=== REMEMBER ===` legend + the `=== MEMORY ===` section), counted in **bytes, not characters** — see [#842](https://github.com/Digital-Process-Tools/claude-remember/issues/842) for why bytes are the conservative choice under Claude Code's own character-based preview cap. `memory_inject_max_bytes` above caps one file at a time and has no notion of a TOTAL: six individually-healthy files can still sum past Claude Code's own persist-to-file threshold (observed around 10,000 characters), at which point the model sees only a short preview and never the `=== MEMORY ===` section at all. Filled in priority order handoff → now.md → recent.md → today-*.md → archive.md; whatever does not fit is **listed by name and size**, never silently dropped, the same convention `source=compact` already uses for its own deferred files. Does not apply at `source=compact`, which already minimizes its own output a different way. Set `0` to disable. |","| `thresholds.handoff_max_redeliveries` | `3`          | Once the same (unchanged) handoff content has been delivered this many times, a further delivery is **listed by path instead of re-injected** ([#842](https://github.com/Digital-Process-Tools/claude-remember/issues/842)) — `remember.delivered` already tracks the count (see `handoff_mode` above), but until this it only ever changed the \"already delivered N times\" banner text, re-injecting the full, unchanged body on every single start regardless. The delivery record still advances past the cap, so a later redelivery still reports how long the note has been pending, and `/remember` still replaces it immediately. Set `0` to disable. |","| `thresholds.staging_warn_bytes`  | `2000000`        | Byte threshold for a one-time WARNING when a `today-*.md` staging file grows past it ([#349](https://github.com/Digital-Process-Tools/claude-remember/issues/349)). `staging_append()` is append-only by design — only a successful consolidation round retires one of these files — so sustained lock contention, a full disk, or a stalled consolidation round (a misconfigured `features.ndc_compression`, or the [#346](https://github.com/Digital-Process-Tools/claude-remember/issues/346) skip-forever state) leaves the same kind of span landing there every round, forever, with nothing to notice. This does **not** cap or truncate anything — the append is unchanged either way — it only logs once, via the same `report_error()` path that reaches `hook-errors.log` and is surfaced by `/remember:doctor`'s existing \"Recent errors\" section. Set `0` to disable. On a store whose `logs/` cannot be created ([#361](https://github.com/Digital-Process-Tools/claude-remember/issues/361)/[#372](https://github.com/Digital-Process-Tools/claude-remember/issues/372)), `log.sh` never gets to read this key at all; the same `report_error()` path logs once, separately, whenever a `REMEMBER_CONFIG` exists but went unparsed for that reason — the `2000000` used below it may not be the configured value ([#399](https://github.com/Digital-Process-Tools/claude-remember/issues/399)). |","| `thresholds.ndc_timeout_seconds` | `180`            | Wall-clock budget (seconds) for the NDC `now.md` -\u003e `today-*.md` compression call. Output length scales with input length, so a `now.md` large enough to need longer than this timed out on every run, was left untouched, and grew further each round — a one-way ratchet that never recovered on its own ([#788](https://github.com/Digital-Process-Tools/claude-remember/issues/788)). Raise this if the daily log shows repeated `[ndc] ERROR` lines mentioning a timeout. |","| `thresholds.consolidate_timeout_seconds` | `180`     | Wall-clock budget (seconds) for the staging -\u003e `recent.md`/`archive.md` consolidation call. The same fix shape as `ndc_timeout_seconds` above ([#806](https://github.com/Digital-Process-Tools/claude-remember/issues/806), reopening the intent of [#788](https://github.com/Digital-Process-Tools/claude-remember/issues/788)): output length scales with input length, so a large enough staging batch can time out on every run, be left uncompressed, and grow further every round with no recovery. Raise this if the daily log shows repeated `consolidation` ERROR lines mentioning a timeout. |","| `debug`                          | _(unset)_        | Verbose logging for cooldowns and locks. Unset, each script keeps its own default — `save-session.sh` is verbose, the git-backup hook is quiet — which is what they did before this option was wired up (#176). `REMEMBER_DEBUG` overrides it.                                                                                                                                                                                                |","| `haiku.oauth_token`              | _(empty)_        | **Removed entirely (#860, round 4).** Never read for authentication, on any host -- this plugin has no recovery-token path of its own at all, on Claude Code or Codex; a nested call that cannot authenticate simply runs unauthenticated, and refreshing your coding agent's own CLI login is the fix. A still-configured value here is not read for anything, is not detected, and is not logged anywhere -- there is nothing to migrate it to; remove it whenever convenient, but leaving it in place is harmless. |","| `session_start_slow_threshold_s` | `5`              | The `SessionStart` hook's own wall-clock duration is always written to the daily log (`session-start took Ns`); at or above this many whole seconds it is **also** printed into the session, under `=== SESSION-START ===`, so a slow host is visible without going looking for the daily log first ([#706](https://github.com/Digital-Process-Tools/claude-remember/issues/706)). Measured with bash 5's `EPOCHSECONDS` builtin (no added fork) or, on older bash, one `date +%s` at each end — never per log line. Set `0` to surface every start; there is no key that silences the daily-log line. |","","**A per-project `.remember/config.json`'s `haiku` block is never read, in the default","(legacy) storage layout.** Keys under `haiku` have been security-relevant (`haiku.oauth_token`","chose the credential the nested summarizer authenticated with). In the default layout","`.remember/` sits inside the project checkout, so a repository you clone can ship a","`.remember/config.json` of its own -- and before","[#726](https://github.com/Digital-Process-Tools/claude-remember/issues/726), its `haiku`","block was trusted exactly like one you wrote yourself. It no longer is, **regardless of","whether that file is tracked by the repository's own git index** -- set `haiku` keys in","`~/.remember/config.json` (user-global), never in a project's own config file, if you","want them honoured.","","**`model` and `reject_pattern` from that same per-project config are stripped too, but","only when the file is git-TRACKED** -- committed by the repository, not merely sitting","in the default layout","([#757](https://github.com/Digital-Process-Tools/claude-remember/issues/757)). Unlike","the `haiku` block, neither can redirect where a transcript goes -- only which model","is billed for every save, or whether the refusal gate runs at all (`reject_pattern:","\"none\"` turns it off outright; any other value is a regex run over model output, an","attacker-controlled ReDoS surface) -- severe enough to strip from a file the repository","itself committed, not severe enough to break every single-user project's own untracked","per-project override the way #726 already accepted paying for `haiku`. An **untracked**","per-project `config.json` -- the ordinary case, written by you, never `git add`ed --","still has `model`/`reject_pattern` take effect, exactly as before #757.","","External storage mode (`data_dir` absolute or home-relative, e.g. `~/.remember/{slug}`)","is unaffected by any of the above -- `REMEMBER_DIR` there is the operator's own","directory, never one a clone ships, so its config stays trusted **once it is genuinely","the operator's own**. Nothing is moved into that mode automatically any more (#898):","if you move an old in-project `.remember/` there by hand, leave behind any `config.json`","your repository tracks in git, or it becomes trusted config","([#757](https://github.com/Digital-Process-Tools/claude-remember/issues/757); see","[external-storage-mode.md](external-storage-mode.md)).","See [git-backup-security.md](git-backup-security.md) for the wider \"a cloned project's","config is untrusted input\" note.","","### The summarizer's environment","","**The `claude` summarizer.** The summarizer runs a nested `claude -p` that inherits your","environment, including your Claude Code login, exactly like any process a hook starts, and","remember itself reads no credential","([#898](https://github.com/Digital-Process-Tools/claude-remember/issues/898)). Only the","parent Claude Code session's own variables are removed for the length of that call, so it","does not pass as that session","([#95](https://github.com/Digital-Process-Tools/claude-remember/issues/95),","[#204](https://github.com/Digital-Process-Tools/claude-remember/issues/204)), and put","back afterwards: `CLAUDECODE`, `CLAUDE_JOB_DIR`, `CLAUDE_PROJECT_DIR`,","`CLAUDE_CODE_SESSION_ID`, `CLAUDE_CODE_ENTRYPOINT`, `CLAUDE_CODE_CHILD_SESSION`,","`CLAUDE_CODE_SESSION_ATTENDED`, `CLAUDE_CODE_EXECPATH`, `CLAUDE_CODE_MESSAGING_SOCKET`,","`CLAUDE_CODE_SSE_PORT` -- the reason for each is a comment beside the code in","`pipeline/haiku.py`. `CLAUDE_CODE_MESSAGING_TOKEN`, the handshake paired with the messaging","socket, is not on the list and reaches the nested call: with the socket removed, the nested","call has no channel to present it on. Your login credential is never on that list","([#131](https://github.com/Digital-Process-Tools/claude-remember/issues/131)); provider","settings such as Bedrock selection are not either, so they reach the nested call","([#316](https://github.com/Digital-Process-Tools/claude-remember/issues/316)). To keep any","other variable away from the summarizer -- for example an `ANTHROPIC_API_KEY` set for some","unrelated tool that would out-rank your `claude.ai` login there","([#703](https://github.com/Digital-Process-Tools/claude-remember/issues/703)) -- unset it","in the environment you start Claude Code from.","","**The list is code, not config.** Each name is written out literally in","`pipeline/haiku.py` and cannot be changed from `config.json`. If a future Claude Code","release adds a session variable, it reaches the summarizer until a plugin release adds it","to the list. (Two earlier development rounds of #898 read this list, and the Codex one","below, from `config.json`; a release-candidate scan reports reading the environment by a","name taken from config as \"an environment variable named at run time\", so both lists went","back into code with the same names.) **Removed:** `haiku.drop_env`","([#898](https://github.com/Digital-Process-Tools/claude-remember/issues/898)).","","### The Codex summarizer's allow-list (#724)","","**What it protects.** Codex's `--sandbox read-only` denies writes and network, but it","still runs whatever command the model asks for -- and a transcript can carry an","instruction that gets the model to ask for `env`","([#724](https://github.com/Digital-Process-Tools/claude-remember/issues/724)). So the","nested `codex exec` process is not given your environment: it is given only these","variables, and nothing else -- no Anthropic key, no cloud credential, no unrelated secret","your shell happens to carry: `PATH`, `HOME`, `LANG`, `LC_ALL`, `CODEX_HOME`, `TMPDIR`,","`TEMP`, `TMP`, `SYSTEMROOT`, `USERPROFILE`, `APPDATA`, `PATHEXT` -- what the Codex CLI","needs to run and find its own login in `CODEX_HOME`. (Separately,","`-c shell_environment_policy.inherit=none` gives a command Codex spawns no environment","at all; the allow-list bounds what Codex's own process can see.) An allow-list fails","closed: a variable nobody thought about stays out. Like the `claude` list above, it is","code, not config: it cannot be changed from `config.json`.","","**No credential is on it**","([#898](https://github.com/Digital-Process-Tools/claude-remember/issues/898)). That is","narrower than earlier releases, which also passed Codex's own API-key variable","(`CODEX_API_KEY`) through. If Codex finds its login in `auth.json` under `CODEX_HOME`","(what `codex login` writes), nothing changes for you. **If you authenticate Codex only","through an environment variable, it is not passed through and the `codex` summarizer","starts without it** -- run `codex login` so the login lives in `auth.json`, or use the","`claude` summarizer (`REMEMBER_SUMMARIZER=claude`).","","**No proxy or CA-bundle variable is on it either**","([#898](https://github.com/Digital-Process-Tools/claude-remember/issues/898)).","`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` (in either casing), `SSL_CERT_FILE` and","`NODE_EXTRA_CA_CERTS` used to be passed through","([#751](https://github.com/Digital-Process-Tools/claude-remember/issues/751)); they are not","any more. **If you reach the network only through a proxy or a custom CA bundle, the `codex`","summarizer cannot reach it -- set `REMEMBER_SUMMARIZER=claude`**: the `claude` summarizer","inherits your whole environment, proxy variables included.","","### Environment variables","","A few runtime overrides aren't in `config.json` because they're per-shell rather than per-project.","","| Env var            | Effect                                                                                                                                                                                                                                                                                                                                                                                |","| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |","| `REMEMBER_BRANCH`  | Overrides the `\\| \u003cbranch\u003e` identity field in each `## HH:MM \\| \u003cbranch\u003e` memory header. Useful when your coding agent runs from a non-git directory (`$HOME`, a scratch dir) — without it the header falls back to the literal string `unknown`, which collapses the identity slot for every entry. Set to a meaningful tag (e.g. `laptop`, `cloud`, `staging`, an instance name) in your shell rc. It is process environment, read once at save time — one value per launched session, so it cannot distinguish several concurrent sessions of the *same* project from each other; see `REMEMBER_BRANCH_CMD` below for that case. |","| `REMEMBER_BRANCH_CMD` | Path to an executable, invoked as `$REMEMBER_BRANCH_CMD \"$SESSION_ID\"`, whose stdout becomes the identity slot. Checked after `REMEMBER_BRANCH` and before the `git branch --show-current` fallback; a non-zero exit or empty stdout falls through to that fallback and logs a WARNING naming the configured command and the session — a resolver that is merely unconfigured stays silent, one that is configured and failing does not. This is the answer for [#481](https://github.com/Digital-Process-Tools/claude-remember/issues/481): several coding agent sessions running at once in one project all share `$PROJECT_DIR`, so the git-branch fallback (and a `REMEMBER_BRANCH` set once at launch) resolve to the same value for every one of them — `$SESSION_ID` is the value already in scope that differs per session. What a session id should map to is site-specific (a local registry of named sessions, `${SESSION_ID:0:8}`, ...), so this is a hook rather than a new built-in default. **save-session.sh runs under bash, including on Windows via Git Bash** — this is exec'd directly (no shell reparsing), so give it a forward-slash or PATH-resolvable path (`/c/tools/resolve-identity`, not `C:\\tools\\resolve-identity.exe`) the way you would for any other bash argv. `$SESSION_ID` itself is validated before this ever runs — hex digits and hyphens, anchored to a hex digit at position 1, so it can never reach your resolver's `argv[1]` looking like a flag ([#500](https://github.com/Digital-Process-Tools/claude-remember/issues/500)). The stdout your resolver prints is expected to be a single line with no embedded newline or carriage return: it is substituted verbatim into the summarizer prompt, so a multi-line or CR-bearing result is refused rather than used unbounded — logged the same WARNING-and-fall-through as a non-zero exit or empty stdout ([#501](https://github.com/Digital-Process-Tools/claude-remember/issues/501)). |","| `REMEMBER_DEBUG`   | `1` emits verbose hook/cooldown lines to logs; `0` silences them. Highest precedence: it beats the `debug` config option. Unset **and** `debug` unset, the defaults differ per script — `save-session.sh` verbose, the git-backup hook quiet — which this table used to paper over with a single \"default `1`\" (#176).                                                                                                                                                                                                                                                                                                            |","| `REMEMBER_MODEL`   | Model used for summarization/consolidation (the `claude -p` call). Default `haiku`. Point it at a more capable tier (e.g. `sonnet`) to improve salience and compression-cap compliance — the call is backgrounded, so there's no interactive-latency cost. **`config.json` → `model` is the source of truth** (per-project); this env var overrides it. Blank falls back to the default.                                                                                              |","| `REMEMBER_REJECT_PATTERN` | Overrides the reject-gate regex that keeps model refusals/clarifications out of the memory layer. Blank → the narrow built-in default (anchored refusal/clarification stems only); `none` → gate disabled (only the literal `SKIP` contract applies); anything else → a custom case-insensitive regex. An invalid regex falls back to the default rather than failing the run. **`config.json` → `reject_pattern` is the source of truth**; this env var overrides it.   |","| `REMEMBER_OAUTH_TOKEN` | **Removed entirely (#860, round 3), on every host.** No longer read for authentication at all, and there is no replacement for it any more -- this plugin has no recovery-token path of its own, on Claude Code or Codex, for either the direct call or Codex's own fallthrough to the shared `claude -p` code path (`REMEMBER_SUMMARIZER_FALLBACK=claude`). A nested call that cannot authenticate simply runs unauthenticated; refresh your coding agent's own CLI login instead (`claude setup-token` if you have not already). A still-set value is detected by **presence only** and logged once per save as a `NOTICE:` line naming this var (never its content), surfaced by `/remember:doctor`'s \"Legacy recovery-token config\" section, on either host -- there is nothing left to migrate it to; remove it. This fallback had no automated test even before removal — see [`docs/verification.md`](docs/verification.md) for the historical manual procedure (describes code that no longer exists; kept only as a record of what was once tested by hand). **If you use git backup, this key must not live in any `config.json` that ends up committed.** A per-project `\u003cslug\u003e/config.json` is never staged or committed by the backup hook regardless ([#719](https://github.com/Digital-Process-Tools/claude-remember/issues/719)), but this env var is still the safer place for it, and it is the only safe place for the user-global `~/.remember/config.json`, which [external-storage-mode.md](external-storage-mode.md) does have you commit deliberately. See [`docs/git-backup-security.md`](git-backup-security.md). |","| `REMEMBER_MAX_CONCURRENT_SUMMARIZERS` | How many nested `claude -p` summarizers may run at once, host-wide. Default `4`. This is the depth bound too: a summarizer that re-entered the plugin runs *inside* its parent's call, so recursion appears as concurrency ([#204](https://github.com/Digital-Process-Tools/claude-remember/issues/204)). Not `1` on purpose — several projects saving at the same time is normal. When it fires, `DECLINED` appears in the daily log and the span is summarized on a later run. |","| `REMEMBER_MAX_SUMMARIZERS_PER_MIN` | How many summarizers may be spawned in any 60-second window, host-wide. Default `12`. Covers the shape concurrency cannot see: a chain where each save spawns the next and no two ever overlap. A store saves at most once per `cooldowns.save_seconds`, so the default leaves room for roughly two dozen active projects. Same `DECLINED` log line when it fires. |","| `REMEMBER_RUNTIME_DIR` | Where spawn records for the two caps above are kept. Default `~/.remember/run`. Derived from `HOME` alone so a child process that inherited no plugin environment still finds it — that is the point of the bound. Set it only to relocate the runtime state (a read-only home, a test harness); if it is unusable the caps stop applying and the daily log says the spawn was `UNBOUNDED`. |","| `REMEMBER_LOCK_TIMING` | `1` records how long each lock is held and how long each acquire waited, so a timeout default can be set from a distribution instead of from intuition ([#226](https://github.com/Digital-Process-Tools/claude-remember/issues/226)). **Off by default and deliberately opt-in**: `save-session.sh` runs on a `PostToolUse` hook, where an extra spawn per lock use is paid on every machine forever ([#227](https://github.com/Digital-Process-Tools/claude-remember/issues/227)/[#230](https://github.com/Digital-Process-Tools/claude-remember/issues/230)/[#204](https://github.com/Digital-Process-Tools/claude-remember/issues/204)). Off, it costs one string comparison and writes nothing. See [Measuring lock hold times](measuring-lock-hold-times.md#measuring-lock-hold-times). |","| `REMEMBER_LOCK_TIMING_FILE` | Where those records go. Default `$REMEMBER_DIR/logs/lock-timing.tsv`. |","| `REMEMBER_LOCK_TIMING_MAX` | Line cap on that file. Default `5000` (~350KB). At the cap recording **stops** and appends a `# CAPPED` line — it does not roll, because a rolled file silently drops the oldest records and the tail is the part a timeout is set from. |","| `REMEMBER_TZ`      | Set automatically by `log.sh` from `config.json` → `timezone`. Don't set this manually unless you're debugging.                                                                                                                                                                                                                                                                       |","| `REMEMBER_SUMMARIZER` | Which summarizer provider to use: `claude` (always `claude -p`, the historical behaviour), `codex` (always `codex exec`), or `auto` (the default) — `auto` reads the transcript the host actually wrote (`REMEMBER_TRANSCRIPT_PATH`, sniffed by `pipeline.extract.sniff_file_envelope()`) and follows it: `codex` for a Codex transcript, `claude` for a Claude Code transcript, an Antigravity transcript (no native summarizer exists for it, so this logs a warning and falls back to `claude`, [#567](https://github.com/Digital-Process-Tools/claude-remember/issues/567)), no transcript, or one this plugin does not recognise. A Claude Code session's own resolution is unchanged by this: it was already `claude`, and `auto` still answers `claude` for it. `auto` no longer asks the environment for a Codex signature (`CODEX_SESSION_ID`/`CODEX_THREAD_ID`) — those never reach the process that actually runs the summariser, only a Codex *tool shell* ([#465](https://github.com/Digital-Process-Tools/claude-remember/issues/465)). An unrecognised value is reported and treated as unset ([#460](https://github.com/Digital-Process-Tools/claude-remember/issues/460)). |","| `REMEMBER_SUMMARIZER_FALLBACK` | Opt-in for what happens when the resolved `codex` route cannot produce a result (binary missing, non-zero exit, empty output, timeout). Unset → raises loudly (\"could not summarize\") rather than silently retrying against Anthropic's API. `claude` → falls back to `claude -p` for that one call, exactly as though `REMEMBER_SUMMARIZER=claude` had been set, and it is logged every time it fires because it reproduces [#460](https://github.com/Digital-Process-Tools/claude-remember/issues/460)'s own billing complaint on purpose, only because the operator asked for it. |","| `REMEMBER_CODEX_BIN` | Overrides where the `codex` executable is resolved from, mirroring `claude`'s own resolution: unset uses `shutil.which(\"codex\")`, falling back to the bare name `codex` (so a spawn failure reports what was actually tried) when PATH resolves nothing. Only consulted when the `codex` route is selected ([#460](https://github.com/Digital-Process-Tools/claude-remember/issues/460)). |"],"stylingDirectives":[[[0,16,"pl-mh"],[3,16,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[17,18,"pl-ml"],[48,49,"pl-ml"],[68,69,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[48,49,"pl-ml"],[68,69,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,40,"pl-c1"],[40,41,"pl-s"],[48,49,"pl-ml"],[68,69,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,43,"pl-c1"],[43,44,"pl-s"],[48,49,"pl-ml"],[68,69,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,46,"pl-c1"],[46,47,"pl-s"],[48,49,"pl-ml"],[68,69,"pl-ml"]],[],[[55,56,"pl-s"],[56,79,"pl-c1"],[79,80,"pl-s"],[116,117,"pl-s"],[117,143,"pl-c1"],[143,144,"pl-s"],[150,151,"pl-s"],[151,175,"pl-c1"],[175,176,"pl-s"],[208,209,"pl-s"],[209,228,"pl-c1"],[228,229,"pl-s"]],[],[[0,1,"pl-ml"],[35,36,"pl-ml"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[35,36,"pl-ml"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,47,"pl-c1"],[47,48,"pl-s"],[54,55,"pl-ml"],[191,192,"pl-s"],[192,193,"pl-c1"],[193,194,"pl-s"],[238,239,"pl-s"],[260,261,"pl-s"],[261,262,"pl-s"],[262,308,"pl-corl"],[308,309,"pl-s"],[311,312,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,25,"pl-c1"],[25,26,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,41,"pl-c1"],[41,42,"pl-s"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,41,"pl-c1"],[41,42,"pl-s"],[54,55,"pl-ml"],[110,111,"pl-s"],[111,123,"pl-c1"],[123,124,"pl-s"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[103,104,"pl-s"],[104,112,"pl-c1"],[112,113,"pl-s"],[171,172,"pl-s"],[172,183,"pl-c1"],[183,184,"pl-s"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[90,91,"pl-s"],[91,108,"pl-c1"],[108,109,"pl-s"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,39,"pl-c1"],[39,40,"pl-s"],[54,55,"pl-ml"],[68,69,"pl-s"],[89,90,"pl-s"],[138,139,"pl-s"],[139,152,"pl-c1"],[152,153,"pl-s"],[361,362,"pl-s"],[362,363,"pl-c1"],[363,364,"pl-s"],[439,440,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,39,"pl-c1"],[39,40,"pl-s"],[54,55,"pl-ml"],[68,69,"pl-s"],[83,84,"pl-s"],[125,126,"pl-s"],[126,139,"pl-c1"],[139,140,"pl-s"],[311,312,"pl-s"],[312,322,"pl-c1"],[322,323,"pl-s"],[478,479,"pl-s"],[479,480,"pl-c1"],[480,481,"pl-s"],[509,510,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-ml"],[40,41,"pl-s"],[41,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[79,81,"pl-s"],[101,103,"pl-s"],[380,381,"pl-s"],[381,382,"pl-c1"],[382,383,"pl-s"],[397,398,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[97,98,"pl-s"],[98,111,"pl-c1"],[111,112,"pl-s"],[174,175,"pl-s"],[175,179,"pl-c1"],[179,180,"pl-s"],[259,260,"pl-s"],[260,274,"pl-c1"],[274,275,"pl-s"],[288,289,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[241,242,"pl-s"],[242,253,"pl-c1"],[253,254,"pl-s"],[292,293,"pl-s"],[293,297,"pl-c1"],[297,298,"pl-s"],[379,380,"pl-s"],[380,381,"pl-s"],[381,408,"pl-c1"],[408,409,"pl-s"],[409,410,"pl-s"],[410,411,"pl-s"],[411,438,"pl-corl"],[438,439,"pl-s"],[477,478,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[56,58,"pl-s"],[73,75,"pl-s"],[89,90,"pl-s"],[90,102,"pl-c1"],[102,103,"pl-s"],[262,263,"pl-s"],[263,267,"pl-s"],[264,267,"pl-corl"],[267,268,"pl-s"],[268,269,"pl-s"],[269,336,"pl-corl"],[336,337,"pl-s"],[430,431,"pl-s"],[431,440,"pl-c1"],[440,441,"pl-s"],[527,528,"pl-s"],[557,558,"pl-s"],[558,559,"pl-s"],[559,628,"pl-corl"],[628,629,"pl-s"],[631,632,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[88,89,"pl-s"],[89,107,"pl-c1"],[107,108,"pl-s"],[123,124,"pl-s"],[124,141,"pl-c1"],[141,142,"pl-s"],[152,153,"pl-s"],[153,159,"pl-c1"],[159,160,"pl-s"],[295,297,"pl-s"],[317,319,"pl-s"],[321,322,"pl-s"],[322,326,"pl-s"],[323,326,"pl-corl"],[326,327,"pl-s"],[327,328,"pl-s"],[328,395,"pl-corl"],[395,396,"pl-s"],[399,400,"pl-s"],[400,411,"pl-c1"],[411,412,"pl-s"],[448,449,"pl-s"],[449,460,"pl-c1"],[460,461,"pl-s"],[574,575,"pl-s"],[575,576,"pl-c1"],[576,577,"pl-s"],[601,602,"pl-s"],[602,603,"pl-c1"],[603,604,"pl-s"],[608,609,"pl-s"],[609,610,"pl-c1"],[610,611,"pl-s"],[655,656,"pl-s"],[656,662,"pl-c1"],[662,663,"pl-s"],[690,691,"pl-s"],[691,700,"pl-c1"],[700,701,"pl-s"],[703,704,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[88,89,"pl-s"],[89,106,"pl-c1"],[106,107,"pl-s"],[227,229,"pl-s"],[273,274,"pl-s"],[274,292,"pl-c1"],[292,293,"pl-s"],[293,295,"pl-s"],[297,298,"pl-s"],[298,302,"pl-s"],[299,302,"pl-corl"],[302,303,"pl-s"],[303,304,"pl-s"],[304,371,"pl-corl"],[371,372,"pl-s"],[385,386,"pl-s"],[386,387,"pl-c1"],[387,388,"pl-s"],[423,424,"pl-s"],[424,433,"pl-c1"],[433,434,"pl-s"],[436,437,"pl-s"],[437,454,"pl-c1"],[454,455,"pl-s"],[456,457,"pl-s"],[457,474,"pl-c1"],[474,475,"pl-s"],[545,546,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-ml"],[40,41,"pl-s"],[41,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[355,356,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-ml"],[40,41,"pl-s"],[41,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[93,94,"pl-s"],[102,103,"pl-s"],[151,152,"pl-s"],[152,165,"pl-c1"],[165,166,"pl-s"],[342,343,"pl-s"],[343,344,"pl-c1"],[344,345,"pl-s"],[397,398,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[107,108,"pl-s"],[108,125,"pl-c1"],[125,126,"pl-s"],[168,169,"pl-s"],[169,175,"pl-c1"],[175,176,"pl-s"],[178,180,"pl-s"],[224,225,"pl-s"],[225,243,"pl-c1"],[243,244,"pl-s"],[244,246,"pl-s"],[248,249,"pl-s"],[249,253,"pl-s"],[250,253,"pl-corl"],[253,254,"pl-s"],[254,255,"pl-s"],[255,322,"pl-corl"],[322,323,"pl-s"],[336,337,"pl-s"],[337,338,"pl-c1"],[338,339,"pl-s"],[363,364,"pl-s"],[364,365,"pl-c1"],[365,366,"pl-s"],[370,371,"pl-s"],[371,372,"pl-c1"],[372,373,"pl-s"],[409,410,"pl-s"],[410,419,"pl-c1"],[419,420,"pl-s"],[421,422,"pl-s"],[422,430,"pl-c1"],[430,431,"pl-s"],[433,434,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[107,108,"pl-s"],[108,125,"pl-c1"],[125,126,"pl-s"],[244,246,"pl-s"],[290,291,"pl-s"],[291,309,"pl-c1"],[309,310,"pl-s"],[311,313,"pl-s"],[314,315,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,40,"pl-c1"],[40,41,"pl-s"],[54,55,"pl-ml"],[65,67,"pl-s"],[70,72,"pl-s"],[73,74,"pl-s"],[74,82,"pl-c1"],[82,83,"pl-s"],[164,165,"pl-s"],[165,180,"pl-c1"],[180,181,"pl-s"],[183,184,"pl-s"],[184,201,"pl-c1"],[201,202,"pl-s"],[204,205,"pl-s"],[205,225,"pl-c1"],[225,226,"pl-s"],[228,229,"pl-s"],[229,248,"pl-c1"],[248,249,"pl-s"],[257,258,"pl-s"],[258,262,"pl-s"],[259,262,"pl-corl"],[262,263,"pl-s"],[263,264,"pl-s"],[264,331,"pl-corl"],[331,332,"pl-s"],[740,741,"pl-s"],[741,742,"pl-c1"],[742,743,"pl-s"],[764,765,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,42,"pl-c1"],[42,43,"pl-s"],[44,45,"pl-ml"],[46,47,"pl-s"],[47,50,"pl-c1"],[50,51,"pl-s"],[54,55,"pl-ml"],[76,77,"pl-s"],[77,88,"pl-c1"],[88,89,"pl-s"],[91,92,"pl-s"],[92,102,"pl-c1"],[102,103,"pl-s"],[105,106,"pl-s"],[106,124,"pl-c1"],[124,125,"pl-s"],[130,131,"pl-s"],[131,148,"pl-c1"],[148,149,"pl-s"],[177,178,"pl-s"],[178,193,"pl-c1"],[193,194,"pl-s"],[197,198,"pl-s"],[198,218,"pl-c1"],[218,219,"pl-s"],[235,236,"pl-s"],[236,245,"pl-c1"],[245,246,"pl-s"],[387,388,"pl-s"],[388,389,"pl-c1"],[389,390,"pl-s"],[411,412,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-ml"],[40,41,"pl-s"],[41,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[64,65,"pl-s"],[65,72,"pl-c1"],[72,73,"pl-s"],[78,79,"pl-s"],[79,86,"pl-c1"],[86,87,"pl-s"],[102,103,"pl-s"],[103,107,"pl-c1"],[107,108,"pl-s"],[143,144,"pl-s"],[144,151,"pl-c1"],[151,152,"pl-s"],[169,170,"pl-s"],[170,177,"pl-c1"],[177,178,"pl-s"],[204,205,"pl-s"],[205,215,"pl-c1"],[215,216,"pl-s"],[220,221,"pl-s"],[221,228,"pl-c1"],[228,229,"pl-s"],[244,245,"pl-s"],[245,252,"pl-c1"],[252,253,"pl-s"],[384,385,"pl-s"],[385,389,"pl-c1"],[389,390,"pl-s"],[425,426,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,32,"pl-c1"],[32,33,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,39,"pl-c1"],[39,40,"pl-s"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-ml"],[45,46,"pl-s"],[46,48,"pl-c1"],[48,49,"pl-s"],[54,55,"pl-ml"],[149,150,"pl-s"],[150,168,"pl-c1"],[168,169,"pl-s"],[283,284,"pl-s"],[284,285,"pl-c1"],[285,286,"pl-s"],[310,311,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-ml"],[38,39,"pl-s"],[39,40,"pl-c1"],[40,41,"pl-s"],[54,55,"pl-ml"],[98,99,"pl-s"],[103,104,"pl-s"],[341,342,"pl-s"],[342,343,"pl-c1"],[343,344,"pl-s"],[362,363,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,40,"pl-c1"],[40,41,"pl-s"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,44,"pl-c1"],[44,45,"pl-s"],[54,55,"pl-ml"],[256,257,"pl-s"],[257,258,"pl-c1"],[258,259,"pl-s"],[287,288,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,27,"pl-c1"],[27,28,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[113,114,"pl-s"],[114,130,"pl-c1"],[130,131,"pl-s"],[143,144,"pl-s"],[144,148,"pl-s"],[145,148,"pl-corl"],[148,149,"pl-s"],[149,150,"pl-s"],[150,217,"pl-corl"],[217,218,"pl-s"],[286,287,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[287,288,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,26,"pl-c1"],[26,27,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,44,"pl-c1"],[44,45,"pl-s"],[54,55,"pl-ml"],[109,111,"pl-s"],[118,120,"pl-s"],[127,128,"pl-s"],[128,144,"pl-c1"],[144,145,"pl-s"],[160,161,"pl-s"],[161,169,"pl-c1"],[169,170,"pl-s"],[282,283,"pl-s"],[283,284,"pl-c1"],[284,285,"pl-s"],[309,310,"pl-s"],[310,322,"pl-c1"],[322,323,"pl-s"],[354,355,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[52,53,"pl-s"],[54,55,"pl-ml"],[72,73,"pl-s"],[73,89,"pl-c1"],[89,90,"pl-s"],[92,93,"pl-s"],[93,105,"pl-c1"],[105,106,"pl-s"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,41,"pl-c1"],[41,42,"pl-s"],[54,55,"pl-ml"],[56,57,"pl-s"],[57,60,"pl-c1"],[60,61,"pl-s"],[65,66,"pl-s"],[66,69,"pl-c1"],[69,70,"pl-s"],[118,119,"pl-s"],[119,127,"pl-c1"],[127,128,"pl-s"],[132,133,"pl-s"],[133,143,"pl-c1"],[143,144,"pl-s"],[287,288,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[54,55,"pl-ml"],[65,66,"pl-s"],[66,82,"pl-c1"],[82,83,"pl-s"],[123,124,"pl-s"],[124,128,"pl-c1"],[128,129,"pl-s"],[132,133,"pl-s"],[133,158,"pl-c1"],[158,159,"pl-s"],[200,201,"pl-s"],[201,207,"pl-c1"],[207,208,"pl-s"],[211,212,"pl-s"],[212,218,"pl-c1"],[218,219,"pl-s"],[319,320,"pl-s"],[325,326,"pl-s"],[432,433,"pl-s"],[433,438,"pl-c1"],[438,439,"pl-s"],[459,461,"pl-s"],[465,467,"pl-s"],[549,550,"pl-s"],[550,553,"pl-c1"],[553,554,"pl-s"],[622,623,"pl-s"],[623,627,"pl-c1"],[627,628,"pl-s"],[630,631,"pl-s"],[631,635,"pl-s"],[632,635,"pl-corl"],[635,636,"pl-s"],[636,637,"pl-s"],[637,704,"pl-corl"],[704,705,"pl-s"],[708,709,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,43,"pl-c1"],[43,44,"pl-s"],[54,55,"pl-ml"],[105,106,"pl-s"],[106,115,"pl-c1"],[115,116,"pl-s"],[123,124,"pl-s"],[124,138,"pl-c1"],[138,139,"pl-s"],[190,194,"pl-s"],[191,194,"pl-corl"],[203,204,"pl-s"],[204,215,"pl-c1"],[215,216,"pl-s"],[241,242,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[176,177,"pl-s"],[177,181,"pl-c1"],[181,182,"pl-s"],[281,282,"pl-s"],[282,305,"pl-c1"],[305,306,"pl-s"],[321,322,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[37,38,"pl-ml"],[39,40,"pl-s"],[40,46,"pl-c1"],[46,47,"pl-s"],[54,55,"pl-ml"],[135,136,"pl-s"],[136,156,"pl-c1"],[156,157,"pl-s"],[173,174,"pl-s"],[174,193,"pl-c1"],[193,194,"pl-s"],[229,233,"pl-s"],[230,233,"pl-corl"],[241,242,"pl-s"],[242,246,"pl-s"],[243,246,"pl-corl"],[246,247,"pl-s"],[247,248,"pl-s"],[248,315,"pl-corl"],[315,316,"pl-s"],[366,368,"pl-s"],[373,375,"pl-s"],[440,441,"pl-s"],[441,450,"pl-c1"],[450,451,"pl-s"],[452,453,"pl-s"],[453,463,"pl-c1"],[463,464,"pl-s"],[494,495,"pl-s"],[495,504,"pl-c1"],[504,505,"pl-s"],[508,509,"pl-s"],[509,519,"pl-c1"],[519,520,"pl-s"],[563,564,"pl-s"],[583,584,"pl-s"],[584,585,"pl-s"],[585,632,"pl-corl"],[632,633,"pl-s"],[664,665,"pl-s"],[665,669,"pl-s"],[666,669,"pl-corl"],[669,670,"pl-s"],[670,671,"pl-s"],[671,738,"pl-corl"],[738,739,"pl-s"],[742,743,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-ml"],[41,42,"pl-s"],[42,48,"pl-c1"],[48,49,"pl-s"],[54,55,"pl-ml"],[90,92,"pl-s"],[131,133,"pl-s"],[152,153,"pl-s"],[153,157,"pl-s"],[154,157,"pl-corl"],[157,158,"pl-s"],[158,159,"pl-s"],[159,226,"pl-corl"],[226,227,"pl-s"],[348,349,"pl-s"],[349,358,"pl-c1"],[358,359,"pl-s"],[372,373,"pl-s"],[373,379,"pl-c1"],[379,380,"pl-s"],[514,515,"pl-s"],[515,516,"pl-c1"],[516,517,"pl-s"],[554,556,"pl-s"],[561,563,"pl-s"],[643,644,"pl-s"],[644,660,"pl-c1"],[660,661,"pl-s"],[674,675,"pl-s"],[675,679,"pl-s"],[676,679,"pl-corl"],[679,680,"pl-s"],[680,681,"pl-s"],[681,748,"pl-corl"],[748,749,"pl-s"],[989,990,"pl-s"],[990,1006,"pl-c1"],[1006,1007,"pl-s"],[1016,1017,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,38,"pl-c1"],[38,39,"pl-s"],[40,41,"pl-ml"],[42,43,"pl-s"],[43,44,"pl-c1"],[44,45,"pl-s"],[55,56,"pl-ml"],[157,159,"pl-s"],[196,198,"pl-s"],[200,201,"pl-s"],[201,205,"pl-s"],[202,205,"pl-corl"],[205,206,"pl-s"],[206,207,"pl-s"],[207,274,"pl-corl"],[274,275,"pl-s"],[279,280,"pl-s"],[280,298,"pl-c1"],[298,299,"pl-s"],[330,331,"pl-s"],[331,343,"pl-c1"],[343,344,"pl-s"],[631,632,"pl-s"],[632,641,"pl-c1"],[641,642,"pl-s"],[678,679,"pl-s"],[679,680,"pl-c1"],[680,681,"pl-s"],[694,695,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,41,"pl-c1"],[41,42,"pl-s"],[54,55,"pl-ml"],[96,97,"pl-s"],[97,103,"pl-c1"],[103,104,"pl-s"],[108,109,"pl-s"],[109,119,"pl-c1"],[119,120,"pl-s"],[184,185,"pl-s"],[185,191,"pl-c1"],[191,192,"pl-s"],[356,357,"pl-s"],[357,361,"pl-s"],[358,361,"pl-corl"],[361,362,"pl-s"],[362,363,"pl-s"],[363,430,"pl-corl"],[430,431,"pl-s"],[477,478,"pl-s"],[478,489,"pl-c1"],[489,490,"pl-s"],[519,520,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-ml"],[45,46,"pl-s"],[46,49,"pl-c1"],[49,50,"pl-s"],[55,56,"pl-ml"],[104,105,"pl-s"],[105,114,"pl-c1"],[114,115,"pl-s"],[116,117,"pl-s"],[117,127,"pl-c1"],[127,128,"pl-s"],[171,172,"pl-s"],[172,191,"pl-c1"],[191,192,"pl-s"],[200,201,"pl-s"],[201,205,"pl-s"],[202,205,"pl-corl"],[205,206,"pl-s"],[206,207,"pl-s"],[207,274,"pl-corl"],[274,275,"pl-s"],[301,302,"pl-s"],[302,306,"pl-s"],[303,306,"pl-corl"],[306,307,"pl-s"],[307,308,"pl-s"],[308,375,"pl-corl"],[375,376,"pl-s"],[590,591,"pl-s"],[591,604,"pl-c1"],[604,605,"pl-s"],[640,641,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[140,141,"pl-s"],[141,156,"pl-c1"],[156,157,"pl-s"],[257,261,"pl-s"],[258,261,"pl-corl"],[264,265,"pl-s"],[265,279,"pl-c1"],[279,280,"pl-s"],[486,487,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[45,46,"pl-s"],[54,55,"pl-ml"],[56,58,"pl-s"],[76,80,"pl-s"],[77,80,"pl-corl"],[91,93,"pl-s"],[558,559,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-ml"],[37,38,"pl-s"],[38,39,"pl-c1"],[39,40,"pl-s"],[54,55,"pl-ml"],[60,61,"pl-s"],[61,73,"pl-c1"],[73,74,"pl-s"],[142,143,"pl-s"],[143,164,"pl-c1"],[164,165,"pl-s"],[210,212,"pl-s"],[216,218,"pl-s"],[251,252,"pl-s"],[252,273,"pl-c1"],[273,274,"pl-s"],[349,350,"pl-s"],[350,354,"pl-s"],[351,354,"pl-corl"],[354,355,"pl-s"],[355,356,"pl-s"],[356,423,"pl-corl"],[423,424,"pl-s"],[450,451,"pl-s"],[451,463,"pl-c1"],[463,464,"pl-s"],[512,513,"pl-s"],[513,521,"pl-c1"],[521,522,"pl-s"],[561,562,"pl-s"],[562,563,"pl-c1"],[563,564,"pl-s"],[639,640,"pl-ml"]],[],[[0,2,"pl-s"],[16,17,"pl-s"],[17,38,"pl-c1"],[38,39,"pl-s"],[42,43,"pl-s"],[43,48,"pl-c1"],[48,49,"pl-s"]],[[24,26,"pl-s"],[38,39,"pl-s"],[39,44,"pl-c1"],[44,45,"pl-s"],[75,76,"pl-s"],[76,93,"pl-c1"],[93,94,"pl-s"]],[],[[0,1,"pl-s"],[1,11,"pl-c1"],[11,12,"pl-s"]],[[0,1,"pl-s"],[1,22,"pl-c1"],[22,23,"pl-s"]],[[0,1,"pl-s"],[1,5,"pl-s"],[2,5,"pl-corl"],[5,6,"pl-s"],[6,7,"pl-s"],[7,74,"pl-corl"],[74,75,"pl-s"],[81,82,"pl-s"],[82,87,"pl-c1"],[87,88,"pl-s"]],[[72,74,"pl-s"]],[[62,64,"pl-s"],[72,73,"pl-s"],[73,78,"pl-c1"],[78,79,"pl-s"]],[[0,1,"pl-s"],[1,24,"pl-c1"],[24,25,"pl-s"]],[],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"],[14,15,"pl-s"],[15,29,"pl-c1"],[29,30,"pl-s"]],[[33,35,"pl-s"]],[],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"]],[],[],[],[],[[29,33,"pl-s"],[30,33,"pl-corl"],[62,63,"pl-s"],[63,68,"pl-c1"],[68,69,"pl-s"],[74,76,"pl-s"],[85,87,"pl-s"]],[[12,13,"pl-s"],[13,24,"pl-c1"],[24,25,"pl-s"],[70,71,"pl-s"],[71,78,"pl-c1"],[78,79,"pl-s"]],[[10,11,"pl-s"],[11,16,"pl-c1"],[16,17,"pl-s"],[18,19,"pl-s"],[19,33,"pl-c1"],[33,34,"pl-s"],[66,70,"pl-s"],[67,70,"pl-corl"]],[],[[23,24,"pl-s"],[24,32,"pl-c1"],[32,33,"pl-s"],[66,67,"pl-s"],[67,85,"pl-c1"],[85,86,"pl-s"]],[[37,38,"pl-s"],[38,50,"pl-c1"],[50,51,"pl-s"]],[[64,66,"pl-s"]],[[18,20,"pl-s"],[78,82,"pl-s"],[79,82,"pl-corl"]],[[30,31,"pl-s"],[31,41,"pl-c1"],[41,42,"pl-s"],[75,76,"pl-s"],[76,87,"pl-c1"],[87,88,"pl-s"]],[],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[0,1,"pl-s"],[25,26,"pl-s"],[26,27,"pl-s"],[27,51,"pl-corl"],[51,52,"pl-s"]],[[4,5,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,51,"pl-corl"],[51,52,"pl-s"]],[],[],[[0,32,"pl-mh"],[4,32,"pl-en"]],[],[[0,2,"pl-s"],[6,7,"pl-s"],[7,13,"pl-c1"],[13,14,"pl-s"],[26,28,"pl-s"],[58,59,"pl-s"],[59,68,"pl-c1"],[68,69,"pl-s"]],[],[],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[],[],[[1,2,"pl-s"],[2,5,"pl-s"],[3,5,"pl-corl"],[5,6,"pl-s"],[6,7,"pl-s"],[7,73,"pl-corl"],[73,74,"pl-s"]],[[0,1,"pl-s"],[1,5,"pl-s"],[2,5,"pl-corl"],[5,6,"pl-s"],[6,7,"pl-s"],[7,74,"pl-corl"],[74,75,"pl-s"]],[[17,18,"pl-s"],[18,28,"pl-c1"],[28,29,"pl-s"],[31,32,"pl-s"],[32,46,"pl-c1"],[46,47,"pl-s"],[49,50,"pl-s"],[50,68,"pl-c1"],[68,69,"pl-s"]],[[0,1,"pl-s"],[1,23,"pl-c1"],[23,24,"pl-s"],[26,27,"pl-s"],[27,49,"pl-c1"],[49,50,"pl-s"],[52,53,"pl-s"],[53,78,"pl-c1"],[78,79,"pl-s"]],[[0,1,"pl-s"],[1,29,"pl-c1"],[29,30,"pl-s"],[32,33,"pl-s"],[33,53,"pl-c1"],[53,54,"pl-s"],[56,57,"pl-s"],[57,85,"pl-c1"],[85,86,"pl-s"]],[[0,1,"pl-s"],[1,21,"pl-c1"],[21,22,"pl-s"]],[[0,1,"pl-s"],[1,18,"pl-c1"],[18,19,"pl-s"],[21,22,"pl-s"],[22,49,"pl-c1"],[49,50,"pl-s"]],[],[],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[58,59,"pl-s"],[59,76,"pl-c1"],[76,77,"pl-s"]],[[40,41,"pl-s"],[41,50,"pl-c1"],[50,51,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[],[],[[0,2,"pl-s"],[31,33,"pl-s"]],[[0,1,"pl-s"],[1,18,"pl-c1"],[18,19,"pl-s"],[47,48,"pl-s"],[48,59,"pl-c1"],[59,60,"pl-s"]],[],[[48,52,"pl-s"],[49,52,"pl-corl"]],[[12,13,"pl-s"],[13,24,"pl-c1"],[24,25,"pl-s"]],[],[[37,39,"pl-s"],[47,49,"pl-s"],[50,51,"pl-s"],[51,65,"pl-c1"],[65,66,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[],[[0,44,"pl-mh"],[4,44,"pl-en"],[39,43,"pl-s"],[40,43,"pl-corl"]],[],[[0,2,"pl-s"],[19,21,"pl-s"],[30,31,"pl-s"],[31,50,"pl-c1"],[50,51,"pl-s"]],[],[[43,44,"pl-s"],[44,47,"pl-c1"],[47,48,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[7,8,"pl-s"],[8,18,"pl-c1"],[18,19,"pl-s"]],[],[[29,30,"pl-s"],[30,34,"pl-c1"],[34,35,"pl-s"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[45,46,"pl-s"],[46,50,"pl-c1"],[50,51,"pl-s"],[53,54,"pl-s"],[54,60,"pl-c1"],[60,61,"pl-s"],[63,64,"pl-s"],[64,74,"pl-c1"],[74,75,"pl-s"],[77,78,"pl-s"],[78,84,"pl-c1"],[84,85,"pl-s"]],[[0,1,"pl-s"],[1,5,"pl-c1"],[5,6,"pl-s"],[8,9,"pl-s"],[9,12,"pl-c1"],[12,13,"pl-s"],[15,16,"pl-s"],[16,26,"pl-c1"],[26,27,"pl-s"],[29,30,"pl-s"],[30,41,"pl-c1"],[41,42,"pl-s"],[44,45,"pl-s"],[45,52,"pl-c1"],[52,53,"pl-s"],[55,56,"pl-s"],[56,63,"pl-c1"],[63,64,"pl-s"]],[[39,40,"pl-s"],[40,50,"pl-c1"],[50,51,"pl-s"]],[[0,1,"pl-s"],[1,41,"pl-c1"],[41,42,"pl-s"]],[],[[60,61,"pl-s"],[61,67,"pl-c1"],[67,68,"pl-s"]],[[44,45,"pl-s"],[45,56,"pl-c1"],[56,57,"pl-s"]],[],[[0,2,"pl-s"],[24,26,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[],[[1,2,"pl-s"],[2,15,"pl-c1"],[15,16,"pl-s"],[55,56,"pl-s"],[56,65,"pl-c1"],[65,66,"pl-s"],[73,74,"pl-s"],[74,84,"pl-c1"],[84,85,"pl-s"]],[[6,7,"pl-s"],[7,18,"pl-c1"],[18,19,"pl-s"],[54,56,"pl-s"]],[[66,67,"pl-s"],[67,72,"pl-c1"],[72,73,"pl-s"]],[[17,19,"pl-s"],[27,28,"pl-s"],[28,39,"pl-c1"],[39,40,"pl-s"],[63,64,"pl-s"],[64,73,"pl-c1"],[73,74,"pl-s"]],[[0,1,"pl-s"],[1,7,"pl-c1"],[7,8,"pl-s"],[21,22,"pl-s"],[22,48,"pl-c1"],[48,49,"pl-s"]],[],[[0,2,"pl-s"],[48,50,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[0,1,"pl-s"],[1,12,"pl-c1"],[12,13,"pl-s"],[15,16,"pl-s"],[16,26,"pl-c1"],[26,27,"pl-s"],[29,30,"pl-s"],[30,38,"pl-c1"],[38,39,"pl-s"],[60,61,"pl-s"],[61,74,"pl-c1"],[74,75,"pl-s"]],[[0,1,"pl-s"],[1,20,"pl-c1"],[20,21,"pl-s"]],[[1,2,"pl-s"],[2,6,"pl-s"],[3,6,"pl-corl"],[6,7,"pl-s"],[7,8,"pl-s"],[8,75,"pl-corl"],[75,76,"pl-s"]],[[10,12,"pl-s"],[85,86,"pl-s"],[86,91,"pl-c1"],[91,92,"pl-s"]],[[34,35,"pl-s"],[35,61,"pl-c1"],[61,62,"pl-s"],[62,64,"pl-s"],[70,71,"pl-s"],[71,77,"pl-c1"],[77,78,"pl-s"]],[],[],[[0,25,"pl-mh"],[4,25,"pl-en"]],[],[[34,35,"pl-s"],[35,46,"pl-c1"],[46,47,"pl-s"]],[],[[0,1,"pl-ml"],[21,22,"pl-ml"],[397,398,"pl-ml"]],[[0,1,"pl-ml"],[21,22,"pl-ml"],[397,398,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,18,"pl-c1"],[18,19,"pl-s"],[21,22,"pl-ml"],[37,38,"pl-s"],[38,49,"pl-c1"],[49,50,"pl-s"],[74,75,"pl-s"],[75,95,"pl-c1"],[95,96,"pl-s"],[173,174,"pl-s"],[174,179,"pl-c1"],[179,180,"pl-s"],[254,255,"pl-s"],[255,262,"pl-c1"],[262,263,"pl-s"],[346,347,"pl-s"],[347,353,"pl-c1"],[353,354,"pl-s"],[356,357,"pl-s"],[357,362,"pl-c1"],[362,363,"pl-s"],[365,366,"pl-s"],[366,373,"pl-c1"],[373,374,"pl-s"],[556,557,"pl-s"],[561,562,"pl-s"],[592,593,"pl-s"],[593,612,"pl-c1"],[612,613,"pl-s"],[635,636,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[21,22,"pl-ml"],[23,24,"pl-s"],[24,25,"pl-c1"],[25,26,"pl-s"],[70,71,"pl-s"],[71,72,"pl-c1"],[72,73,"pl-s"],[122,123,"pl-s"],[123,128,"pl-c1"],[128,129,"pl-s"],[151,153,"pl-s"],[156,158,"pl-s"],[159,160,"pl-s"],[160,165,"pl-c1"],[165,166,"pl-s"],[207,208,"pl-s"],[208,223,"pl-c1"],[223,224,"pl-s"],[321,322,"pl-s"],[322,323,"pl-c1"],[323,324,"pl-s"],[327,331,"pl-s"],[328,331,"pl-corl"],[633,634,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[21,22,"pl-ml"],[71,72,"pl-s"],[72,81,"pl-c1"],[81,82,"pl-s"],[98,99,"pl-s"],[99,104,"pl-c1"],[104,105,"pl-s"],[145,146,"pl-s"],[146,152,"pl-c1"],[152,153,"pl-s"],[274,276,"pl-s"],[276,277,"pl-s"],[277,288,"pl-c1"],[288,289,"pl-s"],[292,293,"pl-s"],[293,298,"pl-c1"],[298,299,"pl-s"],[322,324,"pl-s"],[493,494,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,26,"pl-c1"],[26,27,"pl-s"],[28,29,"pl-ml"],[209,210,"pl-s"],[210,214,"pl-c1"],[214,215,"pl-s"],[250,251,"pl-s"],[251,255,"pl-c1"],[255,256,"pl-s"],[397,399,"pl-s"],[399,400,"pl-s"],[400,411,"pl-c1"],[411,412,"pl-s"],[415,416,"pl-s"],[416,430,"pl-c1"],[430,431,"pl-s"],[454,456,"pl-s"],[487,488,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,38,"pl-c1"],[38,39,"pl-s"],[40,41,"pl-ml"],[58,59,"pl-s"],[59,68,"pl-c1"],[68,69,"pl-s"],[118,119,"pl-s"],[119,120,"pl-c1"],[120,121,"pl-s"],[197,198,"pl-s"],[204,205,"pl-s"],[262,263,"pl-s"],[263,267,"pl-s"],[264,267,"pl-corl"],[267,268,"pl-s"],[268,269,"pl-s"],[269,336,"pl-corl"],[336,337,"pl-s"],[344,345,"pl-s"],[345,346,"pl-c1"],[346,347,"pl-s"],[428,429,"pl-s"],[429,437,"pl-c1"],[437,438,"pl-s"],[507,508,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[37,38,"pl-ml"],[119,120,"pl-s"],[120,122,"pl-c1"],[122,123,"pl-s"],[262,263,"pl-s"],[263,285,"pl-c1"],[285,286,"pl-s"],[359,360,"pl-s"],[360,368,"pl-c1"],[368,369,"pl-s"],[394,395,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[25,26,"pl-ml"],[88,89,"pl-s"],[89,104,"pl-c1"],[104,105,"pl-s"],[120,121,"pl-s"],[121,125,"pl-c1"],[125,126,"pl-s"],[394,395,"pl-s"],[395,404,"pl-c1"],[404,405,"pl-s"],[407,408,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[25,26,"pl-ml"],[27,28,"pl-s"],[28,29,"pl-c1"],[29,30,"pl-s"],[179,180,"pl-s"],[180,184,"pl-s"],[181,184,"pl-corl"],[184,185,"pl-s"],[185,186,"pl-s"],[186,253,"pl-corl"],[253,254,"pl-s"],[257,259,"pl-s"],[297,299,"pl-s"],[301,302,"pl-s"],[302,317,"pl-c1"],[317,318,"pl-s"],[329,330,"pl-s"],[330,341,"pl-c1"],[341,342,"pl-s"],[417,418,"pl-s"],[418,422,"pl-s"],[419,422,"pl-corl"],[422,423,"pl-s"],[423,424,"pl-s"],[424,491,"pl-corl"],[491,492,"pl-s"],[493,494,"pl-s"],[494,498,"pl-s"],[495,498,"pl-corl"],[498,499,"pl-s"],[499,500,"pl-s"],[500,567,"pl-corl"],[567,568,"pl-s"],[569,570,"pl-s"],[570,574,"pl-s"],[571,574,"pl-corl"],[574,575,"pl-s"],[575,576,"pl-s"],[576,643,"pl-corl"],[643,644,"pl-s"],[707,708,"pl-s"],[733,734,"pl-s"],[734,735,"pl-s"],[735,789,"pl-corl"],[789,790,"pl-s"],[792,793,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,28,"pl-c1"],[28,29,"pl-s"],[30,31,"pl-ml"],[64,65,"pl-s"],[65,99,"pl-c1"],[99,100,"pl-s"],[102,103,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-ml"],[62,63,"pl-s"],[63,67,"pl-c1"],[67,68,"pl-s"],[70,71,"pl-s"],[100,102,"pl-s"],[107,109,"pl-s"],[124,125,"pl-s"],[125,133,"pl-c1"],[133,134,"pl-s"],[264,265,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[21,22,"pl-ml"],[44,45,"pl-s"],[45,51,"pl-c1"],[51,52,"pl-s"],[58,59,"pl-s"],[59,70,"pl-c1"],[70,71,"pl-s"],[74,75,"pl-s"],[75,83,"pl-c1"],[83,84,"pl-s"],[397,398,"pl-ml"]],[],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[33,34,"pl-ml"],[77,78,"pl-s"],[78,83,"pl-c1"],[83,84,"pl-s"],[272,273,"pl-s"],[273,279,"pl-c1"],[279,280,"pl-s"],[297,298,"pl-s"],[298,307,"pl-c1"],[307,308,"pl-s"],[346,347,"pl-s"],[347,373,"pl-c1"],[373,374,"pl-s"],[448,449,"pl-s"],[449,453,"pl-s"],[450,453,"pl-corl"],[453,454,"pl-s"],[454,455,"pl-s"],[455,522,"pl-corl"],[522,523,"pl-s"],[600,601,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[23,24,"pl-ml"],[45,46,"pl-s"],[46,51,"pl-c1"],[51,52,"pl-s"],[92,93,"pl-s"],[93,99,"pl-c1"],[99,100,"pl-s"],[130,131,"pl-s"],[131,152,"pl-c1"],[152,153,"pl-s"],[185,186,"pl-s"],[186,191,"pl-c1"],[191,192,"pl-s"],[298,299,"pl-s"],[299,304,"pl-c1"],[304,305,"pl-s"],[325,326,"pl-s"],[326,330,"pl-s"],[327,330,"pl-corl"],[330,331,"pl-s"],[331,332,"pl-s"],[332,399,"pl-corl"],[399,400,"pl-s"],[403,404,"pl-ml"]],[]],"colorizedLines":null}},"title":"claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember","appPayload":{},"meta":{"title":"claude-remember/docs/configuration.md at main · Digital-Process-Tools/claude-remember"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/Digital-Process-Tools/claude-remember" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/Digital-Process-Tools/claude-remember/tree/main" data-discover="true">claude-remember</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/Digital-Process-Tools/claude-remember/tree/main/docs" data-discover="true">docs</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">configuration.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/Digital-Process-Tools/claude-remember/commits/main/docs/configuration.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/Digital-Process-Tools/claude-remember/commits/main/docs/configuration.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="46.4 KB" style="--truncate-max-width:100%"><span>189 lines (171 loc) · 46.4 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/Digital-Process-Tools/claude-remember/tree/main" data-discover="true">claude-remember</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/Digital-Process-Tools/claude-remember/tree/main/docs" data-discover="true">docs</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">configuration.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="46.4 KB" style="--truncate-max-width:100%"><span>189 lines (171 loc) · 46.4 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/Digital-Process-Tools/claude-remember/raw/refs/heads/main/docs/configuration.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Configuration</h2><a id="user-content-configuration" class="anchor" aria-label="Permalink: Configuration" href="#configuration"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Config is resolved by deep-merging three layers (highest priority wins):</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Layer</th>
<th>Path</th>
<th>Scope</th>
</tr>
</thead>
<tbody>
<tr>
<td>Plugin bundled</td>
<td><code>&lt;plugin&gt;/config.json</code></td>
<td>Shipped defaults</td>
</tr>
<tr>
<td>User-global</td>
<td><code>~/.remember/config.json</code></td>
<td>All your projects</td>
</tr>
<tr>
<td>Per-project</td>
<td><code>&lt;REMEMBER_DIR&gt;/config.json</code></td>
<td>One project</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Put cross-project preferences (timezone, cooldowns) in <code>~/.remember/config.json</code>. Put project-specific overrides in <code>&lt;REMEMBER_DIR&gt;/config.json</code>. See <code>config.user.example.json</code> for a user-global template and <code>config.example.json</code> for all available keys.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Key</th>
<th>Default</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>data_dir</code></td>
<td><code>.remember</code></td>
<td>Where memory files are written. Relative paths resolve inside the project root (legacy default). Absolute paths or paths starting with <code>~</code> are expanded and treated as external — see <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md#external-storage-mode">External storage mode</a>.</td>
</tr>
<tr>
<td><code>cooldowns.save_seconds</code></td>
<td><code>120</code></td>
<td>Minimum seconds between saves</td>
</tr>
<tr>
<td><code>cooldowns.ndc_seconds</code></td>
<td><code>3600</code></td>
<td>Compression interval (hourly)</td>
</tr>
<tr>
<td><code>cooldowns.git_backup_seconds</code></td>
<td><code>900</code></td>
<td>Minimum seconds between auto-backup commits (no-op if <code>~/.remember/</code> is not a git repo)</td>
</tr>
<tr>
<td><code>git_backup.remote</code></td>
<td><em>(empty)</em></td>
<td>Remote to push memory backups to. Empty → bare <code>git push</code>, relying on the branch's upstream tracking (the standard <code>origin main</code> setup). Set this if you have multiple remotes or a non-standard tracking config.</td>
</tr>
<tr>
<td><code>git_backup.branch</code></td>
<td><em>(empty)</em></td>
<td>Branch to push to. Only used when <code>git_backup.remote</code> is set; empty pushes the current branch. The resolved remote/branch is logged on the first push.</td>
</tr>
<tr>
<td><code>git_backup.reject_notice_after</code></td>
<td><code>3</code></td>
<td>Consecutive <em>permanently rejected</em> pushes before the backup interrupts you with a <code>systemMessage</code> on the next prompt, on top of the log line. A rejection never clears itself, so this only postpones a true report — it cannot swallow one. Transient failures (offline, no credentials) never count toward it. <code>0</code> disables the interruption and leaves the log line.</td>
</tr>
<tr>
<td><code>git_backup.commit_notice_after</code></td>
<td><code>3</code></td>
<td>Consecutive <em>failed commits</em> before the backup interrupts you with a <code>systemMessage</code>, on top of the log line. A failed commit is worse than a failed push — the memory is recorded in no git history at all, not even locally — and every cause is durable (no <code>user.email</code>, a full disk, a stale index lock, a pre-commit hook on the backup repo), so this only postpones a true report. git's own error is always in the log line. <code>0</code> disables the interruption.</td>
</tr>
<tr>
<td><code>git_backup.no_remote_notice_after</code></td>
<td><code>10</code></td>
<td>Consecutive saves with <strong>no remote configured</strong> before the backup says so once — and only once for the lifetime of the store. Unlike every other counter here the condition may be entirely intentional: a local-only history is a legitimate choice, and a notice that repeated on every save would cost the others their meaning. <code>0</code> disables it.</td>
</tr>
<tr>
<td><code>git_backup.gpg_sign</code></td>
<td><code>false</code></td>
<td>Sign auto-backup commits. Default passes <code>--no-gpg-sign</code> so background commits never hang on a passphrase prompt. Set <code>true</code> only with non-interactive signing (e.g. a hardware key) to honour your global <code>commit.gpgSign</code>.</td>
</tr>
<tr>
<td><code>git_backup.allow_remote_change</code></td>
<td><code>false</code></td>
<td>One-shot opt-in to accept a changed push remote. The backup hook records the remote URL on first push and aborts every later push if it changed, since a swapped URL can mean a poisoned <code>config.json</code> pointing at someone else's host. Set <code>true</code> only when you are deliberately re-pointing at a new repo, then set it back. See <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/docs/git-backup-security.md"><code>docs/git-backup-security.md</code></a>.</td>
</tr>
<tr>
<td><code>git_restore.enabled</code></td>
<td><code>false</code></td>
<td><strong>Off by default.</strong> Fast-forward <code>~/.remember/</code> from the backup remote at session start, before memory is read into context — the read counterpart to git backup, for stores used from more than one machine (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/253" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/253/hovercard">#253</a>). Fast-forward only: a diverged store is refused and reported, never merged or rebased. The <code>git fetch</code> is detached and lands next session, so no network runs before your first prompt. See <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md#restoring-on-a-second-machine-off-by-default">Restoring on a second machine</a>.</td>
</tr>
<tr>
<td><code>git_restore.remote</code></td>
<td><em>(empty)</em></td>
<td>Remote to restore from. Empty → <code>git_restore.remote</code> falls back to <code>git_backup.remote</code>, then to <code>origin</code>. A store that pushes to one place and reads from another is almost always a mistake, so the default is to share the backup's setting. <strong>Treated as untrusted</strong> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/723" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/723/hovercard">#723</a>): <code>config.json</code> is git-tracked and is exactly what <code>git_restore</code>'s own fast-forward syncs FROM the remote, so this value can be attacker-controlled on a shared store. A leading <code>-</code>, or a value containing <code>:</code> or <code>/</code>, is rejected and the restore falls back to <code>origin</code> rather than passing it to <code>git fetch</code>.</td>
</tr>
<tr>
<td><code>git_restore.branch</code></td>
<td><em>(empty)</em></td>
<td>Branch to restore from. Empty → <code>git_backup.branch</code>, then the branch currently checked out. With a detached HEAD and this unset, the restore refuses rather than guessing. <strong>Treated as untrusted for the same reason as <code>git_restore.remote</code></strong> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/723" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/723/hovercard">#723</a>): a leading <code>-</code> is rejected rather than passed to <code>git fetch</code>. <code>git_backup.remote</code>/<code>git_backup.branch</code> get the identical treatment on the push side.</td>
</tr>
<tr>
<td><code>git_restore.fetch_timeout_seconds</code></td>
<td><code>20</code></td>
<td>How long the detached background fetch may run before it is killed. It never blocks your prompt either way; the bound exists so a hung transport cannot leave a git process alive indefinitely, and so a fetch that never came back is reported as such next session rather than passing for "up to date".</td>
</tr>
<tr>
<td><code>git_restore.diverged_notice_after</code></td>
<td><code>3</code></td>
<td>Consecutive session starts finding a <em>diverged</em> store before the restore interrupts you with a <code>systemMessage</code>, on top of the log line. A divergence never clears itself, so this only postpones a true report — it cannot swallow one. A failed or unreachable fetch never counts toward it. <code>0</code> disables the interruption and leaves the log line.</td>
</tr>
<tr>
<td><code>git_reconcile.enabled</code></td>
<td><code>false</code></td>
<td><strong>Off by default, and currently hard-disabled regardless of this setting</strong> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/969" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/969/hovercard">#969</a>): <code>hooks.d/after_save/60-git-reconcile.sh</code> reads this flag first, then exits immediately either way, after a fifth consecutive <code>destroys</code>-class finding on the hook (#932/#939/#946/#952/#966) left a residual TOCTOU window open. If this is <code>true</code>, the hook logs a <code>disabled pending #969</code> notice to <code>hook-errors.log</code> on every save -- which trips <code>/remember:doctor</code>'s Recent errors WARN for exactly the users who opted in. Setting this to <code>true</code> currently does nothing else until #969's real fix lands. The rest of this row describes the hook's intended behavior once that fix ships: an optional reconcile step for a store written from more than one machine (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/903" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/903/hovercard">#903</a>), in its own hook so <code>git_backup</code>'s commit-and-push-only promise (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/253" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/253/hovercard">#253</a>) and <code>git_restore</code>'s fast-forward-only promise both still hold with this off. When enabled: fetches, fast-forwards when purely behind, and when both ahead and behind (diverged) rebases local commits onto the remote tip and pushes, with one retry if the remote moves again between the fetch and the push. On a real conflict: aborts the rebase, changes nothing else, and reports the conflicting file names through a <code>git-reconcile-notice</code> -- surfaced the same way <code>git_restore</code>'s own diverged notice is, as a one-line <code>systemMessage</code> on your next prompt (<code>scripts/user-prompt-hook.sh</code>). Never resets, force-pushes or creates a merge commit. Declines while this slug's consolidation is rewriting <code>recent.md</code>/<code>archive.md</code> (shares consolidation's own lock) rather than risk a rebase mid-rewrite. NDC compression (<code>save-session.sh</code>'s background <code>now.md</code>-&gt;<code>today-*.md</code> summarizer) is the OTHER writer of <code>now.md</code>, and its own staleness guards used to be blind to a rebase/merge landing while they were mid-check (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/932" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/932/hovercard">#932</a>) -- reconcile cannot share <code>save-session.sh</code>'s own lock the way it shares consolidation's (that lock is held across the ENTIRE save, so checking it here would decline almost every save, not just the rare racing one), so instead every successful fast-forward/rebase bumps NDC's own generation marker, the same counter NDC already compares before/after its own commit, making NDC's existing guard also catch this hook as a writer.</td>
</tr>
<tr>
<td><code>git_reconcile.remote</code></td>
<td><em>(empty)</em></td>
<td>Remote to reconcile against. Empty → falls back to <code>git_backup.remote</code>, then the branch's own push target, then <code>origin</code>. <strong>Treated as untrusted for the same reason as <code>git_restore.remote</code></strong> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/723" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/723/hovercard">#723</a>): a leading <code>-</code>, or a value containing <code>:</code> or <code>/</code>, is rejected rather than passed to <code>git fetch</code>/<code>git push</code>.</td>
</tr>
<tr>
<td><code>git_reconcile.branch</code></td>
<td><em>(empty)</em></td>
<td>Branch to reconcile against. Empty → falls back to <code>git_backup.branch</code>, then the branch currently checked out. With a detached HEAD and this unset, reconcile refuses rather than guessing. <strong>Treated as untrusted for the same reason as <code>git_restore.branch</code>.</strong></td>
</tr>
<tr>
<td><code>hooks.dispatch_timeout_seconds</code></td>
<td><code>15</code></td>
<td>How long <strong>one</strong> <code>hooks.d/</code> listener may take before it is stopped, for the events the agent is waiting on: <code>after_post_tool</code>, <code>after_user_prompt</code>, <code>before_session_start</code>, <code>after_session_start</code>. Until <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/286" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/286/hovercard">#286</a> nothing bounded them, so a listener that blocked stalled the agent for as long as it blocked and logged nothing — nothing had failed. Claude Code kills a hook at 60s of its own accord, so a budget at or above that is the host killing the process with no report from the plugin. The shipped listeners take 0.17–0.58s here. Per hook, not per dispatch: one slow listener never spends the next one's allowance. <code>0</code> disables the bound.</td>
</tr>
<tr>
<td><code>hooks.dispatch_timeout_detached_seconds</code></td>
<td><code>120</code></td>
<td>The same budget for <code>before_save</code>, <code>after_save</code>, <code>before_consolidate</code> and <code>after_consolidate</code>, which are dispatched from <code>save-session.sh</code> / <code>run-consolidation.sh</code> — started with <code>nohup … &amp;</code>, so nobody is waiting on them. A listener doing real work there is doing it on its own time, and 15s would be a deadline no one is keeping. <code>0</code> disables the bound.</td>
</tr>
<tr>
<td><code>hooks.dispatch_kill_grace_seconds</code></td>
<td><code>5</code></td>
<td>Between <code>SIGTERM</code> and <code>SIGKILL</code>. bash runs an <code>EXIT</code> trap when it dies of an untrapped <code>SIGTERM</code> and does not on <code>SIGKILL</code>, and git removes its own <code>index.lock</code> on <code>SIGTERM</code> and cannot on <code>SIGKILL</code> — so this window is a listener's chance to release a lock or unwind a partial write. It is a courtesy, not a veto: one that traps <code>TERM</code> and keeps going is killed anyway.</td>
</tr>
<tr>
<td><code>thresholds.min_human_messages</code></td>
<td><code>3</code></td>
<td>Minimum human messages before saving. Keeps greetings and one-liners out of memory.</td>
</tr>
<tr>
<td><code>thresholds.min_exchanges_without_human</code></td>
<td><code>30</code></td>
<td>Save anyway when the span has at least this many exchanges, even if the human count is below <code>min_human_messages</code>. Without it, an agentic session (many tool calls, few human turns) never clears the gate and never saves at all. <code>0</code> disables the fallback.</td>
</tr>
<tr>
<td><code>thresholds.max_summary_failures</code></td>
<td><code>3</code></td>
<td>Consecutive summarization failures on the <em>same</em> span before it is dropped and the position advanced past it. Keeping the position is right for a transient error (the span retries next run), but a persistent failure would otherwise retry forever and no later span could ever be saved. <code>0</code> retries forever.</td>
</tr>
<tr>
<td><code>thresholds.delta_lines_trigger</code></td>
<td><code>50</code></td>
<td>Tool call output lines that trigger auto-save</td>
</tr>
<tr>
<td><code>thresholds.extract_max_bytes</code></td>
<td><code>300000</code></td>
<td>Max UTF-8 size of the session extract sent to Haiku. Larger extracts are truncated to their most-recent tail so a very long session can't overflow the model's context window and silently stall saves. <code>0</code> disables the cap.</td>
</tr>
<tr>
<td><code>thresholds.autonomous_log_retention_days</code></td>
<td><code>7</code></td>
<td>Age, in days, after which a <code>logs/autonomous/*.log</code> file is reclaimed regardless of content (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/487" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/487/hovercard">#487</a>). That directory's only prior retention was <code>-empty -delete</code>, which stopped covering <code>session-end-*.log</code> the moment <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/483" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/483/hovercard">#483</a> seeded it with a header before its subshell opens it — every one is non-empty by construction, so nothing ever reclaimed that class again. An empty file is still reclaimed immediately, on the same first pass; this age-keyed check runs right after it, over both file classes (<code>save-*.log</code> and <code>session-end-*.log</code> share the <code>*.log</code> glob) — one portable <code>stat</code>-based sweep now covers both, not two separate <code>find</code> calls. Runs on every ordinary flush, independent of <code>features.ndc_compression</code> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/498" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/498/hovercard">#498</a>) — this housekeeping used to live inside NDC's own gated block by accident of placement, so turning NDC compression off silently turned log retention off too, with this setting configured and doing nothing. <code>stat</code>, not <code>find -mtime</code>/<code>-empty</code> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/502" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/502/hovercard">#502</a>): <code>find</code> is the one command on this path with a real PATH-shadowing risk on Windows Git Bash.</td>
</tr>
<tr>
<td><code>features.ndc_compression</code></td>
<td><code>true</code></td>
<td>Enable hourly compression of daily files. Independent of <code>logs/autonomous/</code> retention (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/498" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/498/hovercard">#498</a>) — disabling this no longer disables that housekeeping too.</td>
</tr>
<tr>
<td><code>features.recovery</code></td>
<td><code>true</code></td>
<td>Recover missed saves on session start</td>
</tr>
<tr>
<td><code>features.plugin_promos</code></td>
<td><code>true</code></td>
<td>Cross-plugin promo at <code>SessionStart</code> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/574" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/574/hovercard">#574</a>): a <code>systemMessage</code> naming one sibling Digital-Process-Tools plugin you have not installed, checked against <code>~/.claude/plugins/installed_plugins.json</code>. Since <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/657" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/657/hovercard">#657</a> the same rotation also carries a one-time star ask, gated on <code>recent.md</code> being a non-empty file rather than on install status -- it waits until a full day of your sessions has actually been consolidated before ever asking. <code>false</code> turns the whole feature off entirely, and every entry's line both identifies itself (<code>claude-remember:</code>) and names this key inline, so it is attributable and actionable at the moment it fires (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/631" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/631/hovercard">#631</a>). Copy lives in <code>promos.json</code> beside <code>config.example.json</code>, not in the hook; prefix, text, URL and the inline hint together must fit 170 characters or the entry is skipped and logged. See <a href="/Digital-Process-Tools/claude-remember/blob/main/README.md#from-the-same-workshop">From the same workshop</a>.</td>
</tr>
<tr>
<td><code>cooldowns.promo_seconds</code></td>
<td><code>604800</code></td>
<td>Minimum seconds between plugin promos, persisted per <strong>machine</strong> under <code>~/.remember/tmp/</code> regardless of <code>data_dir</code> — the throttle describes what this machine has already been shown, not one project's store. Default is 7 days. <code>0</code> shows a promo on every <code>SessionStart</code> that has a candidate to show.</td>
</tr>
<tr>
<td><code>timezone</code></td>
<td><em>(system local)</em></td>
<td>IANA name (e.g. <code>America/New_York</code>, <code>Europe/Paris</code>) for timestamps and daily file boundaries. Omit or leave empty to use the system clock's local zone. Set this explicitly on a VPS whose system clock is UTC.</td>
</tr>
<tr>
<td><code>time_format</code></td>
<td><code>24h</code></td>
<td><code>24h</code> or <code>12h</code> — controls timestamp format in log files (e.g. <code>14:30:00</code> vs <code>2:30:00 PM</code>)</td>
</tr>
<tr>
<td><code>prompt_stamp</code></td>
<td><code>full</code></td>
<td>What the <code>UserPromptSubmit</code> hook injects into the model's context. <code>full</code> — <code>[14:30 CEST — jack — 45%]</code>, unchanged from every previous release. <code>stable</code> — <code>[jack]</code> only: the clock and the context percentage both change between turns, and the percentage climbs on <em>every</em> prompt for anyone running the status line, so dropping only the clock would leave the line volatile. The <code>&gt;= 95</code> context warning is <strong>kept</strong>, because it is threshold-gated and changes bytes only when it changes behaviour. <code>off</code> — nothing at all, warning included. An unrecognised value reads as <code>full</code> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/301" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/301/hovercard">#301</a>).</td>
</tr>
<tr>
<td><code>model</code></td>
<td><code>haiku</code></td>
<td>Model used for the summarization / consolidation <code>claude -p</code> call. <code>REMEMBER_MODEL</code> overrides it. Documented as an env var only until #176, though <code>config.json</code> is the source of truth.</td>
</tr>
<tr>
<td><code>reject_pattern</code></td>
<td><em>(empty)</em></td>
<td>Overrides the reject-gate regex that keeps model refusals out of the memory layer. Empty → the narrow built-in default; <code>none</code> → gate off; anything else → a case-insensitive regex. An invalid regex falls back to the default. <code>REMEMBER_REJECT_PATTERN</code> overrides it.</td>
</tr>
<tr>
<td><code>handoff_mode</code></td>
<td><code>single</code></td>
<td><strong>Off by default.</strong> <code>single</code> — every interactive session shares one <code>remember.md</code>, byte-identical to every previous release. <code>per_session</code> — the handoff becomes <code>remember.&lt;session_id&gt;.md</code>, so two sessions sharing one project store (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/56" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/56/hovercard">#56</a>) each write and read their own note instead of the second silently overwriting the first (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/363" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/363/hovercard">#363</a>). History, <code>recent.md</code>, <code>archive.md</code> and consolidation are unaffected either way — only the single handoff slot is namespaced. If no usable <code>session_id</code> reaches the hook, <code>per_session</code> falls back to the shared file — the hint still points at it, since that path is still correct — but a visible line says the fallback happened, so it does not read as isolation that never applied. No pruning ships with this key: stale <code>remember.&lt;session_id&gt;.md</code> files accumulate until removed by hand.</td>
</tr>
<tr>
<td><code>thresholds.consolidate_max_bytes</code></td>
<td><code>600000</code></td>
<td>Max UTF-8 size of the staging content sent to the consolidation model. Read by <code>run-consolidation.sh</code>; documented in <code>config.example.json</code> but missing from this table until #176. Since <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/346" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/346/hovercard">#346</a> the same number also caps what consolidation may <strong>write</strong>: a response larger than this is refused rather than copied over <code>recent.md</code>/<code>archive.md</code>. It is measured on staging + <code>recent.md</code> + <code>archive.md</code> together, and a store already over it now <a href="/Digital-Process-Tools/claude-remember/blob/main/README.md#a-store-over-the-consolidation-cap">rotates its way out</a> rather than skipping forever (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/348" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/348/hovercard">#348</a>).</td>
</tr>
<tr>
<td><code>thresholds.memory_inject_max_bytes</code></td>
<td><code>200000</code></td>
<td>A memory file larger than this is <strong>named with its size instead of injected</strong> at session start (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/346" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/346/hovercard">#346</a>). It stays on disk and stays greppable; what stops is pouring it into a context window that cannot hold it — a multi-GB <code>recent.md</code> froze every <code>claude</code> launch in the reporter's project. A healthy memory file is kilobytes, so this only ever fires on a store that is already broken. Set <code>0</code> to disable. When this is configured <strong>below</strong> the bundled default, the over-cap notice says "capped by config" and drops the <code>/remember:doctor</code> suggestion (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/842" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/842/hovercard">#842</a>) — a deliberately lowered cap is not evidence of a broken store. That holds only for files the lowered cap alone explains: a file larger than the bundled 200000 default is malformed whatever the cap, and keeps the original warning and the <code>/remember:doctor</code> advice.</td>
</tr>
<tr>
<td><code>thresholds.session_start_max_bytes</code></td>
<td><code>9000</code></td>
<td>Total byte budget for the whole SessionStart body (handoff + the <code>=== REMEMBER ===</code> legend + the <code>=== MEMORY ===</code> section), counted in <strong>bytes, not characters</strong> — see <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/842" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/842/hovercard">#842</a> for why bytes are the conservative choice under Claude Code's own character-based preview cap. <code>memory_inject_max_bytes</code> above caps one file at a time and has no notion of a TOTAL: six individually-healthy files can still sum past Claude Code's own persist-to-file threshold (observed around 10,000 characters), at which point the model sees only a short preview and never the <code>=== MEMORY ===</code> section at all. Filled in priority order handoff → now.md → recent.md → today-*.md → archive.md; whatever does not fit is <strong>listed by name and size</strong>, never silently dropped, the same convention <code>source=compact</code> already uses for its own deferred files. Does not apply at <code>source=compact</code>, which already minimizes its own output a different way. Set <code>0</code> to disable.</td>
</tr>
<tr>
<td><code>thresholds.handoff_max_redeliveries</code></td>
<td><code>3</code></td>
<td>Once the same (unchanged) handoff content has been delivered this many times, a further delivery is <strong>listed by path instead of re-injected</strong> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/842" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/842/hovercard">#842</a>) — <code>remember.delivered</code> already tracks the count (see <code>handoff_mode</code> above), but until this it only ever changed the "already delivered N times" banner text, re-injecting the full, unchanged body on every single start regardless. The delivery record still advances past the cap, so a later redelivery still reports how long the note has been pending, and <code>/remember</code> still replaces it immediately. Set <code>0</code> to disable.</td>
</tr>
<tr>
<td><code>thresholds.staging_warn_bytes</code></td>
<td><code>2000000</code></td>
<td>Byte threshold for a one-time WARNING when a <code>today-*.md</code> staging file grows past it (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/349" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/349/hovercard">#349</a>). <code>staging_append()</code> is append-only by design — only a successful consolidation round retires one of these files — so sustained lock contention, a full disk, or a stalled consolidation round (a misconfigured <code>features.ndc_compression</code>, or the <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/346" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/346/hovercard">#346</a> skip-forever state) leaves the same kind of span landing there every round, forever, with nothing to notice. This does <strong>not</strong> cap or truncate anything — the append is unchanged either way — it only logs once, via the same <code>report_error()</code> path that reaches <code>hook-errors.log</code> and is surfaced by <code>/remember:doctor</code>'s existing "Recent errors" section. Set <code>0</code> to disable. On a store whose <code>logs/</code> cannot be created (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/361" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/361/hovercard">#361</a>/<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/372" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/372/hovercard">#372</a>), <code>log.sh</code> never gets to read this key at all; the same <code>report_error()</code> path logs once, separately, whenever a <code>REMEMBER_CONFIG</code> exists but went unparsed for that reason — the <code>2000000</code> used below it may not be the configured value (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/399" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/399/hovercard">#399</a>).</td>
</tr>
<tr>
<td><code>thresholds.ndc_timeout_seconds</code></td>
<td><code>180</code></td>
<td>Wall-clock budget (seconds) for the NDC <code>now.md</code> -&gt; <code>today-*.md</code> compression call. Output length scales with input length, so a <code>now.md</code> large enough to need longer than this timed out on every run, was left untouched, and grew further each round — a one-way ratchet that never recovered on its own (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/788" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/788/hovercard">#788</a>). Raise this if the daily log shows repeated <code>[ndc] ERROR</code> lines mentioning a timeout.</td>
</tr>
<tr>
<td><code>thresholds.consolidate_timeout_seconds</code></td>
<td><code>180</code></td>
<td>Wall-clock budget (seconds) for the staging -&gt; <code>recent.md</code>/<code>archive.md</code> consolidation call. The same fix shape as <code>ndc_timeout_seconds</code> above (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/806" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/806/hovercard">#806</a>, reopening the intent of <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/788" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/788/hovercard">#788</a>): output length scales with input length, so a large enough staging batch can time out on every run, be left uncompressed, and grow further every round with no recovery. Raise this if the daily log shows repeated <code>consolidation</code> ERROR lines mentioning a timeout.</td>
</tr>
<tr>
<td><code>debug</code></td>
<td><em>(unset)</em></td>
<td>Verbose logging for cooldowns and locks. Unset, each script keeps its own default — <code>save-session.sh</code> is verbose, the git-backup hook is quiet — which is what they did before this option was wired up (#176). <code>REMEMBER_DEBUG</code> overrides it.</td>
</tr>
<tr>
<td><code>haiku.oauth_token</code></td>
<td><em>(empty)</em></td>
<td><strong>Removed entirely (#860, round 4).</strong> Never read for authentication, on any host -- this plugin has no recovery-token path of its own at all, on Claude Code or Codex; a nested call that cannot authenticate simply runs unauthenticated, and refreshing your coding agent's own CLI login is the fix. A still-configured value here is not read for anything, is not detected, and is not logged anywhere -- there is nothing to migrate it to; remove it whenever convenient, but leaving it in place is harmless.</td>
</tr>
<tr>
<td><code>session_start_slow_threshold_s</code></td>
<td><code>5</code></td>
<td>The <code>SessionStart</code> hook's own wall-clock duration is always written to the daily log (<code>session-start took Ns</code>); at or above this many whole seconds it is <strong>also</strong> printed into the session, under <code>=== SESSION-START ===</code>, so a slow host is visible without going looking for the daily log first (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/706" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/706/hovercard">#706</a>). Measured with bash 5's <code>EPOCHSECONDS</code> builtin (no added fork) or, on older bash, one <code>date +%s</code> at each end — never per log line. Set <code>0</code> to surface every start; there is no key that silences the daily-log line.</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>A per-project <code>.remember/config.json</code>'s <code>haiku</code> block is never read, in the default
(legacy) storage layout.</strong> Keys under <code>haiku</code> have been security-relevant (<code>haiku.oauth_token</code>
chose the credential the nested summarizer authenticated with). In the default layout
<code>.remember/</code> sits inside the project checkout, so a repository you clone can ship a
<code>.remember/config.json</code> of its own -- and before
<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/726" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/726/hovercard">#726</a>, its <code>haiku</code>
block was trusted exactly like one you wrote yourself. It no longer is, <strong>regardless of
whether that file is tracked by the repository's own git index</strong> -- set <code>haiku</code> keys in
<code>~/.remember/config.json</code> (user-global), never in a project's own config file, if you
want them honoured.</p>
<p dir="auto"><strong><code>model</code> and <code>reject_pattern</code> from that same per-project config are stripped too, but
only when the file is git-TRACKED</strong> -- committed by the repository, not merely sitting
in the default layout
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/757" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/757/hovercard">#757</a>). Unlike
the <code>haiku</code> block, neither can redirect where a transcript goes -- only which model
is billed for every save, or whether the refusal gate runs at all (<code>reject_pattern: "none"</code> turns it off outright; any other value is a regex run over model output, an
attacker-controlled ReDoS surface) -- severe enough to strip from a file the repository
itself committed, not severe enough to break every single-user project's own untracked
per-project override the way #726 already accepted paying for <code>haiku</code>. An <strong>untracked</strong>
per-project <code>config.json</code> -- the ordinary case, written by you, never <code>git add</code>ed --
still has <code>model</code>/<code>reject_pattern</code> take effect, exactly as before #757.</p>
<p dir="auto">External storage mode (<code>data_dir</code> absolute or home-relative, e.g. <code>~/.remember/{slug}</code>)
is unaffected by any of the above -- <code>REMEMBER_DIR</code> there is the operator's own
directory, never one a clone ships, so its config stays trusted <strong>once it is genuinely
the operator's own</strong>. Nothing is moved into that mode automatically any more (#898):
if you move an old in-project <code>.remember/</code> there by hand, leave behind any <code>config.json</code>
your repository tracks in git, or it becomes trusted config
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/757" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/757/hovercard">#757</a>; see
<a href="/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md">external-storage-mode.md</a>).
See <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/git-backup-security.md">git-backup-security.md</a> for the wider "a cloned project's
config is untrusted input" note.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">The summarizer's environment</h3><a id="user-content-the-summarizers-environment" class="anchor" aria-label="Permalink: The summarizer's environment" href="#the-summarizers-environment"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>The <code>claude</code> summarizer.</strong> The summarizer runs a nested <code>claude -p</code> that inherits your
environment, including your Claude Code login, exactly like any process a hook starts, and
remember itself reads no credential
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/898" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/898/hovercard">#898</a>). Only the
parent Claude Code session's own variables are removed for the length of that call, so it
does not pass as that session
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/95" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/95/hovercard">#95</a>,
<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/204" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/204/hovercard">#204</a>), and put
back afterwards: <code>CLAUDECODE</code>, <code>CLAUDE_JOB_DIR</code>, <code>CLAUDE_PROJECT_DIR</code>,
<code>CLAUDE_CODE_SESSION_ID</code>, <code>CLAUDE_CODE_ENTRYPOINT</code>, <code>CLAUDE_CODE_CHILD_SESSION</code>,
<code>CLAUDE_CODE_SESSION_ATTENDED</code>, <code>CLAUDE_CODE_EXECPATH</code>, <code>CLAUDE_CODE_MESSAGING_SOCKET</code>,
<code>CLAUDE_CODE_SSE_PORT</code> -- the reason for each is a comment beside the code in
<code>pipeline/haiku.py</code>. <code>CLAUDE_CODE_MESSAGING_TOKEN</code>, the handshake paired with the messaging
socket, is not on the list and reaches the nested call: with the socket removed, the nested
call has no channel to present it on. Your login credential is never on that list
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/131" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/131/hovercard">#131</a>); provider
settings such as Bedrock selection are not either, so they reach the nested call
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/316" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/316/hovercard">#316</a>). To keep any
other variable away from the summarizer -- for example an <code>ANTHROPIC_API_KEY</code> set for some
unrelated tool that would out-rank your <code>claude.ai</code> login there
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/703" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/703/hovercard">#703</a>) -- unset it
in the environment you start Claude Code from.</p>
<p dir="auto"><strong>The list is code, not config.</strong> Each name is written out literally in
<code>pipeline/haiku.py</code> and cannot be changed from <code>config.json</code>. If a future Claude Code
release adds a session variable, it reaches the summarizer until a plugin release adds it
to the list. (Two earlier development rounds of #898 read this list, and the Codex one
below, from <code>config.json</code>; a release-candidate scan reports reading the environment by a
name taken from config as "an environment variable named at run time", so both lists went
back into code with the same names.) <strong>Removed:</strong> <code>haiku.drop_env</code>
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/898" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/898/hovercard">#898</a>).</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">The Codex summarizer's allow-list (#724)</h3><a id="user-content-the-codex-summarizers-allow-list-724" class="anchor" aria-label="Permalink: The Codex summarizer's allow-list (#724)" href="#the-codex-summarizers-allow-list-724"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>What it protects.</strong> Codex's <code>--sandbox read-only</code> denies writes and network, but it
still runs whatever command the model asks for -- and a transcript can carry an
instruction that gets the model to ask for <code>env</code>
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/724" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/724/hovercard">#724</a>). So the
nested <code>codex exec</code> process is not given your environment: it is given only these
variables, and nothing else -- no Anthropic key, no cloud credential, no unrelated secret
your shell happens to carry: <code>PATH</code>, <code>HOME</code>, <code>LANG</code>, <code>LC_ALL</code>, <code>CODEX_HOME</code>, <code>TMPDIR</code>,
<code>TEMP</code>, <code>TMP</code>, <code>SYSTEMROOT</code>, <code>USERPROFILE</code>, <code>APPDATA</code>, <code>PATHEXT</code> -- what the Codex CLI
needs to run and find its own login in <code>CODEX_HOME</code>. (Separately,
<code>-c shell_environment_policy.inherit=none</code> gives a command Codex spawns no environment
at all; the allow-list bounds what Codex's own process can see.) An allow-list fails
closed: a variable nobody thought about stays out. Like the <code>claude</code> list above, it is
code, not config: it cannot be changed from <code>config.json</code>.</p>
<p dir="auto"><strong>No credential is on it</strong>
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/898" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/898/hovercard">#898</a>). That is
narrower than earlier releases, which also passed Codex's own API-key variable
(<code>CODEX_API_KEY</code>) through. If Codex finds its login in <code>auth.json</code> under <code>CODEX_HOME</code>
(what <code>codex login</code> writes), nothing changes for you. <strong>If you authenticate Codex only
through an environment variable, it is not passed through and the <code>codex</code> summarizer
starts without it</strong> -- run <code>codex login</code> so the login lives in <code>auth.json</code>, or use the
<code>claude</code> summarizer (<code>REMEMBER_SUMMARIZER=claude</code>).</p>
<p dir="auto"><strong>No proxy or CA-bundle variable is on it either</strong>
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/898" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/898/hovercard">#898</a>).
<code>HTTPS_PROXY</code>, <code>HTTP_PROXY</code>, <code>NO_PROXY</code> (in either casing), <code>SSL_CERT_FILE</code> and
<code>NODE_EXTRA_CA_CERTS</code> used to be passed through
(<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/751" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/751/hovercard">#751</a>); they are not
any more. <strong>If you reach the network only through a proxy or a custom CA bundle, the <code>codex</code>
summarizer cannot reach it -- set <code>REMEMBER_SUMMARIZER=claude</code></strong>: the <code>claude</code> summarizer
inherits your whole environment, proxy variables included.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Environment variables</h3><a id="user-content-environment-variables" class="anchor" aria-label="Permalink: Environment variables" href="#environment-variables"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">A few runtime overrides aren't in <code>config.json</code> because they're per-shell rather than per-project.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Env var</th>
<th>Effect</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>REMEMBER_BRANCH</code></td>
<td>Overrides the <code>| &lt;branch&gt;</code> identity field in each <code>## HH:MM | &lt;branch&gt;</code> memory header. Useful when your coding agent runs from a non-git directory (<code>$HOME</code>, a scratch dir) — without it the header falls back to the literal string <code>unknown</code>, which collapses the identity slot for every entry. Set to a meaningful tag (e.g. <code>laptop</code>, <code>cloud</code>, <code>staging</code>, an instance name) in your shell rc. It is process environment, read once at save time — one value per launched session, so it cannot distinguish several concurrent sessions of the <em>same</em> project from each other; see <code>REMEMBER_BRANCH_CMD</code> below for that case.</td>
</tr>
<tr>
<td><code>REMEMBER_BRANCH_CMD</code></td>
<td>Path to an executable, invoked as <code>$REMEMBER_BRANCH_CMD "$SESSION_ID"</code>, whose stdout becomes the identity slot. Checked after <code>REMEMBER_BRANCH</code> and before the <code>git branch --show-current</code> fallback; a non-zero exit or empty stdout falls through to that fallback and logs a WARNING naming the configured command and the session — a resolver that is merely unconfigured stays silent, one that is configured and failing does not. This is the answer for <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/481" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/481/hovercard">#481</a>: several coding agent sessions running at once in one project all share <code>$PROJECT_DIR</code>, so the git-branch fallback (and a <code>REMEMBER_BRANCH</code> set once at launch) resolve to the same value for every one of them — <code>$SESSION_ID</code> is the value already in scope that differs per session. What a session id should map to is site-specific (a local registry of named sessions, <code>${SESSION_ID:0:8}</code>, ...), so this is a hook rather than a new built-in default. <strong>save-session.sh runs under bash, including on Windows via Git Bash</strong> — this is exec'd directly (no shell reparsing), so give it a forward-slash or PATH-resolvable path (<code>/c/tools/resolve-identity</code>, not <code>C:\tools\resolve-identity.exe</code>) the way you would for any other bash argv. <code>$SESSION_ID</code> itself is validated before this ever runs — hex digits and hyphens, anchored to a hex digit at position 1, so it can never reach your resolver's <code>argv[1]</code> looking like a flag (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/500" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/500/hovercard">#500</a>). The stdout your resolver prints is expected to be a single line with no embedded newline or carriage return: it is substituted verbatim into the summarizer prompt, so a multi-line or CR-bearing result is refused rather than used unbounded — logged the same WARNING-and-fall-through as a non-zero exit or empty stdout (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/501" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/501/hovercard">#501</a>).</td>
</tr>
<tr>
<td><code>REMEMBER_DEBUG</code></td>
<td><code>1</code> emits verbose hook/cooldown lines to logs; <code>0</code> silences them. Highest precedence: it beats the <code>debug</code> config option. Unset <strong>and</strong> <code>debug</code> unset, the defaults differ per script — <code>save-session.sh</code> verbose, the git-backup hook quiet — which this table used to paper over with a single "default <code>1</code>" (#176).</td>
</tr>
<tr>
<td><code>REMEMBER_MODEL</code></td>
<td>Model used for summarization/consolidation (the <code>claude -p</code> call). Default <code>haiku</code>. Point it at a more capable tier (e.g. <code>sonnet</code>) to improve salience and compression-cap compliance — the call is backgrounded, so there's no interactive-latency cost. <strong><code>config.json</code> → <code>model</code> is the source of truth</strong> (per-project); this env var overrides it. Blank falls back to the default.</td>
</tr>
<tr>
<td><code>REMEMBER_REJECT_PATTERN</code></td>
<td>Overrides the reject-gate regex that keeps model refusals/clarifications out of the memory layer. Blank → the narrow built-in default (anchored refusal/clarification stems only); <code>none</code> → gate disabled (only the literal <code>SKIP</code> contract applies); anything else → a custom case-insensitive regex. An invalid regex falls back to the default rather than failing the run. <strong><code>config.json</code> → <code>reject_pattern</code> is the source of truth</strong>; this env var overrides it.</td>
</tr>
<tr>
<td><code>REMEMBER_OAUTH_TOKEN</code></td>
<td><strong>Removed entirely (#860, round 3), on every host.</strong> No longer read for authentication at all, and there is no replacement for it any more -- this plugin has no recovery-token path of its own, on Claude Code or Codex, for either the direct call or Codex's own fallthrough to the shared <code>claude -p</code> code path (<code>REMEMBER_SUMMARIZER_FALLBACK=claude</code>). A nested call that cannot authenticate simply runs unauthenticated; refresh your coding agent's own CLI login instead (<code>claude setup-token</code> if you have not already). A still-set value is detected by <strong>presence only</strong> and logged once per save as a <code>NOTICE:</code> line naming this var (never its content), surfaced by <code>/remember:doctor</code>'s "Legacy recovery-token config" section, on either host -- there is nothing left to migrate it to; remove it. This fallback had no automated test even before removal — see <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/docs/verification.md"><code>docs/verification.md</code></a> for the historical manual procedure (describes code that no longer exists; kept only as a record of what was once tested by hand). <strong>If you use git backup, this key must not live in any <code>config.json</code> that ends up committed.</strong> A per-project <code>&lt;slug&gt;/config.json</code> is never staged or committed by the backup hook regardless (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/719" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/719/hovercard">#719</a>), but this env var is still the safer place for it, and it is the only safe place for the user-global <code>~/.remember/config.json</code>, which <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/external-storage-mode.md">external-storage-mode.md</a> does have you commit deliberately. See <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/git-backup-security.md"><code>docs/git-backup-security.md</code></a>.</td>
</tr>
<tr>
<td><code>REMEMBER_MAX_CONCURRENT_SUMMARIZERS</code></td>
<td>How many nested <code>claude -p</code> summarizers may run at once, host-wide. Default <code>4</code>. This is the depth bound too: a summarizer that re-entered the plugin runs <em>inside</em> its parent's call, so recursion appears as concurrency (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/204" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/204/hovercard">#204</a>). Not <code>1</code> on purpose — several projects saving at the same time is normal. When it fires, <code>DECLINED</code> appears in the daily log and the span is summarized on a later run.</td>
</tr>
<tr>
<td><code>REMEMBER_MAX_SUMMARIZERS_PER_MIN</code></td>
<td>How many summarizers may be spawned in any 60-second window, host-wide. Default <code>12</code>. Covers the shape concurrency cannot see: a chain where each save spawns the next and no two ever overlap. A store saves at most once per <code>cooldowns.save_seconds</code>, so the default leaves room for roughly two dozen active projects. Same <code>DECLINED</code> log line when it fires.</td>
</tr>
<tr>
<td><code>REMEMBER_RUNTIME_DIR</code></td>
<td>Where spawn records for the two caps above are kept. Default <code>~/.remember/run</code>. Derived from <code>HOME</code> alone so a child process that inherited no plugin environment still finds it — that is the point of the bound. Set it only to relocate the runtime state (a read-only home, a test harness); if it is unusable the caps stop applying and the daily log says the spawn was <code>UNBOUNDED</code>.</td>
</tr>
<tr>
<td><code>REMEMBER_LOCK_TIMING</code></td>
<td><code>1</code> records how long each lock is held and how long each acquire waited, so a timeout default can be set from a distribution instead of from intuition (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/226" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/226/hovercard">#226</a>). <strong>Off by default and deliberately opt-in</strong>: <code>save-session.sh</code> runs on a <code>PostToolUse</code> hook, where an extra spawn per lock use is paid on every machine forever (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/227" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/227/hovercard">#227</a>/<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/230" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/230/hovercard">#230</a>/<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/204" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/204/hovercard">#204</a>). Off, it costs one string comparison and writes nothing. See <a href="/Digital-Process-Tools/claude-remember/blob/main/docs/measuring-lock-hold-times.md#measuring-lock-hold-times">Measuring lock hold times</a>.</td>
</tr>
<tr>
<td><code>REMEMBER_LOCK_TIMING_FILE</code></td>
<td>Where those records go. Default <code>$REMEMBER_DIR/logs/lock-timing.tsv</code>.</td>
</tr>
<tr>
<td><code>REMEMBER_LOCK_TIMING_MAX</code></td>
<td>Line cap on that file. Default <code>5000</code> (~350KB). At the cap recording <strong>stops</strong> and appends a <code># CAPPED</code> line — it does not roll, because a rolled file silently drops the oldest records and the tail is the part a timeout is set from.</td>
</tr>
<tr>
<td><code>REMEMBER_TZ</code></td>
<td>Set automatically by <code>log.sh</code> from <code>config.json</code> → <code>timezone</code>. Don't set this manually unless you're debugging.</td>
</tr>
<tr>
<td><code>REMEMBER_SUMMARIZER</code></td>
<td>Which summarizer provider to use: <code>claude</code> (always <code>claude -p</code>, the historical behaviour), <code>codex</code> (always <code>codex exec</code>), or <code>auto</code> (the default) — <code>auto</code> reads the transcript the host actually wrote (<code>REMEMBER_TRANSCRIPT_PATH</code>, sniffed by <code>pipeline.extract.sniff_file_envelope()</code>) and follows it: <code>codex</code> for a Codex transcript, <code>claude</code> for a Claude Code transcript, an Antigravity transcript (no native summarizer exists for it, so this logs a warning and falls back to <code>claude</code>, <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/567" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/567/hovercard">#567</a>), no transcript, or one this plugin does not recognise. A Claude Code session's own resolution is unchanged by this: it was already <code>claude</code>, and <code>auto</code> still answers <code>claude</code> for it. <code>auto</code> no longer asks the environment for a Codex signature (<code>CODEX_SESSION_ID</code>/<code>CODEX_THREAD_ID</code>) — those never reach the process that actually runs the summariser, only a Codex <em>tool shell</em> (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/465" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/465/hovercard">#465</a>). An unrecognised value is reported and treated as unset (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/460" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/460/hovercard">#460</a>).</td>
</tr>
<tr>
<td><code>REMEMBER_SUMMARIZER_FALLBACK</code></td>
<td>Opt-in for what happens when the resolved <code>codex</code> route cannot produce a result (binary missing, non-zero exit, empty output, timeout). Unset → raises loudly ("could not summarize") rather than silently retrying against Anthropic's API. <code>claude</code> → falls back to <code>claude -p</code> for that one call, exactly as though <code>REMEMBER_SUMMARIZER=claude</code> had been set, and it is logged every time it fires because it reproduces <a href="https://github.com/Digital-Process-Tools/claude-remember/issues/460" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/460/hovercard">#460</a>'s own billing complaint on purpose, only because the operator asked for it.</td>
</tr>
<tr>
<td><code>REMEMBER_CODEX_BIN</code></td>
<td>Overrides where the <code>codex</code> executable is resolved from, mirroring <code>claude</code>'s own resolution: unset uses <code>shutil.which("codex")</code>, falling back to the bare name <code>codex</code> (so a spawn failure reports what was actually tried) when PATH resolves nothing. Only consulted when the <code>codex</code> route is selected (<a href="https://github.com/Digital-Process-Tools/claude-remember/issues/460" data-hovercard-type="issue" data-hovercard-url="/Digital-Process-Tools/claude-remember/issues/460/hovercard">#460</a>).</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

