{"repo":"NousResearch/hermes-agent","public_id":"130554","display_label":"Bundle venv state and first-run onboarding setup","summary":"These items address a desktop bundle issue where no pre-seeded venv state causes a slow full rebuild on first plugin enable, plus a first-run setup chat for onboarding. Two related but distinct themes: venv initialization and initial user setup flow.","subsystem":"apps/desktop","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":134209,"merged_at":"2026-10-07T23:17:16+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-10-07T23:17:16+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":130554,"pr_number":134209,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-10-07T23:17:16+00:00"}],"members":[{"kind":"issue","number":130554,"title":"Desktop bundle: first plugin enable rebuilds the whole venv (~2 min) because the bundle ships no venv fact","url":null,"state":"closed"},{"kind":"pr","number":130557,"title":"fix(bundle): seed shipped venv state","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"bc2e4d3773","number":0},{"kind":"commit","value":"b16c598c5d","number":0},{"kind":"commit","value":"fc1c8bc25a","number":0},{"kind":"pr","value":"#134209","number":134209},{"kind":"pr","value":"#130554","number":130554}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":134209,"title":"feat(onboarding): first-run setup chat","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/AGENTS.md","agent/agent_init.py","agent/conversation_loop.py","agent/error_classifier.py","agent/first_task_prompt.py","agent/initiate_setup_facts.py","agent/initiate_setup_prompt.py","agent/inline_tool_executors.py","agent/interrupt_control.py","agent/message_sanitization.py","agent/nous_rate_guard.py","agent/onboarding.py","agent/skill_commands.py","agent/tool_dispatch_helpers.py","agent/turn_context.py","agent/turn_facade.py","agent/turn_scripted_prelude.py","agent/turn_tool_validation.py","apps/desktop/BUILDING.md","apps/desktop/electron/chat-onboarding-window.ts","apps/desktop/electron/main.ts","apps/desktop/electron/preload.ts","apps/desktop/electron/profile-migration.ts","apps/desktop/electron/window-focus-policy.ts","apps/desktop/electron/window-growth.test.ts","apps/desktop/electron/window-growth.ts","apps/desktop/electron/window-size-types.ts","apps/desktop/electron/window-state.ts","apps/desktop/src/api/mcp.ts","apps/desktop/src/app/chat/built-in-tour.ts","apps/desktop/src/app/chat/chat-surface-state.ts","apps/desktop/src/app/chat/composer/hooks/use-composer-submit.ts","apps/desktop/src/app/chat/composer/hooks/use-middleware-submit.ts","apps/desktop/src/app/chat/composer/index.tsx","apps/desktop/src/app/chat/composer/local-setup-card.test.tsx","apps/desktop/src/app/chat/composer/local-setup-card.tsx","apps/desktop/src/app/chat/composer/model-pill.tsx","apps/desktop/src/app/chat/index.tsx","apps/desktop/src/app/chat/use-chat-bar-state.ts","apps/desktop/src/app/command-palette/index.tsx","apps/desktop/src/app/contrib/controller.tsx","apps/desktop/src/app/contrib/handoff-leg.ts","apps/desktop/src/app/contrib/handoff-receipt.ts","apps/desktop/src/app/contrib/hooks/desktop-onboarding-metrics.test.ts","apps/desktop/src/app/contrib/hooks/desktop-onboarding-metrics.ts","apps/desktop/src/app/contrib/layout-presets.ts","apps/desktop/src/app/contrib/onboarding-handoff.ts","apps/desktop/src/app/contrib/onboarding-kickoff-machine.ts","apps/desktop/src/app/contrib/onboarding-kickoff.ts","apps/desktop/src/app/contrib/surfaces.tsx","apps/desktop/src/app/contrib/wiring-effects.ts","apps/desktop/src/app/contrib/wiring.tsx","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/message-stream.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/server-requests.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/tools.ts","apps/desktop/src/app/session/hooks/use-prompt-actions/slash.ts","apps/desktop/src/app/session/hooks/use-session-actions/branch-create-key.ts","apps/desktop/src/app/session/hooks/use-session-actions/index.ts","apps/desktop/src/app/session/hooks/use-session-actions/restore-pending-clarify.ts","apps/desktop/src/app/session/hooks/use-session-actions/transcript-provenance.ts","apps/desktop/src/app/settings/config-settings.tsx","apps/desktop/src/app/settings/developer-settings.tsx","apps/desktop/src/app/settings/local-models-settings.tsx","apps/desktop/src/app/shell/hooks/use-status-snapshot.ts","apps/desktop/src/app/shell/local-setup-menu-row.tsx","apps/desktop/src/app/shell/model-catalog-menu.tsx","apps/desktop/src/app/shell/model-menu-panel.tsx","apps/desktop/src/app/shell/terms-butterbar.tsx","apps/desktop/src/components/assistant-ui/ask-directive.tsx","apps/desktop/src/components/assistant-ui/clarify/core/confirm-bar.tsx","apps/desktop/src/components/assistant-ui/clarify/core/use-clarify-keys-handlers.ts","apps/desktop/src/components/assistant-ui/clarify/core/use-clarify-keys.ts","apps/desktop/src/components/assistant-ui/clarify/index.tsx","apps/desktop/src/components/assistant-ui/clarify/parse.ts","apps/desktop/src/components/assistant-ui/clarify/pending.tsx","apps/desktop/src/components/assistant-ui/clarify/settled.tsx","apps/desktop/src/components/assistant-ui/clarify/setup-pending-parts.tsx","apps/desktop/src/components/assistant-ui/clarify/setup-pending.test.tsx","apps/desktop/src/components/assistant-ui/clarify/setup-pending.tsx","apps/desktop/src/components/assistant-ui/clarify/setup-pickers.tsx","apps/desktop/src/components/assistant-ui/clarify/setup-rows.ts","apps/desktop/src/components/assistant-ui/clarify/setup-settled.tsx","apps/desktop/src/components/assistant-ui/markdown-text.tsx","apps/desktop/src/components/assistant-ui/start-chat-tool-parts.tsx","apps/desktop/src/components/assistant-ui/start-chat-tool.tsx","apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx","apps/desktop/src/components/assistant-ui/thread/index.tsx","apps/desktop/src/components/assistant-ui/thread/message-parts.tsx","apps/desktop/src/components/assistant-ui/thread/setup-learned.tsx","apps/desktop/src/components/assistant-ui/thread/status.tsx","apps/desktop/src/components/assistant-ui/thread/turn-activity.ts","apps/desktop/src/components/assistant-ui/thread/user-message.tsx","apps/desktop/src/components/assistant-ui/tool/fallback-model/index.ts","apps/desktop/src/components/free-tier/sign-in-dialog.test.tsx","apps/desktop/src/components/free-tier/sign-in-dialog.tsx","apps/desktop/src/components/gateway-connecting-overlay.tsx","apps/desktop/src/components/model-picker.tsx","apps/desktop/src/components/notifications.tsx","apps/desktop/src/components/onboarding-chat/assembly.ts","apps/desktop/src/components/onboarding-chat/cards/build.tsx","apps/desktop/src/components/onboarding-chat/cards/frame.tsx","apps/desktop/src/components/onboarding-chat/cards/setup.tsx","apps/desktop/src/components/onboarding-chat/directive.tsx","apps/desktop/src/components/onboarding-chat/first-build.ts","apps/desktop/src/components/onboarding-chat/gate.test.tsx","apps/desktop/src/components/onboarding-chat/gate.tsx","apps/desktop/src/components/onboarding-chat/guide-loading.css","apps/desktop/src/components/onboarding-chat/guide-loading.tsx","apps/desktop/src/components/onboarding-chat/intro-copy.css","apps/desktop/src/components/onboarding-chat/intro-copy.tsx","apps/desktop/src/components/onboarding-chat/intro.test.ts","apps/desktop/src/components/onboarding-chat/intro.ts","apps/desktop/src/components/onboarding-chat/options.tsx","apps/desktop/src/components/onboarding-chat/persisted-handoff.ts","apps/desktop/src/components/onboarding-chat/setup-profile.ts","apps/desktop/src/components/onboarding-chat/setup-session.ts","apps/desktop/src/components/onboarding-chat/signpost.ts","apps/desktop/src/components/onboarding-chat/skip.tsx","apps/desktop/src/components/pane-shell/tree/presets.ts","apps/desktop/src/components/pane-shell/tree/renderer/narrow-overlays.tsx","apps/desktop/src/components/shared-metrics/consent-dialog.tsx","apps/desktop/src/components/tips/local-runtime-update-offer.ts","apps/desktop/src/components/tips/local-setup-offer.test.ts","apps/desktop/src/components/tips/local-setup-offer.ts","apps/desktop/src/components/tips/tutorial-lifetime.test.tsx","apps/desktop/src/components/tips/use-tip-rotation.test.tsx","apps/desktop/src/components/tips/use-tip-rotation.ts","apps/desktop/src/global.d.ts","apps/desktop/src/hooks/use-mobile.ts","apps/desktop/src/i18n/ar.ts","apps/desktop/src/i18n/ar_assistant.ts","apps/desktop/src/i18n/ar_boot.ts","apps/desktop/src/i18n/ar_chat.ts","apps/desktop/src/i18n/ar_chrome.ts","apps/desktop/src/i18n/ar_command_center.ts","apps/desktop/src/i18n/ar_common.ts","apps/desktop/src/i18n/ar_settings.ts","apps/desktop/src/i18n/de.ts","apps/desktop/src/i18n/de_model_menu.ts","apps/desktop/src/i18n/de_notices.ts","apps/desktop/src/i18n/de_onboarding.ts","apps/desktop/src/i18n/de_shared_metrics.ts","apps/desktop/src/i18n/en.ts","apps/desktop/src/i18n/en_app_tour.ts","apps/desktop/src/i18n/en_model_menu.ts","apps/desktop/src/i18n/en_notices.ts","apps/desktop/src/i18n/en_onboarding.ts","apps/desktop/src/i18n/en_shared_metrics.ts","apps/desktop/src/i18n/es.ts","apps/desktop/src/i18n/es_model_menu.ts","apps/desktop/src/i18n/es_notices.ts","apps/desktop/src/i18n/es_onboarding.ts","apps/desktop/src/i18n/es_shared_metrics.ts","apps/desktop/src/i18n/fr.ts","apps/desktop/src/i18n/fr_model_menu.ts","apps/desktop/src/i18n/fr_notices.ts","apps/desktop/src/i18n/fr_onboarding.ts","apps/desktop/src/i18n/fr_shared_metrics.ts","apps/desktop/src/i18n/ja.ts","apps/desktop/src/i18n/ja_model_menu.ts","apps/desktop/src/i18n/ja_notices.ts","apps/desktop/src/i18n/ja_onboarding.ts","apps/desktop/src/i18n/ja_shared_metrics.ts","apps/desktop/src/i18n/overlay-completeness.test.ts","apps/desktop/src/i18n/overlay-gaps.json","apps/desktop/src/i18n/ru.ts","apps/desktop/src/i18n/ru_model_menu.ts","apps/desktop/src/i18n/ru_notices.ts","apps/desktop/src/i18n/ru_onboarding.ts","apps/desktop/src/i18n/ru_shared_metrics.ts","apps/desktop/src/i18n/types.ts","apps/desktop/src/i18n/types_app_tour.ts","apps/desktop/src/i18n/types_model_menu.ts","apps/desktop/src/i18n/types_notices.ts","apps/desktop/src/i18n/types_onboarding.ts","apps/desktop/src/i18n/types_shared_metrics.ts","apps/desktop/src/i18n/zh-hant.ts","apps/desktop/src/i18n/zh-hant_assistant.ts","apps/desktop/src/i18n/zh-hant_boot.ts","apps/desktop/src/i18n/zh-hant_chat.ts","apps/desktop/src/i18n/zh-hant_chrome.ts","apps/desktop/src/i18n/zh-hant_command_center.ts","apps/desktop/src/i18n/zh-hant_settings.ts","apps/desktop/src/i18n/zh.ts","apps/desktop/src/i18n/zh_model_menu.ts","apps/desktop/src/i18n/zh_notices.ts","apps/desktop/src/i18n/zh_onboarding.ts","apps/desktop/src/i18n/zh_shared_metrics.ts","apps/desktop/src/lib/chat-messages/index.ts","apps/desktop/src/lib/chat-messages/parts.ts","apps/desktop/src/lib/chat-messages/tool-parts.ts","apps/desktop/src/lib/desktop-slash-registry.json","apps/desktop/src/lib/keybinds/composer-focus-keys.ts","apps/desktop/src/lib/layout-persistence.ts","apps/desktop/src/lib/onboarding-recommendations.ts","apps/desktop/src/lib/tips/local-cta.test.ts","apps/desktop/src/lib/tips/local-cta.ts","apps/desktop/src/lib/tool-render-class.ts","apps/desktop/src/lib/tool-result-metadata.ts","apps/desktop/src/lib/transcript-directives.ts","apps/desktop/src/store/clarify.test.ts","apps/desktop/src/store/clarify.ts","apps/desktop/src/store/connector-catalog.ts","apps/desktop/src/store/desktop-metrics.ts","apps/desktop/src/store/free-tier-offer.test.ts","apps/desktop/src/store/free-tier-sign-in.ts","apps/desktop/src/store/free-tier.ts","apps/desktop/src/store/local-runtime-jobs.ts","apps/desktop/src/store/local-setup-offer.ts","apps/desktop/src/store/machine.ts","apps/desktop/src/store/onboarding-answers.ts","apps/desktop/src/store/onboarding-capabilities.ts","apps/desktop/src/store/onboarding-gate.ts","apps/desktop/src/store/onboarding-intro.ts","apps/desktop/src/store/onboarding-plugin-outcomes.ts","apps/desktop/src/store/onboarding-plugins.ts","apps/desktop/src/store/onboarding-presence.ts","apps/desktop/src/store/onboarding-script.ts","apps/desktop/src/store/onboarding.ts","apps/desktop/src/store/start-chat.test.ts","apps/desktop/src/store/start-chat.ts","apps/desktop/src/store/tips.ts","apps/desktop/src/store/windows.ts","apps/desktop/src/styles.css","apps/desktop/src/types/hermes.ts","apps/shared/src/gateway-contract.generated.ts","apps/shared/src/gateway-contract.openrpc.json","apps/shared/src/skill-scaffold.ts","gateway/run_inbound.py","gateway/run_turn.py","gateway/slash_commands.py","hermes_cli/anon_auth.py","hermes_cli/cli_chat_turn_mixin.py","hermes_cli/commands.py","hermes_cli/commands_platforms.py","hermes_cli/config_defaults.py","hermes_cli/free_tier_offer.py","hermes_cli/mcp_app_detection.py","hermes_cli/mcp_catalog.py","hermes_cli/observability/schemas/hermes.shared_metrics.v3.schema.json","hermes_cli/observability/schemas/hermes.shared_metrics.v4.schema.json","hermes_cli/observability/shared_metrics_contract.py","hermes_cli/plugin_validate.py","hermes_cli/plugins_cmd.py","hermes_cli/plugins_cmd_catalog.py","hermes_cli/plugins_cmd_install.py","hermes_cli/profile_distribution.py","hermes_cli/profiles.py","hermes_cli/setup_profile.py","hermes_cli/web_routers/mcp.py","hermes_cli/web_routers/profiles.py","hermes_state.py","hermes_state_tool_retries.py","locales/_keys.desktop.json","locales/af.yaml","locales/ar.yaml","locales/de.yaml","locales/en.yaml","locales/es.yaml","locales/fr.yaml","locales/ga.yaml","locales/hu.yaml","locales/it.yaml","locales/ja.yaml","locales/ko.yaml","locales/pt.yaml","locales/ru.yaml","locales/tr.yaml","locales/uk.yaml","locales/zh-hant.yaml","locales/zh.yaml","optional-skills/productivity/first-task/SKILL.md","optional-skills/productivity/initiate-setup/SKILL.md","optional-skills/productivity/initiate-setup/templates/handoff.md","pm/_uv.py","pm/_venv_entry.py","pm/environments.py","pm/packages.py","pm/recovery.py","run_agent.py","scripts/bundles/desktop_inputs.py","scripts/bundles/native.py","tests/agent/test_error_classifier.py","tests/agent/test_free_tier_rate_limit_class.py","tests/agent/test_message_sanitization_policy.py","tests/agent/test_onboarding.py","tests/agent/test_turn_user_intervened.py","tests/agent/test_welcome_tier_recovery.py","tests/fixtures/resolution_allowlist.json","tests/hermes_cli/test_anon_auth_core.py","tests/hermes_cli/test_cli_first_message.py","tests/hermes_cli/test_free_tier_offer.py","tests/hermes_cli/test_mcp_app_detection.py","tests/hermes_cli/test_mcp_catalog_discovery.py","tests/hermes_cli/test_plugin_validate.py","tests/hermes_cli/test_setup_profile_answers.py","tests/hermes_cli/test_setup_profile_owner.py","tests/hermes_cli/test_setup_profile_returning_user.py","tests/hermes_cli/test_shared_metrics_model.py","tests/pm/test_uv_python.py","tests/pm/test_venv_command.py","tests/scripts/test_bundle_native.py","tests/tools/test_setup_choose_name_card.py","tests/tui_gateway/test_auto_continue.py","tests/tui_gateway/test_first_contact_onboarding.py","tests/tui_gateway/test_free_tier_rpc.py","tests/tui_gateway/test_free_tier_task_done.py","tools/AGENTS.md","tools/delegate_tool_toolsets.py","tools/setup_choose_tool.py","tools/start_chat_tool.py","toolsets.py","tui_gateway/agent_callbacks.py","tui_gateway/contracts/config_free_tier_control.py","tui_gateway/contracts/profiles_vault_complete_foreign_subagents.py","tui_gateway/contracts/server_requests.py","tui_gateway/contracts/sessions.py","tui_gateway/free_tier_task_done.py","tui_gateway/methods_free_tier.py","tui_gateway/methods_onboarding.py","tui_gateway/methods_profiles.py","tui_gateway/methods_session_interrupt.py","tui_gateway/methods_start_chat.py","tui_gateway/methods_tools.py","tui_gateway/onboarding_personalization.py","tui_gateway/prompt_turn.py","tui_gateway/server.py","tui_gateway/session_auto_continue.py","tui_gateway/session_history.py","tui_gateway/start_chat.py","website/docs/developer-guide/onboarding-recommendations.md","website/docs/developer-guide/relay-shared-metrics.md","website/docs/reference/optional-skills-catalog.md","website/docs/reference/slash-commands.md","website/docs/reference/tools-reference.md","website/docs/reference/toolsets-reference.md","website/docs/user-guide/configuration.md","website/docs/user-guide/desktop.md","website/docs/user-guide/features/delegation.md","website/docs/user-guide/features/mcp.md","website/docs/user-guide/skills/optional/productivity/productivity-first-task.md","website/docs/user-guide/skills/optional/productivity/productivity-initiate-setup.md","website/sidebars.ts"]}],"trust":{"default_tier":"verified","includes_suggested":false}}