@sunshinelife83/hearth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +323 -0
- package/bin/hearth-agentd.js +4 -0
- package/bin/hearth.js +4 -0
- package/bin/run-entrypoint.js +20 -0
- package/dist/agent-tools.js +738 -0
- package/dist/app-version.js +16 -0
- package/dist/apply-patch.js +402 -0
- package/dist/artifact-error.js +8 -0
- package/dist/artifact-tools.js +377 -0
- package/dist/cli-workspace.js +36 -0
- package/dist/cli.js +1086 -0
- package/dist/config-migration.js +82 -0
- package/dist/config-schema.js +136 -0
- package/dist/config.js +115 -0
- package/dist/context/context-tools.js +150 -0
- package/dist/context/repo-map.js +102 -0
- package/dist/dashboard/app.js +226 -0
- package/dist/dashboard/index.html +45 -0
- package/dist/dashboard/landing.html +57 -0
- package/dist/dashboard/styles.css +23 -0
- package/dist/dashboard.js +271 -0
- package/dist/db/client.js +29 -0
- package/dist/db/migrations.js +262 -0
- package/dist/db/schema.js +85 -0
- package/dist/device-tokens.js +61 -0
- package/dist/git-worktrees.js +134 -0
- package/dist/git.js +41 -0
- package/dist/incoming-artifacts.js +378 -0
- package/dist/local-agent-acp.js +768 -0
- package/dist/local-agent-adapters.js +20 -0
- package/dist/local-agent-availability.js +92 -0
- package/dist/local-agent-catalog.js +51 -0
- package/dist/local-agent-claude.js +334 -0
- package/dist/local-agent-client.js +519 -0
- package/dist/local-agent-codex.js +532 -0
- package/dist/local-agent-config.js +34 -0
- package/dist/local-agent-daemon-lifecycle.js +195 -0
- package/dist/local-agent-daemon-main.js +86 -0
- package/dist/local-agent-daemon-protocol.js +302 -0
- package/dist/local-agent-daemon.js +407 -0
- package/dist/local-agent-errors.js +378 -0
- package/dist/local-agent-grok.js +202 -0
- package/dist/local-agent-manager.js +715 -0
- package/dist/local-agent-opencode.js +463 -0
- package/dist/local-agent-path.js +24 -0
- package/dist/local-agent-pi-sandbox.js +472 -0
- package/dist/local-agent-pi.js +298 -0
- package/dist/local-agent-presentation.js +104 -0
- package/dist/local-agent-profiles.js +127 -0
- package/dist/local-agent-runtime-pool.js +481 -0
- package/dist/local-agent-runtime.js +1 -0
- package/dist/local-agent-store.js +193 -0
- package/dist/local-agent-targets.js +97 -0
- package/dist/logger.js +97 -0
- package/dist/machine-id.js +35 -0
- package/dist/mcp-modern-server.js +65 -0
- package/dist/oauth-provider.js +331 -0
- package/dist/oauth-store.js +144 -0
- package/dist/onboarding.js +35 -0
- package/dist/orchestration/brief.js +70 -0
- package/dist/orchestration/lanes.js +145 -0
- package/dist/orchestration/result.js +46 -0
- package/dist/orchestration/scope.js +61 -0
- package/dist/pi-tools.js +58 -0
- package/dist/policy/command-policy.js +104 -0
- package/dist/policy/env-allowlist.js +96 -0
- package/dist/policy/sandbox.js +68 -0
- package/dist/policy/workspace-profiles.js +47 -0
- package/dist/process-journal.js +116 -0
- package/dist/process-platform.js +49 -0
- package/dist/process-sessions.js +388 -0
- package/dist/rate-limit.js +77 -0
- package/dist/request-meta.js +9 -0
- package/dist/review-checkpoints.js +349 -0
- package/dist/roots.js +37 -0
- package/dist/server-shutdown.js +12 -0
- package/dist/server.js +980 -0
- package/dist/skills.js +84 -0
- package/dist/snapshot-manager.js +123 -0
- package/dist/stdio-server.js +80 -0
- package/dist/task-store.js +203 -0
- package/dist/task-tools.js +455 -0
- package/dist/tool-surfaces/claude.js +220 -0
- package/dist/tool-surfaces/codex.js +255 -0
- package/dist/tool-surfaces/index.js +15 -0
- package/dist/tool-surfaces/shared.js +228 -0
- package/dist/tool-surfaces/types.js +27 -0
- package/dist/ui/.vite/manifest.json +2544 -0
- package/dist/ui/assets/abap-CLvhMVsD.js +1 -0
- package/dist/ui/assets/actionscript-3--17pq3dv.js +1 -0
- package/dist/ui/assets/ada-C5qYipkI.js +1 -0
- package/dist/ui/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/ui/assets/angular-html-DrbO3_Xe.js +1 -0
- package/dist/ui/assets/angular-ts-CmTVzHJx.js +1 -0
- package/dist/ui/assets/apache-U0d_L8uA.js +1 -0
- package/dist/ui/assets/apex-CGTLDQj6.js +1 -0
- package/dist/ui/assets/apl-BOpCpqXf.js +1 -0
- package/dist/ui/assets/applescript-CCn79oCD.js +1 -0
- package/dist/ui/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/ui/assets/asciidoc-DE70LPWp.js +1 -0
- package/dist/ui/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/ui/assets/astro-CxPeBwei.js +1 -0
- package/dist/ui/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/ui/assets/awk-BWXHIvNe.js +1 -0
- package/dist/ui/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/ui/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/ui/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/ui/assets/bat-Bo4NYOV-.js +1 -0
- package/dist/ui/assets/beancount-D-usSTwE.js +1 -0
- package/dist/ui/assets/berry-DKpUyyne.js +1 -0
- package/dist/ui/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/ui/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/ui/assets/bird2-C2hNVINV.js +1 -0
- package/dist/ui/assets/blade-DtsAAG4P.js +1 -0
- package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
- package/dist/ui/assets/c-D9hLjNUM.js +1 -0
- package/dist/ui/assets/c3-CnJL0r0V.js +1 -0
- package/dist/ui/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/ui/assets/cairo-DLTphjLi.js +1 -0
- package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/dist/ui/assets/clarity-SemFz856.js +1 -0
- package/dist/ui/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/ui/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/ui/assets/cobol-C1SWlvZm.js +1 -0
- package/dist/ui/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/ui/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/ui/assets/coffee-B71R3v2U.js +1 -0
- package/dist/ui/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/ui/assets/coq-BrsZFFmf.js +1 -0
- package/dist/ui/assets/cpp--5a4c3v4.js +1 -0
- package/dist/ui/assets/crystal-AtqWYtE0.js +1 -0
- package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
- package/dist/ui/assets/css-CbqKSHI-.js +1 -0
- package/dist/ui/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/ui/assets/cue-CE9AQfxI.js +1 -0
- package/dist/ui/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/ui/assets/d-qD-0Kul2.js +1 -0
- package/dist/ui/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/ui/assets/dart-DkHntEIa.js +1 -0
- package/dist/ui/assets/dax-BkyTk9wS.js +1 -0
- package/dist/ui/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/ui/assets/diff-woXpYk--.js +1 -0
- package/dist/ui/assets/docker-IyjqRm3v.js +1 -0
- package/dist/ui/assets/dotenv-_5a1GRtc.js +1 -0
- package/dist/ui/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/ui/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/ui/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/ui/assets/edge-BPwY_RrJ.js +1 -0
- package/dist/ui/assets/elixir-DVH2yLJf.js +1 -0
- package/dist/ui/assets/elm-BrleA6gS.js +1 -0
- package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
- package/dist/ui/assets/erb-2SHiYe30.js +1 -0
- package/dist/ui/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/ui/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/ui/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/ui/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/ui/assets/fish-BJitypiv.js +1 -0
- package/dist/ui/assets/fluent-C03EYrpw.js +1 -0
- package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/ui/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/ui/assets/gdresource-C0sCabJj.js +1 -0
- package/dist/ui/assets/gdscript-Cp2uCuqX.js +1 -0
- package/dist/ui/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/ui/assets/genie-CV2tkWYe.js +1 -0
- package/dist/ui/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/ui/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/ui/assets/git-rebase-Bc7atMaV.js +1 -0
- package/dist/ui/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/ui/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/ui/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/ui/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/ui/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/ui/assets/glimmer-js-DXeTDPtW.js +1 -0
- package/dist/ui/assets/glimmer-ts-CEOoXHU4.js +1 -0
- package/dist/ui/assets/glsl-5-43-Gsg.js +1 -0
- package/dist/ui/assets/gn-ilITqXS6.js +1 -0
- package/dist/ui/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/ui/assets/go-BJwz_mda.js +1 -0
- package/dist/ui/assets/graphql-Bk7Ah1KA.js +1 -0
- package/dist/ui/assets/groovy-CacY0gHj.js +1 -0
- package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/ui/assets/hack-DUHz4rCJ.js +1 -0
- package/dist/ui/assets/haml-BPCuuTPR.js +1 -0
- package/dist/ui/assets/handlebars-CHxmUsnU.js +1 -0
- package/dist/ui/assets/haskell-D8IpX4py.js +1 -0
- package/dist/ui/assets/haxe-OTjmBuCE.js +1 -0
- package/dist/ui/assets/hcl-Dh228itO.js +1 -0
- package/dist/ui/assets/hjson-CxZEssPk.js +1 -0
- package/dist/ui/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/ui/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/ui/assets/horizon-bright-Br1oVSNq.js +1 -0
- package/dist/ui/assets/houston-CsvMBhTu.js +1 -0
- package/dist/ui/assets/html-BBJqizz0.js +1 -0
- package/dist/ui/assets/html-derivative-ShTPCcKN.js +1 -0
- package/dist/ui/assets/http-VFTyziwA.js +1 -0
- package/dist/ui/assets/hurl-B8yxTa4r.js +1 -0
- package/dist/ui/assets/hxml-B0Qn7Nwc.js +1 -0
- package/dist/ui/assets/hy-CZbG8q4J.js +1 -0
- package/dist/ui/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/ui/assets/ini-B5eOa1yu.js +1 -0
- package/dist/ui/assets/java-BZ5DAgJZ.js +1 -0
- package/dist/ui/assets/javascript-C_zuIEaC.js +1 -0
- package/dist/ui/assets/jinja-DWd6xfNr.js +1 -0
- package/dist/ui/assets/jison-BbY63d1V.js +1 -0
- package/dist/ui/assets/json-C4DnajZs.js +1 -0
- package/dist/ui/assets/json5-BR5RXkoi.js +1 -0
- package/dist/ui/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/ui/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/ui/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/ui/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/ui/assets/jsx-C4AACieZ.js +1 -0
- package/dist/ui/assets/julia-sRu7EFMW.js +1 -0
- package/dist/ui/assets/just-DpZ9Sx1v.js +1 -0
- package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/dist/ui/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/ui/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/ui/assets/kusto-BUv0MjJC.js +1 -0
- package/dist/ui/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/ui/assets/latex-B6a_uum7.js +1 -0
- package/dist/ui/assets/lean-CewbzKMR.js +1 -0
- package/dist/ui/assets/less-DVTAwKKz.js +1 -0
- package/dist/ui/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/ui/assets/liquid-B2sVpjjr.js +1 -0
- package/dist/ui/assets/llvm-Cm23YOpf.js +1 -0
- package/dist/ui/assets/log-BNLmms1o.js +1 -0
- package/dist/ui/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/ui/assets/lua-DxJJll61.js +1 -0
- package/dist/ui/assets/luau-CNKltnaQ.js +1 -0
- package/dist/ui/assets/make-Dixweg8N.js +1 -0
- package/dist/ui/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/ui/assets/marko-Dx8mw-Wx.js +1 -0
- package/dist/ui/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/ui/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/ui/assets/mdc-vNKeXEwR.js +1 -0
- package/dist/ui/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/ui/assets/mermaid-Bk4SNUv9.js +1 -0
- package/dist/ui/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/ui/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/ui/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/ui/assets/mojo-BgCJLMeH.js +1 -0
- package/dist/ui/assets/monokai-CdkpiU2Y.js +1 -0
- package/dist/ui/assets/moonbit-CaWjb8XO.js +1 -0
- package/dist/ui/assets/move-B1IS1UjX.js +1 -0
- package/dist/ui/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/ui/assets/nextflow-Bbiyy34d.js +1 -0
- package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +1 -0
- package/dist/ui/assets/nginx-DScQAGLT.js +1 -0
- package/dist/ui/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/ui/assets/nim-lAJch9uT.js +1 -0
- package/dist/ui/assets/nix-IvuFDN5E.js +1 -0
- package/dist/ui/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/ui/assets/nushell-DcLAeLz5.js +1 -0
- package/dist/ui/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/ui/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/ui/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/ui/assets/odin-B1RWQWA5.js +1 -0
- package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/dist/ui/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/ui/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/ui/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/ui/assets/perl-C_GkVo_E.js +1 -0
- package/dist/ui/assets/php-DziV3K6J.js +1 -0
- package/dist/ui/assets/pierre-dark-CpLgRqie.js +1 -0
- package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
- package/dist/ui/assets/pierre-dark-soft-kZQmAZld.js +1 -0
- package/dist/ui/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
- package/dist/ui/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
- package/dist/ui/assets/pierre-light-CoaEpmwp.js +1 -0
- package/dist/ui/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
- package/dist/ui/assets/pierre-light-soft-lWLdNTOI.js +1 -0
- package/dist/ui/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
- package/dist/ui/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
- package/dist/ui/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/ui/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/ui/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/ui/assets/po-BiJDBrnU.js +1 -0
- package/dist/ui/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/ui/assets/polar-C7UOKdEL.js +1 -0
- package/dist/ui/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/ui/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/ui/assets/powershell-DshXNtvi.js +1 -0
- package/dist/ui/assets/prisma-BsRQq5mF.js +1 -0
- package/dist/ui/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/ui/assets/proto-DB4EqR-F.js +1 -0
- package/dist/ui/assets/pug-z75UIWVK.js +1 -0
- package/dist/ui/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/ui/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/ui/assets/python-gzcpVVnB.js +1 -0
- package/dist/ui/assets/qml-Cmm4coz1.js +1 -0
- package/dist/ui/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/ui/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/ui/assets/r-Brd0axBE.js +1 -0
- package/dist/ui/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/ui/assets/raku-B3gFvitq.js +1 -0
- package/dist/ui/assets/razor-DSbwmoiu.js +1 -0
- package/dist/ui/assets/red-CJ3rzSJv.js +1 -0
- package/dist/ui/assets/reg-CRGYupPL.js +1 -0
- package/dist/ui/assets/regexp-Bs3Uk-pY.js +1 -0
- package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
- package/dist/ui/assets/review-payload-CbwCBKB1.js +1580 -0
- package/dist/ui/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/ui/assets/ron-VUp2lXgN.js +1 -0
- package/dist/ui/assets/rose-pine-BthvhNj6.js +1 -0
- package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/dist/ui/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/ui/assets/rst-ChIyKpUC.js +1 -0
- package/dist/ui/assets/ruby-BdAmvOMO.js +1 -0
- package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/ui/assets/sas-DpXn8hc5.js +1 -0
- package/dist/ui/assets/sass-DXrisJhu.js +1 -0
- package/dist/ui/assets/scala-DKOlJaKm.js +1 -0
- package/dist/ui/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/ui/assets/scss-atX1Uuef.js +1 -0
- package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/ui/assets/shellscript-BqgcAeMK.js +1 -0
- package/dist/ui/assets/shellsession-DfQSMRN5.js +1 -0
- package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
- package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
- package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
- package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
- package/dist/ui/assets/soy-DzP7zZTB.js +1 -0
- package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
- package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/ui/assets/sql-gmaLk66z.js +1 -0
- package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/ui/assets/stata-CJ0YTMcV.js +1 -0
- package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
- package/dist/ui/assets/surrealql-LH7FciQz.js +1 -0
- package/dist/ui/assets/svelte-BME2PU6V.js +1 -0
- package/dist/ui/assets/swift-DonLKvLd.js +1 -0
- package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
- package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
- package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/ui/assets/templ-DHBNIfYW.js +1 -0
- package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
- package/dist/ui/assets/tex-C8-kPEzO.js +1 -0
- package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
- package/dist/ui/assets/ts-tags-CiewV0vR.js +1 -0
- package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
- package/dist/ui/assets/tsx-CUYPqmnq.js +1 -0
- package/dist/ui/assets/turtle-ByJddavk.js +1 -0
- package/dist/ui/assets/twig-BTkvsl0b.js +1 -0
- package/dist/ui/assets/typescript-DDQMaPwj.js +1 -0
- package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
- package/dist/ui/assets/typst-DI99ib-x.js +1 -0
- package/dist/ui/assets/v-DETTlOr0.js +1 -0
- package/dist/ui/assets/vala-zf12oZj6.js +1 -0
- package/dist/ui/assets/vb-Djn5o6TS.js +1 -0
- package/dist/ui/assets/verilog-CiiDBU1e.js +1 -0
- package/dist/ui/assets/vesper-D5bVUKB1.js +1 -0
- package/dist/ui/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/ui/assets/viml-DvXPmvsu.js +1 -0
- package/dist/ui/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/ui/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/ui/assets/vue-BH5SEWRH.js +1 -0
- package/dist/ui/assets/vue-html-BT7yeYez.js +1 -0
- package/dist/ui/assets/vue-vine-Cs5IN2rs.js +1 -0
- package/dist/ui/assets/vyper-CgoNMtux.js +1 -0
- package/dist/ui/assets/wasm-BnjxR4X6.js +1 -0
- package/dist/ui/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/ui/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/ui/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/ui/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/ui/assets/wit-DdvCle-K.js +1 -0
- package/dist/ui/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/ui/assets/workspace-app-B_BnSEHO.css +1 -0
- package/dist/ui/assets/workspace-app-DSFpnrIC.js +115 -0
- package/dist/ui/assets/xml-D3_1BEcO.js +1 -0
- package/dist/ui/assets/xsl-BBOCDn4Y.js +1 -0
- package/dist/ui/assets/yaml-lThBDT45.js +1 -0
- package/dist/ui/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/ui/assets/zig-CMLA9XwU.js +1 -0
- package/dist/ui/workspace-app.html +15 -0
- package/dist/user-config.js +228 -0
- package/dist/verification.js +74 -0
- package/dist/workspace-store.js +133 -0
- package/dist/workspaces.js +433 -0
- package/docs/adr/devspace-x-implementation-adrs.md +159 -0
- package/docs/agent-profile-schema.md +203 -0
- package/docs/artifact-exchange.md +44 -0
- package/docs/assets/devspace-logo-light.png +0 -0
- package/docs/assets/devspace-screenshot.png +0 -0
- package/docs/assets/v11-review-ui-after.png +0 -0
- package/docs/assets/v11-review-ui-before.png +0 -0
- package/docs/chatgpt-coding-workflow.md +215 -0
- package/docs/configuration.md +217 -0
- package/docs/gotchas.md +294 -0
- package/docs/local-agent-daemon.md +101 -0
- package/docs/security.md +197 -0
- package/docs/setup.md +174 -0
- package/examples/agents/claude-implementer.md +30 -0
- package/examples/agents/codex-explorer.md +27 -0
- package/examples/agents/codex-qa-tester.md +29 -0
- package/examples/agents/codex-worker.md +25 -0
- package/examples/agents/copilot-reviewer.md +25 -0
- package/examples/agents/cursor-agent-worker.md +26 -0
- package/examples/agents/grok-builder.md +10 -0
- package/examples/agents/opencode-explorer.md +27 -0
- package/examples/agents/pi-reviewer.md +27 -0
- package/package.json +102 -0
- package/schema/v1/hearth.schema.json +529 -0
- package/scripts/copy-dashboard.mjs +9 -0
- package/scripts/fix-node-pty-permissions.mjs +22 -0
- package/scripts/generate-config-schema.ts +9 -0
- package/skills/subagents/SKILL.md +57 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Subagent profile schema
|
|
2
|
+
|
|
3
|
+
Hearth agent profiles are user-owned markdown files with YAML
|
|
4
|
+
frontmatter. They describe roles such as reviewer, explorer, or implementer.
|
|
5
|
+
The internal on-demand `hearth-agentd` process owns provider invocation. The
|
|
6
|
+
CLI and MCP server use it as clients when they need agent execution.
|
|
7
|
+
|
|
8
|
+
When subagents are enabled, the internal `hearth-agentd` process owns the
|
|
9
|
+
durable agent manager and live provider runtimes. `hearth agents run` is a
|
|
10
|
+
thin local client that starts or reuses the daemon automatically; `hearth
|
|
11
|
+
serve` is not required. A run returns an agent id immediately, while the daemon
|
|
12
|
+
persists its status, latest response, and provider session id.
|
|
13
|
+
|
|
14
|
+
Profiles are discovered from:
|
|
15
|
+
|
|
16
|
+
- `~/.hearth/agents/*.md`
|
|
17
|
+
- `.hearth/agents/*.md`
|
|
18
|
+
|
|
19
|
+
Packaged files under `examples/agents/` are starter templates only.
|
|
20
|
+
|
|
21
|
+
## Minimal shape
|
|
22
|
+
|
|
23
|
+
```md
|
|
24
|
+
---
|
|
25
|
+
schema: hearth-agent/v1
|
|
26
|
+
name: reviewer
|
|
27
|
+
description: Read-only reviewer for bugs, security risks, and missing tests.
|
|
28
|
+
provider: codex
|
|
29
|
+
model: gpt-5.4
|
|
30
|
+
effort: high
|
|
31
|
+
disabled: false
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
You are a read-only reviewer. Do not edit files.
|
|
35
|
+
Focus on correctness, security, test gaps, and maintainability.
|
|
36
|
+
Cite files and return concise findings.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Frontmatter fields
|
|
40
|
+
|
|
41
|
+
### `schema`
|
|
42
|
+
|
|
43
|
+
Optional schema identifier:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
schema: hearth-agent/v1
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### `name`
|
|
50
|
+
|
|
51
|
+
Stable profile identifier shown to the model and accepted by:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
hearth agents run <name> "<prompt>"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Use lowercase kebab-case names. If omitted, Hearth uses the filename without
|
|
58
|
+
`.md`.
|
|
59
|
+
|
|
60
|
+
### `description`
|
|
61
|
+
|
|
62
|
+
Required short purpose. This is exposed by `open_workspace` so the supervising
|
|
63
|
+
model can choose the right profile.
|
|
64
|
+
|
|
65
|
+
### `provider`
|
|
66
|
+
|
|
67
|
+
Required built-in provider id:
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
provider: codex
|
|
71
|
+
provider: claude
|
|
72
|
+
provider: opencode
|
|
73
|
+
provider: pi
|
|
74
|
+
provider: cursor
|
|
75
|
+
provider: copilot
|
|
76
|
+
provider: grok
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Unsupported or custom providers are rejected. Hearth maps providers to their
|
|
80
|
+
native integration:
|
|
81
|
+
|
|
82
|
+
- `codex`: the host-installed `codex app-server` command
|
|
83
|
+
- `claude`: Claude Code SDK
|
|
84
|
+
- `opencode`: OpenCode SDK
|
|
85
|
+
- `pi`: the installed Pi coding-agent SDK, one in-process session per Hearth agent
|
|
86
|
+
- `cursor`: ACP
|
|
87
|
+
- `copilot`: ACP
|
|
88
|
+
- `grok`: Grok Build ACP (`grok agent stdio`)
|
|
89
|
+
|
|
90
|
+
Codex is resolved from the user's environment rather than bundled with
|
|
91
|
+
Hearth. Run `codex login` normally before using it; set `CODEX_COMMAND` when
|
|
92
|
+
the executable is not on the normal PATH. OpenCode, Cursor, and Copilot
|
|
93
|
+
runtimes are started and reused by the daemon internally, while Pi is embedded
|
|
94
|
+
through its Node SDK.
|
|
95
|
+
|
|
96
|
+
### `model`
|
|
97
|
+
|
|
98
|
+
Optional provider model id or alias.
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
model: gpt-5.4
|
|
102
|
+
model: sonnet
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `effort`
|
|
106
|
+
|
|
107
|
+
Optional provider reasoning effort, thinking level, or model variant. If omitted,
|
|
108
|
+
Hearth lets the provider default apply. Values are provider-specific
|
|
109
|
+
passthrough strings; Hearth does not translate names between harnesses.
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
effort: low
|
|
113
|
+
effort: high
|
|
114
|
+
effort: xhigh
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Hearth passes this through to providers that expose a matching control:
|
|
118
|
+
|
|
119
|
+
- `claude`: SDK effort with adaptive thinking.
|
|
120
|
+
- `codex`: app-server model reasoning effort.
|
|
121
|
+
- `pi`: the AgentSession thinking-level control.
|
|
122
|
+
- `opencode`: model variant.
|
|
123
|
+
- `cursor` and `copilot`: ACP thought-level config when supported.
|
|
124
|
+
- `grok`: `--reasoning-effort` on startup and xAI's ACP model metadata for resumed sessions.
|
|
125
|
+
|
|
126
|
+
### `disabled`
|
|
127
|
+
|
|
128
|
+
Optional boolean. Disabled profiles are not exposed.
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
disabled: true
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Markdown body
|
|
135
|
+
|
|
136
|
+
The body is the profile prompt prefix Hearth prepends when launching that
|
|
137
|
+
profile. It is not included in `open_workspace` by default.
|
|
138
|
+
|
|
139
|
+
Recommended body content:
|
|
140
|
+
|
|
141
|
+
- When to use this profile.
|
|
142
|
+
- Whether the worker should act read-only or may make changes.
|
|
143
|
+
- Output format.
|
|
144
|
+
- Review or testing expectations.
|
|
145
|
+
|
|
146
|
+
## Model-facing workflow
|
|
147
|
+
|
|
148
|
+
The Subagent skill teaches only:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
hearth agents ls --json
|
|
152
|
+
hearth agents targets --json
|
|
153
|
+
hearth agents run <profile-or-provider> "<prompt>" --json
|
|
154
|
+
hearth agents continue <id> "<prompt>" --json
|
|
155
|
+
hearth agents show <id> --json
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
`open_workspace` exposes compact profile metadata:
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"name": "reviewer",
|
|
163
|
+
"description": "Read-only reviewer for bugs, security risks, and missing tests.",
|
|
164
|
+
"provider": "codex",
|
|
165
|
+
"model": "gpt-5.4",
|
|
166
|
+
"effort": "high"
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
`hearth agents targets` lists usable providers and profile definitions for the
|
|
171
|
+
current workspace. `hearth agents ls` lists existing subagent sessions; it does
|
|
172
|
+
not list profile definitions.
|
|
173
|
+
|
|
174
|
+
Use `hearth agents continue <id>` for a later turn. The logical agent ID is
|
|
175
|
+
the `agt_...` value returned by `run` or `ls`; provider session IDs are not
|
|
176
|
+
accepted as substitutes.
|
|
177
|
+
|
|
178
|
+
The full profile body stays out of the model context until Hearth launches the
|
|
179
|
+
profile.
|
|
180
|
+
|
|
181
|
+
## Runtime lifecycle
|
|
182
|
+
|
|
183
|
+
Hearth keeps provider sessions warm while they are active or recently used,
|
|
184
|
+
but persists only the provider session id and durable agent metadata. Native
|
|
185
|
+
sharing follows the provider boundary: Codex uses one app-server across agents,
|
|
186
|
+
OpenCode uses one server across sessions, ACP providers use one process across
|
|
187
|
+
sessions, while Claude and Pi keep one warm runtime per Hearth agent. There is
|
|
188
|
+
one active turn per agent; different agents may run concurrently.
|
|
189
|
+
|
|
190
|
+
If the daemon restarts during a turn, persisted `starting` and `running` agents
|
|
191
|
+
become `error` with a restart message. The next `agents continue <id>` request can
|
|
192
|
+
continue the provider session when that provider supports resumption. The MCP
|
|
193
|
+
server can restart independently because it does not own this state.
|
|
194
|
+
|
|
195
|
+
## Current non-goals
|
|
196
|
+
|
|
197
|
+
- Custom or arbitrary CLI-backed agents.
|
|
198
|
+
- Inferring changed files, tests, or diffs from worker output.
|
|
199
|
+
- Exposing raw provider transcripts by default.
|
|
200
|
+
- Teaching the model provider-specific CLIs.
|
|
201
|
+
- First-class MCP agent tools. Future tools should call the same local agent
|
|
202
|
+
daemon used by `hearth agents` rather than executing providers in the MCP
|
|
203
|
+
server process.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Download a native file
|
|
2
|
+
|
|
3
|
+
Hearth can save a file attached or generated by an MCP host, such as ChatGPT,
|
|
4
|
+
directly into an open workspace. Enable the tool with
|
|
5
|
+
`artifacts.enabled` in `~/.hearth/config.jsonc`.
|
|
6
|
+
|
|
7
|
+
## Workflow
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
open_workspace
|
|
11
|
+
-> download_artifact({ file, workspaceId, path })
|
|
12
|
+
-> { path }
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
1. Open the project with `open_workspace`.
|
|
16
|
+
2. Pass the host-provided native `file`, the returned `workspaceId`, and an
|
|
17
|
+
unused workspace-relative `path` to `download_artifact`.
|
|
18
|
+
3. Use the returned path with the ordinary Hearth filesystem tools.
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
download_artifact({
|
|
22
|
+
file: <native file value supplied by the MCP host>,
|
|
23
|
+
workspaceId: "ws_123",
|
|
24
|
+
path: "public/images/generated-image.png"
|
|
25
|
+
})
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Hearth creates missing parent directories and refuses to overwrite an existing
|
|
29
|
+
file. After the download, normal tools can inspect, move, rename, replace, or
|
|
30
|
+
delete it.
|
|
31
|
+
|
|
32
|
+
## Safety and limits
|
|
33
|
+
|
|
34
|
+
The `file` input must be the native value supplied by the MCP host. Hearth does
|
|
35
|
+
not accept pasted download URLs or local source paths. It validates the complete
|
|
36
|
+
file-object shape, trusted OpenAI download hosts, and redirects before streaming.
|
|
37
|
+
Malformed references, unknown fields, absolute paths, traversal, and symlinked
|
|
38
|
+
parents are rejected.
|
|
39
|
+
|
|
40
|
+
Downloads are streamed under `artifacts.maxFileBytes` and published as
|
|
41
|
+
owner-only files without overwriting an existing destination. The tool is
|
|
42
|
+
currently available on Linux. It is not registered on macOS, Windows, or BSD
|
|
43
|
+
because Node.js does not expose the required descriptor-relative filesystem
|
|
44
|
+
operations there.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# ChatGPT Coding Workflow
|
|
2
|
+
|
|
3
|
+
Hearth brings a Codex-style coding-agent loop to ChatGPT and other MCP hosts:
|
|
4
|
+
inspect the repo, follow local instructions, make scoped edits, run
|
|
5
|
+
verification, and show the user what changed.
|
|
6
|
+
|
|
7
|
+
## Open One Workspace
|
|
8
|
+
|
|
9
|
+
ChatGPT should call `open_workspace` once for a project folder:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"path": "~/work/my-project"
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The result includes a `workspaceId`. All later file, search, edit, show-changes,
|
|
18
|
+
and shell calls should reuse that same `workspaceId`.
|
|
19
|
+
|
|
20
|
+
ChatGPT may support automatic checkout recovery through optional host
|
|
21
|
+
conversation metadata. This is an OpenAI-host adapter detail, not a standard MCP
|
|
22
|
+
conversation field. When that optional context is available, opening the same
|
|
23
|
+
checkout project again in the same conversation can continue in the existing
|
|
24
|
+
workspace, and the context already provided for that reused checkout is not
|
|
25
|
+
repeated. The portable workflow remains the same: keep using the `workspaceId`
|
|
26
|
+
returned by `open_workspace` for later operations. Hosts without supported
|
|
27
|
+
conversation context receive a normal new workspace and continue with that
|
|
28
|
+
explicit `workspaceId` workflow.
|
|
29
|
+
The model receives actionable workspace instructions; automatic-reuse
|
|
30
|
+
bookkeeping is not a model-facing choice.
|
|
31
|
+
|
|
32
|
+
Worktree mode is deliberately different: every call creates a new managed
|
|
33
|
+
worktree and a new workspace session with complete context, even for the same
|
|
34
|
+
path and base ref.
|
|
35
|
+
|
|
36
|
+
The first successful open of a checkout provides complete instructions and
|
|
37
|
+
coding context. A repeated open that reuses the same checkout workspace does
|
|
38
|
+
not repeat the model-visible context, but the workspace UI continues to show the
|
|
39
|
+
complete details. Every new worktree establishes and returns its own complete
|
|
40
|
+
context, even when the same project was already opened in checkout or another
|
|
41
|
+
worktree. Opening checkout after a worktree therefore provides the checkout's
|
|
42
|
+
own context.
|
|
43
|
+
|
|
44
|
+
Do not call `open_workspace` again for the same checkout folder unless:
|
|
45
|
+
|
|
46
|
+
- the `workspaceId` is rejected as unknown
|
|
47
|
+
- work moves to a different project folder
|
|
48
|
+
- work switches between checkout and worktree mode
|
|
49
|
+
- the user asks for a new isolated worktree
|
|
50
|
+
|
|
51
|
+
## Checkout Mode
|
|
52
|
+
|
|
53
|
+
Checkout mode is the default. Hearth opens the actual directory:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"path": "~/work/my-project"
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use this when the user wants ChatGPT to work in the current checkout.
|
|
62
|
+
|
|
63
|
+
## Worktree Mode
|
|
64
|
+
|
|
65
|
+
Use worktree mode for isolated parallel work:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"path": "~/work/my-project",
|
|
70
|
+
"mode": "worktree"
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Managed worktrees are created under:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
~/.hearth/worktrees
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Worktree mode requires a Git repository with at least one commit. It starts from
|
|
81
|
+
`HEAD` unless `baseRef` is provided.
|
|
82
|
+
|
|
83
|
+
Each worktree-mode call creates a new managed worktree and returns a new
|
|
84
|
+
`workspaceId`. Reuse that ID for work inside that worktree; call
|
|
85
|
+
`open_workspace` in worktree mode again only when another isolated worktree is
|
|
86
|
+
actually required.
|
|
87
|
+
|
|
88
|
+
Uncommitted source checkout changes are not copied into the managed worktree.
|
|
89
|
+
Hearth reports when the source checkout was dirty so the model can decide how
|
|
90
|
+
to proceed with the user.
|
|
91
|
+
|
|
92
|
+
## Project Instructions
|
|
93
|
+
|
|
94
|
+
When a workspace opens, Hearth loads root-level instruction files:
|
|
95
|
+
|
|
96
|
+
- `AGENTS.md`
|
|
97
|
+
- `AGENTS.MD`
|
|
98
|
+
- `CLAUDE.md`
|
|
99
|
+
- `CLAUDE.MD`
|
|
100
|
+
|
|
101
|
+
Nested instruction files are returned as `availableAgentsFiles`. The model
|
|
102
|
+
should read the relevant nested file before working under that directory.
|
|
103
|
+
|
|
104
|
+
This keeps instructions explicit and inspectable instead of silently injecting
|
|
105
|
+
new context during later tool calls.
|
|
106
|
+
|
|
107
|
+
## Skills
|
|
108
|
+
|
|
109
|
+
Skills are enabled by default for coding-agent workflows.
|
|
110
|
+
|
|
111
|
+
Hearth discovers standard Agent Skills from:
|
|
112
|
+
|
|
113
|
+
- `~/.agents/skills`
|
|
114
|
+
- project `.agents/skills`
|
|
115
|
+
- `~/.hearth/skills`
|
|
116
|
+
|
|
117
|
+
It also keeps compatibility with:
|
|
118
|
+
|
|
119
|
+
- the bundled `subagents` skill when Subagents are enabled, unless `~/.hearth/skills/subagents/SKILL.md` exists
|
|
120
|
+
- `skills.agentDir/skills`, defaulting to `~/.codex/skills`
|
|
121
|
+
- additional paths from `skills.paths`
|
|
122
|
+
|
|
123
|
+
When Subagents are enabled, Hearth discovers agent profiles
|
|
124
|
+
from `~/.hearth/agents/*.md` and project `.hearth/agents/*.md`.
|
|
125
|
+
`open_workspace` exposes a compact catalog with profile names, descriptions,
|
|
126
|
+
providers, and optional models/effort levels so the model can choose a configured agent
|
|
127
|
+
without seeing provider-specific launch details.
|
|
128
|
+
|
|
129
|
+
Example profiles are packaged under `examples/agents/` for users who want
|
|
130
|
+
starter templates. Copy or adapt them into one of the active profile directories
|
|
131
|
+
before use.
|
|
132
|
+
|
|
133
|
+
Legacy project paths such as `.pi/skills` can be added to `skills.paths` when needed.
|
|
134
|
+
|
|
135
|
+
When `open_workspace` returns matching skills, the model should read the
|
|
136
|
+
advertised `SKILL.md` before following that skill.
|
|
137
|
+
|
|
138
|
+
Skill paths may be outside the workspace. Hearth only permits reading:
|
|
139
|
+
|
|
140
|
+
- files within advertised skill directories
|
|
141
|
+
|
|
142
|
+
Set `skills.enabled` to `false` to hide skills from workspace output. Enable
|
|
143
|
+
Subagents and choose providers through `hearth init` or the persisted provider
|
|
144
|
+
configuration. The bundled `subagents` skill teaches the minimal
|
|
145
|
+
`hearth agents targets`, `hearth agents ls`, `hearth agents run`,
|
|
146
|
+
`hearth agents continue`, and `hearth agents show` workflow. The catalog
|
|
147
|
+
comes from `open_workspace`; `hearth agents ls` lists existing subagent
|
|
148
|
+
sessions for that workspace.
|
|
149
|
+
|
|
150
|
+
## Tool Names
|
|
151
|
+
|
|
152
|
+
The Claude surface exposes these tool names:
|
|
153
|
+
|
|
154
|
+
- `open_workspace`
|
|
155
|
+
- `read`
|
|
156
|
+
- `write`
|
|
157
|
+
- `edit`
|
|
158
|
+
- `bash`
|
|
159
|
+
- `show_changes`
|
|
160
|
+
|
|
161
|
+
Hearth uses the Codex-style surface by default. It exposes:
|
|
162
|
+
|
|
163
|
+
- `open_workspace`
|
|
164
|
+
- `read`
|
|
165
|
+
- `apply_patch`
|
|
166
|
+
- `exec_command`
|
|
167
|
+
- `write_stdin`
|
|
168
|
+
- `show_changes`
|
|
169
|
+
|
|
170
|
+
In this mode, `write`, `edit`, and `bash` are not registered. `exec_command`
|
|
171
|
+
returns a process session ID when a command is still
|
|
172
|
+
running after its yield window. Use `write_stdin` to poll it, send input, resize
|
|
173
|
+
a PTY, or send Ctrl-C. Set `tty: true` only for commands that need a terminal.
|
|
174
|
+
|
|
175
|
+
Set `tools.mode` to `claude` in `~/.hearth/config.jsonc` to expose `write`,
|
|
176
|
+
`edit`, and `bash` instead of the Codex mutation and command tools. Dedicated
|
|
177
|
+
MCP tools for `grep`, `glob`, and `ls` are not registered in either mode; use
|
|
178
|
+
the configured shell tool with command-line tools such as `rg`, `find`, and
|
|
179
|
+
`ls`.
|
|
180
|
+
|
|
181
|
+
## Show Changes
|
|
182
|
+
|
|
183
|
+
Hearth exposes `show_changes` in both tool modes and attaches widget UI only
|
|
184
|
+
to `open_workspace` and `show_changes`. Reads, edits, and commands return normal
|
|
185
|
+
MCP results without creating an iframe for each call. Set `ui.enabled` to
|
|
186
|
+
`false` in `~/.hearth/config.jsonc` to disable UI metadata while keeping the
|
|
187
|
+
aggregate review tool available.
|
|
188
|
+
|
|
189
|
+
Call `show_changes` exactly once after the final file modification in any turn
|
|
190
|
+
that changes files. It shows the combined changes for that turn and advances
|
|
191
|
+
the review point automatically. Reusing a workspace does not change this
|
|
192
|
+
workflow.
|
|
193
|
+
|
|
194
|
+
The model-facing result stays compact: Hearth returns the workspace ID, a
|
|
195
|
+
Git-backed `reviewRef`, and the summary text. MCP Apps hosts receive the full
|
|
196
|
+
file list and patch in result metadata for immediate rendering. If a host later
|
|
197
|
+
restores only the structured result, the review card can reopen that exact
|
|
198
|
+
`reviewRef` from Hearth's Git review history without advancing the current
|
|
199
|
+
review point.
|
|
200
|
+
|
|
201
|
+
For local inspection, run `hearth show-changes <review-ref>`. Add `--json` to
|
|
202
|
+
include the parsed summary, file list, and patch.
|
|
203
|
+
|
|
204
|
+
## Shell Use
|
|
205
|
+
|
|
206
|
+
The shell tool is for commands that belong in a terminal:
|
|
207
|
+
|
|
208
|
+
- tests
|
|
209
|
+
- builds
|
|
210
|
+
- git inspection
|
|
211
|
+
- package scripts
|
|
212
|
+
- environment checks
|
|
213
|
+
|
|
214
|
+
File writes should go through the edit/write tools rather than shell
|
|
215
|
+
redirection, heredocs, `tee`, `sed -i`, or generated scripts.
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Configuration Reference
|
|
2
|
+
|
|
3
|
+
Hearth stores durable settings in `~/.hearth/config.jsonc`. The file accepts
|
|
4
|
+
comments and trailing commas and is validated before the server starts. Editor
|
|
5
|
+
completion is provided by the versioned [JSON Schema](../schema/v1/hearth.schema.json),
|
|
6
|
+
also hosted at the URL in the file's `$schema` property.
|
|
7
|
+
|
|
8
|
+
Authentication stays separate because it contains a secret:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
~/.hearth/config.jsonc
|
|
12
|
+
~/.hearth/auth.json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Run `hearth init` to create both files. `hearth config set publicBaseUrl
|
|
16
|
+
<url|null>` updates the JSONC document without discarding its comments.
|
|
17
|
+
|
|
18
|
+
## Complete example
|
|
19
|
+
|
|
20
|
+
```jsonc
|
|
21
|
+
{
|
|
22
|
+
"$schema": "https://raw.githubusercontent.com/Waishnav/hearth/main/schema/v1/hearth.schema.json",
|
|
23
|
+
"configVersion": 1,
|
|
24
|
+
|
|
25
|
+
"server": {
|
|
26
|
+
"host": "127.0.0.1",
|
|
27
|
+
"port": 7176,
|
|
28
|
+
// Use the public origin only; do not append /mcp.
|
|
29
|
+
"publicBaseUrl": "https://hearth.example.com",
|
|
30
|
+
"allowedHosts": [],
|
|
31
|
+
"trustProxy": false,
|
|
32
|
+
},
|
|
33
|
+
"workspaces": {
|
|
34
|
+
"allowedRoots": ["~/personal", "~/work"],
|
|
35
|
+
"worktreeRoot": "~/.hearth/worktrees",
|
|
36
|
+
},
|
|
37
|
+
"storage": {
|
|
38
|
+
"stateDir": "~/.local/share/hearth",
|
|
39
|
+
},
|
|
40
|
+
"tools": {
|
|
41
|
+
"mode": "codex",
|
|
42
|
+
},
|
|
43
|
+
"ui": {
|
|
44
|
+
"enabled": true,
|
|
45
|
+
},
|
|
46
|
+
"artifacts": {
|
|
47
|
+
"enabled": false,
|
|
48
|
+
"maxFileBytes": 104857600,
|
|
49
|
+
},
|
|
50
|
+
"skills": {
|
|
51
|
+
"enabled": true,
|
|
52
|
+
"paths": [],
|
|
53
|
+
"agentDir": "~/.codex",
|
|
54
|
+
},
|
|
55
|
+
"subagents": {
|
|
56
|
+
"enabled": false,
|
|
57
|
+
"providers": [],
|
|
58
|
+
},
|
|
59
|
+
"logging": {
|
|
60
|
+
"level": "info",
|
|
61
|
+
"format": "json",
|
|
62
|
+
"requests": true,
|
|
63
|
+
"assets": false,
|
|
64
|
+
"toolCalls": true,
|
|
65
|
+
"shellCommands": false,
|
|
66
|
+
},
|
|
67
|
+
"oauth": {
|
|
68
|
+
"accessTokenTtlSeconds": 3600,
|
|
69
|
+
"refreshTokenTtlSeconds": 2592000,
|
|
70
|
+
"scopes": ["hearth"],
|
|
71
|
+
"allowedRedirectHosts": ["chatgpt.com", "claude.ai", "anthropic.com", "localhost", "127.0.0.1"],
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Omitted sections and keys use the defaults shown above. An empty
|
|
77
|
+
`workspaces.allowedRoots` uses the current working directory. Unknown keys are
|
|
78
|
+
rejected so spelling mistakes cannot silently alter behavior.
|
|
79
|
+
|
|
80
|
+
## Tool modes and UI
|
|
81
|
+
|
|
82
|
+
`tools.mode` accepts two values:
|
|
83
|
+
|
|
84
|
+
| Value | Tool surface |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| `codex` | Default. `open_workspace`, `read`, `apply_patch`, `exec_command`, `write_stdin`, and `show_changes`. |
|
|
87
|
+
| `claude` | `open_workspace`, `read`, `write`, `edit`, `bash`, and `show_changes`. |
|
|
88
|
+
|
|
89
|
+
The dedicated MCP tools `grep`, `glob`, and `ls` are not exposed. Each mode uses
|
|
90
|
+
its shell tool with programs such as `rg`, `find`, and `ls` when it needs those
|
|
91
|
+
operations.
|
|
92
|
+
|
|
93
|
+
Hearth attaches Apps UI metadata only to `open_workspace` and `show_changes`.
|
|
94
|
+
This avoids rendering an iframe for every read, edit, search, or command call.
|
|
95
|
+
Setting `ui.enabled` to `false` removes the metadata but does not remove the
|
|
96
|
+
`show_changes` tool.
|
|
97
|
+
|
|
98
|
+
## Skills and subagents
|
|
99
|
+
|
|
100
|
+
Hearth discovers standard Agent Skills from `~/.agents/skills`, project
|
|
101
|
+
`.agents/skills`, and `~/.hearth/skills`. It also checks
|
|
102
|
+
`skills.agentDir/skills` and each path in `skills.paths`. Relative custom paths
|
|
103
|
+
are resolved from the active workspace.
|
|
104
|
+
|
|
105
|
+
Subagent providers are explicit. Omitted providers are disabled:
|
|
106
|
+
|
|
107
|
+
```jsonc
|
|
108
|
+
{
|
|
109
|
+
"configVersion": 1,
|
|
110
|
+
"subagents": {
|
|
111
|
+
"enabled": true,
|
|
112
|
+
"providers": [
|
|
113
|
+
{
|
|
114
|
+
"id": "codex",
|
|
115
|
+
"enabled": true,
|
|
116
|
+
"model": "gpt-5.4",
|
|
117
|
+
"effort": "high",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "claude",
|
|
121
|
+
"enabled": true,
|
|
122
|
+
"model": "sonnet",
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Profiles are loaded from `~/.hearth/agents/*.md` and project
|
|
130
|
+
`.hearth/agents/*.md`. `hearth agents targets` prints the configured targets
|
|
131
|
+
available in the current workspace.
|
|
132
|
+
|
|
133
|
+
Provider executable discovery remains process-scoped. The supported overrides
|
|
134
|
+
are `CODEX_COMMAND`, `CODEX_HOME`, `CLAUDE_COMMAND`, `CURSOR_COMMAND`,
|
|
135
|
+
`COPILOT_COMMAND`, `GROK_COMMAND`, and `GROK_AGENT_PROFILE`. Hearth does not
|
|
136
|
+
persist provider credentials.
|
|
137
|
+
|
|
138
|
+
## Native artifact download
|
|
139
|
+
|
|
140
|
+
Set `artifacts.enabled` to `true` when a host needs to save a native attached or
|
|
141
|
+
generated file into an open workspace. `artifacts.maxFileBytes` limits one
|
|
142
|
+
streamed file. The secure publication path is currently available only on
|
|
143
|
+
Linux; the tool is not registered on macOS, Windows, or BSD.
|
|
144
|
+
|
|
145
|
+
## Environment boundary
|
|
146
|
+
|
|
147
|
+
User-facing Hearth environment variables (the only ones read from the environment; provider-specific overrides such as `CODEX_COMMAND`, `CLAUDE_COMMAND`, `CURSOR_COMMAND`, `COPILOT_COMMAND`, `GROK_COMMAND`, `GROK_AGENT_PROFILE`, `CODEX_HOME` are read by the subagent layer):
|
|
148
|
+
|
|
149
|
+
| Variable | Purpose |
|
|
150
|
+
| --- | --- |
|
|
151
|
+
| `HEARTH_CONFIG_DIR` | Bootstrap location for `config.jsonc`, `auth.json`, skills, and profiles. |
|
|
152
|
+
| `HEARTH_OAUTH_OWNER_TOKEN` | Optional secret override for the owner token stored in `auth.json`. |
|
|
153
|
+
|
|
154
|
+
Durable environment settings were removed in v1.1. Move existing deployment
|
|
155
|
+
values to these JSONC keys:
|
|
156
|
+
|
|
157
|
+
| Removed setting | JSONC key |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| `HOST`, `PORT` | `server.host`, `server.port` |
|
|
160
|
+
| `HEARTH_PUBLIC_BASE_URL` | `server.publicBaseUrl` |
|
|
161
|
+
| `HEARTH_ALLOWED_HOSTS` | `server.allowedHosts` |
|
|
162
|
+
| `HEARTH_TRUST_PROXY` | `server.trustProxy` |
|
|
163
|
+
| `HEARTH_ALLOWED_ROOTS` | `workspaces.allowedRoots` |
|
|
164
|
+
| `HEARTH_WORKTREE_ROOT` | `workspaces.worktreeRoot` |
|
|
165
|
+
| `HEARTH_STATE_DIR` | `storage.stateDir` |
|
|
166
|
+
| `HEARTH_TOOL_MODE`, `HEARTH_MINIMAL_TOOLS` | `tools.mode` |
|
|
167
|
+
| `HEARTH_WIDGETS` | `ui.enabled` |
|
|
168
|
+
| `HEARTH_ARTIFACTS` | `artifacts.enabled` |
|
|
169
|
+
| `HEARTH_ARTIFACT_MAX_FILE_BYTES` | `artifacts.maxFileBytes` |
|
|
170
|
+
| `HEARTH_SKILLS` | `skills.enabled` |
|
|
171
|
+
| `HEARTH_SKILL_PATHS` | `skills.paths` |
|
|
172
|
+
| `HEARTH_AGENT_DIR` | `skills.agentDir` |
|
|
173
|
+
| `HEARTH_SUBAGENTS` | `subagents.enabled` |
|
|
174
|
+
| `HEARTH_LOG_LEVEL` | `logging.level` |
|
|
175
|
+
| `HEARTH_LOG_FORMAT` | `logging.format` |
|
|
176
|
+
| `HEARTH_LOG_REQUESTS` | `logging.requests` |
|
|
177
|
+
| `HEARTH_LOG_ASSETS` | `logging.assets` |
|
|
178
|
+
| `HEARTH_LOG_TOOL_CALLS` | `logging.toolCalls` |
|
|
179
|
+
| `HEARTH_LOG_SHELL_COMMANDS` | `logging.shellCommands` |
|
|
180
|
+
| `HEARTH_OAUTH_ACCESS_TOKEN_TTL_SECONDS` | `oauth.accessTokenTtlSeconds` |
|
|
181
|
+
| `HEARTH_OAUTH_REFRESH_TOKEN_TTL_SECONDS` | `oauth.refreshTokenTtlSeconds` |
|
|
182
|
+
| `HEARTH_OAUTH_SCOPES` | `oauth.scopes` |
|
|
183
|
+
| `HEARTH_OAUTH_ALLOWED_REDIRECT_HOSTS` | `oauth.allowedRedirectHosts` |
|
|
184
|
+
|
|
185
|
+
These environment values are not read or auto-imported in v1.1. Environment is
|
|
186
|
+
process state, so there is no reliable file Hearth can migrate on the user's
|
|
187
|
+
behalf.
|
|
188
|
+
|
|
189
|
+
## v1.0 file migration
|
|
190
|
+
|
|
191
|
+
The first v1.1 load performs one migration when `config.jsonc` is missing and
|
|
192
|
+
`config.json` exists:
|
|
193
|
+
|
|
194
|
+
1. Validate the old JSON document.
|
|
195
|
+
2. Translate its known fields into the versioned JSONC structure.
|
|
196
|
+
3. Write and validate a temporary `config.jsonc`.
|
|
197
|
+
4. Atomically publish it.
|
|
198
|
+
5. Rename the old file to `config.json.v1.0.bak`.
|
|
199
|
+
|
|
200
|
+
If `config.jsonc` exists, Hearth never reads `config.json`. Invalid JSONC also
|
|
201
|
+
never falls back to the old file. Unsupported legacy keys stop migration with an
|
|
202
|
+
actionable error instead of being silently discarded.
|
|
203
|
+
|
|
204
|
+
The persisted fields map as follows:
|
|
205
|
+
|
|
206
|
+
| v1.0 JSON field | v1.1 JSONC key |
|
|
207
|
+
| --- | --- |
|
|
208
|
+
| `host`, `port` | `server.host`, `server.port` |
|
|
209
|
+
| `publicBaseUrl`, `allowedHosts` | `server.publicBaseUrl`, `server.allowedHosts` |
|
|
210
|
+
| `allowedRoots`, `worktreeRoot` | `workspaces.allowedRoots`, `workspaces.worktreeRoot` |
|
|
211
|
+
| `stateDir` | `storage.stateDir` |
|
|
212
|
+
| `artifactsEnabled`, `artifactMaxFileBytes` | `artifacts.enabled`, `artifacts.maxFileBytes` |
|
|
213
|
+
| `agentDir` | `skills.agentDir` |
|
|
214
|
+
| `subagents` | `subagents` |
|
|
215
|
+
| `tools.mode`, `ui.enabled` | unchanged nested keys |
|
|
216
|
+
|
|
217
|
+
`auth.json` is unchanged.
|