+
    iHàj€K  ã                  óL  a€ 0 t $ R t^ RIHt ^ RIHtHt ^ RIHt ^ RI	H
t
Ht ]
'       d   ^ RIHt ^t^ tRtRt]! RR	7       ! R
 R4      4       tR R ltR R ltR R ltR R lt]! RRR RvRRwRRRR7	      ]! RR]! R4      RxRRyRR R!R7	      ]! R"R#]! R$4      RzR%R{R&R'R(R7	      ]! R)R*]! R)4      R|R+R}R,R-R.R7	      ]! R/R0]R~R1RR2R3R4R7	      ]! R5R6]R€R7R�R2R3R8R7	      ]! R9R:]R‚R;RƒR<R=R>R7	      ]! R?R@]R„RAR…RBRCRDR7	      ]! RERF]R†RGR‡RHRIRJR7	      ]! RKRL]RˆRMR‰RNRORPR7	      ]! RQRR]RŠRSR‹RTRURVR7	      ]! RWRX]RŒRYR�RZR[R\R7	      ]! R]R^]RŽR_R�RZR`RaR7	      3tRb]Rc&   ]! ]RdRe R�RfR‘RgRhRiR7	      t] U u/ uF  q P4                  V bK  	  up tRjtRk Rl ltRm Rn ltRo Rp ltRq Rr lt Rs Rt lt!Ru# u up i )’a~  The first-task catalog of onboarding's build beat: what the model may put on the build card.

Pure. Gates read only hard facts (this OS, plugins installed this run, apps connected this run);
whether a row fits the person is the model's call. ``agent/onboarding_flow.py`` checks the model's
picks against ``eligible_tasks``; ``agent/onboarding_text.py`` renders each row's reminder.
)Úannotations)ÚCallableÚMapping)Ú	dataclass)ÚTYPE_CHECKINGÚAny)ÚFactsÚhermesÚownT)Úfrozenc                  óv   € ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   R]R&   RtR# )Ú	FirstTaska  ``skills`` load first, before the work; an entry ``a|b`` means one of them, whichever fits.
A plugin skill is written ``<catalog plugin>:<skill>``; :func:`task_skills` names it by the name it
registered under on this install. ``goal`` finishes the sentence "Your job: ...".ÚstrÚidÚlabelú*Callable[[Facts, Mapping[str, Any]], bool]Úgateztuple[str, ...]ÚskillsÚgoalÚstepsÚoutputÚqualityÚdone© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r   ó    ÚA/home/ubuntu/.hermes/hermes-agent/agent/onboarding_first_tasks.pyr   r      s:   ‡ ñYð 	ƒGØƒJØ
4Ó4ØÓØ
ƒIØÓØƒKØƒLØ
‡Ir!   r   c               ó$   € V ^8„  d   QhRRRRRR/# ©é   Úfactsr   ÚpicksúMapping[str, Any]ÚreturnÚboolr   )Úformats   "r"   Ú__annotate__r,   *   s"   € ÷ ñ �5ð Ð!2ð °tñ r!   c                ó   € R # )Tr   ©r&   r'   s   &&r"   Ú_alwaysr/   *   s   € Ùr!   c               ó    € V ^8„  d   QhRRRR/# )r%   Únamer   r)   r   r   )r+   s   "r"   r,   r,   .   s   € ÷ Gñ G�#ð GÐDñ Gr!   c                ó   a € V 3R  l# )c                ó@   <€ SVP                  R 4      ;'       g    R9   # )Ú	installedr   )Úget)r&   r'   r1   s   &&€r"   Ú<lambda>Ú_plugin.<locals>.<lambda>0   s   ø€  ¨¯©°;Ó)?×)EÐ)EÀ2Ò Fr!   r   )r1   s   fr"   Ú_pluginr8   .   s	   ø€ äFÐFr!   c               ó$   € V ^8„  d   QhRRRRRR/# r$   r   )r+   s   "r"   r,   r,   3   s"   € ÷ (ñ (�eð (Ð$5ð (¸$ñ (r!   c                ó6   € \        VP                  R 4      4      # )Ú	connected)r*   r5   r.   s   &&r"   Ú
_connectedr<   3   s   € Ü�—	‘	˜+Ó&Ó'Ð'r!   c               ó$   € V ^8„  d   QhRRRRRR/# r$   r   )r+   s   "r"   r,   r,   7   s"   € ÷ ñ �%ð Ð 1ð °dñ r!   c                ó    € V P                   R 8H  # )Úmacos)Úosr.   s   &&r"   Ú_macosrA   7   s   € Ø�8‰8�wÑÐr!   zExplain how Hermes worksc                ó   € R # ©Fr   r.   s   &&r"   r6   r6   =   s   € Á5r!   zTbuild a living page that shows how Hermes works, from the real docs and this installz�One HTML file in ~/hermes-first-task/, three screens that each fill the pane with one animated graphic; open in the preview pane.zXEvery name and number comes from the docs or this install. A few short lines per screen.zKAll three screens move and show real facts, and you said where the file is.)r   r   r   r   r   ÚgameszTune my games for this PCz
nvidia-appzCoptimise the games on this PC with NVIDIA App and show what changedzAA before and after table in chat: one row per game, what changed.zIOnly settings NVIDIA App reports and really changed. Never guess a value.zTThe changes are read back and in the table. Next-step idea: launch one of the games.Ú	broadcastzMake my mic and camera proznvidia-broadcastzDset up NVIDIA Broadcast so their mic and camera are ready for a callz@A short list in chat: each effect, its device, before and after.z/Only effects Broadcast reports on this machine.zIThe effects are on and read back, and they know how to turn each one off.ÚblenderzBuild a 3D scene in BlenderzMbuild a small 3D scene live in their open Blender, one visible step at a timezoscene.blend, scene.py, preview.png and render.png in ~/hermes-first-task/; the render open in the preview pane.z@Made in their open Blender, never headless, never a placeholder.zkThe final still is shown and you named the files. Next-step idea: a turntable video or a GPU Cycles render.ÚbriefzBrief me on todayz-write today's brief from their connected appszIOne designed HTML page in ~/hermes-first-task/, open in the preview pane.zKEvery item comes from a connected app and says which one. Nothing invented.z=The brief is shown and the morning job is set up or declined.ÚweekzRecap my week on one pagezGmake one page that recaps their past seven days from the connected appsz<The page is shown with all five parts filled from real data.ÚmaczSet up my Mac helperszPset up their Mac helpers: one real reminder, one real note and a morning routinezIThe reminder and note in their apps and the cron job, each named in chat.z)Real items they asked for. No test items.zGThe reminder and note exist, and the morning job is set up or declined.ÚnoteszTurn my notes into a wikiz)turn their notes into a small linked wikizYFour Markdown pages in ~/hermes-first-task/wiki/, unless they ask for their notes folder.z/Only what their notes say. Every link resolves.z<The four pages exist, the links work and the index is shown.ÚexplainzExplain a topic I care aboutzTexplain a topic they care about on one page built around a figure they can play withzTOne HTML file in ~/hermes-first-task/, open in the preview pane, sources at the end.zMEvery claim and every number in the figure is cited. Under 400 words of text.z8The figure responds to input and every source is listed.ÚyoutubezTurn a video into a pagez;turn one video into a page that lays its ideas out visuallyz�One self-contained HTML file in ~/hermes-first-task/, open in the preview pane; each timestamp links to that moment in the video.zHDesigned with claude-design. Quotes are exact words from the transcript.z=The page is shown and every idea has its timestamp and quote.ÚwatchzWatch something for me dailyz2watch something for them every day and report herez1The first report in chat, and the daily cron job.z2Every finding has a source link. Nothing invented.zBThe first report is shown and the daily job is set up or declined.ÚsitezDesign a page for mezdesign one web page for themzOOne self-contained HTML file in ~/hermes-first-task/, open in the preview pane.zHDesigned with the skills. Real content they gave you, never filler text.z-The page is shown and a variation is offered.ÚrepozMap one of my reposz:map one of their code repositories on an architecture pagez?Only modules that are really in the repo, named by their paths.z:The page is shown and every box on it maps to a real path.útuple[FirstTask, ...]ÚFIRST_TASKSÚ c                ó   € R # rC   r   r.   s   &&r"   r6   r6   ü   s   € ¡Ur!   z,build the task they named in their own wordszYWhatever fits the task; a page is one self-contained HTML file, open in the preview pane.z;Real data only, designed with the skills when it is a page.z:The first slice is shown and you said where its files are.Ú	humanizerc               ó$   € V ^8„  d   QhRRRRRR/# )r%   r&   r   r'   r(   r)   rP   r   )r+   s   "r"   r,   r,     s(   € ÷ bñ b˜%ð bÐ(9ð bÐ>Sñ br!   c                ó~   a a€ \         ;QJ d    . V V3R l\         4       F  NK  	  5# ! V V3R l\         4       4      # )zKThe rows the model may pick from on this machine and run, in catalog order.c              3  óˆ   <"  € T F7  qP                   \        8w  g   K  VP                  SS4      '       g   K3  Vx € K9  	  R # 5i©N)r   ÚFIXED_IDr   )Ú.0Útaskr&   r'   s   & €€r"   Ú	<genexpr>Ú!eligible_tasks.<locals>.<genexpr>  s-   øé € Ða¡+˜$·±¼HÑ1D”ÈÏÉÐSXÐZ_×I`—’£+ùs   ƒAžA¸
A)ÚtuplerQ   r.   s   ffr"   Úeligible_tasksr_     s%   ù€ çŒ5Õa¥+Óa�5Ðaˆ5Õa¥+ÓaÓaÐar!   c               ó    € V ^8„  d   QhRRRR/# )r%   Úchosenr   r)   z
list[dict]r   )r+   s   "r"   r,   r,     s   € ÷ oñ o˜ð o ñ or!   c                ór   € . R T ;'       g    R 4       OR\         R\        \         ,          P                  /N# )z?The build card: the model's picks as given, then the fixed row.c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irX   )Údict)rZ   Úoptions   & r"   r\   Úcard_options.<locals>.<genexpr>  s   é € Ð6©˜vŒd�6�lˆl«ùs   ‚r   r   r   )rY   Ú
TASK_BY_IDr   )ra   s   &r"   Úcard_optionsrh     s6   € ànÑ6¨¯¨°2¨Ó6Ðn¸¼xÈÔR\Ô]eÕRf×RlÑRlÐ8mÐnÐnr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   re   r   Úeligiblezset[str]Úseenr)   ú
str | Noner   )r+   s   "r"   r,   r,     s(   € ÷ ñ ˜#ð ¨ð ¸ð Àjñ r!   c                ó  € \        V \        4      '       d&   \        V P                  R 4      \        4      '       g   R# V R ,          \        8X  d
   \         R2# V R ,          V9  d   V R ,          : R2# V R ,          V9   d   V R ,          : R2# V P                  R4      p\        V\        4      '       d   VP                  4       '       g   RV R ,           R2# \        V4      \        8”  d   RV R	\        V4       R
\         R2# R# )r   z(each option is {"id": ..., "label": ...}z( is added last by itself; do not pick itz is not an eligible idz is picked twicer   zthe label for z	 is emptyÚ"z" is z characters; the limit is z. Shorten itN)Ú
isinstancer   r5   r   rY   ÚstripÚlenÚ	MAX_LABEL)re   rj   rk   r   s   &&& r"   Ú_option_errorrs     sæ   € Ü�fœg×&Ò&¬j¸¿¹ÀDÓ9IÌ3×.OÒ.OÙ9Øˆd…|”xÔÜ�ÐCÐDÐDØˆd…|˜8Ô#Ø˜•,Ñ!Ð!7Ð8Ð8Øˆd…|�tÔØ˜•,Ñ!Ð!1Ð2Ð2Ø�J‰J�wÓ€EÜ�eœS×!Ò!¨¯©¯ªØ  t¥˜~¨YÐ7Ð7Ü
ˆ5ƒz”IÔØ�5�'˜œs 5›z˜lÐ*DÄYÀKÈ|Ð\Ð\Ùr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   Úoptionsr   r&   r   r'   r(   r)   rl   r   )r+   s   "r"   r,   r,   '  s/   € ÷ Añ A˜ð A Eð AÐ2Cð AÈ
ñ Ar!   c                ój  € \        W4       Uu. uF  q3P                  NK  	  pp. p\        V \        4      '       d	   V '       g   VP	                  R4       M¡\        V 4      \        8”  d   VP	                  R\         24       Mt\        4       pV  Fd  p\        V\        V4      V4      ;p'       d   VP	                  V4       K4  \        V\        4      '       g   KL  VP                  VR,          4       Kf  	  V'       g   R# RP                  V4      pV R\         RRP                  V4       R	2# u upi )
z[Why the model's build picks are refused, naming the eligible ids; None when they are valid.zoptions is requiredzpick at most r   Nz; zP. Call setup_beat(beat="build", options=[{"id": ..., "label": ...}]) with up to z of these ids: z, Ú.)r_   r   ro   ÚlistÚappendrq   Ú	MAX_PICKSÚsetrs   r   ÚaddÚjoin)	ru   r&   r'   r[   rj   Úproblemsrk   re   Úproblems	   &&&      r"   Ú
pick_errorr€   '  sú   € ä$2°5Ô$@ÓAÑ$@˜D—”Ñ$@€HÐAØ€HÜ�gœt×$Ò$¯GØ�‰Ð-Õ.Ü	ˆW‹œ	Ô	!Ø�‰˜-¬	 {Ð3Õ4ô ›ˆÛˆFÜ'¨´°H³¸tÓDÐDˆwÖDØ—‘ Ö(Ü˜F¤G×,Ô,Ø—‘˜ �Ö&ñ	 ÷
 ÙØ�i‰i˜Ó!€GØˆiÐiÜˆk˜¨¯©°8Ó)<Ð(=¸Qð@ð Aùò# Bs   ŽD0c               ó$   € V ^8„  d   QhRRRRRR/# )r%   re   r   Úresolve_skillzCallable[[str], str | None]r)   z	list[str]r   )r+   s   "r"   r,   r,   >  s"   € ÷ 
ñ 
˜ð 
Ð,Gð 
ÈIñ 
r!   c                ó4  € . \         P                  V \        4      P                  O\        Np. pV F^  pVP                  R4       Uu. uF  qQ! V4      ;p'       g   K  VNK  	  ppV'       g   K>  VP                  RP                  V4      4       K`  	  V# u upi )a  The skills a task loads first, humanizer last, each by the name ``skill_view`` loads it with here:
``resolve_skill`` maps a written name to that name (a plugin skill's registered name differs from
its ``<plugin>:<skill>`` form), or to None for a skill missing here, which is dropped.Ú|z or )rg   r5   ÚOWN_TASKr   ÚEVERY_TASK_SKILLÚsplitry   r}   )re   r‚   ÚnamesÚkeptÚentryr1   ÚresolvedÚfounds   &&      r"   Útask_skillsr�   >  s�   € ð IŒj�n‰n˜V¤XÓ.×5Ñ5ÐHÔ7GÐH€EØ€DÛˆØ&+§k¡k°#Ô&6Ó\Ñ&6˜dÀ}ÐUYÓGZÐ;Z¸8Ó;Z—�Ñ&6ˆÐ\ß‰5Ø�K‰K˜Ÿ™ EÓ*Ö+ñ ð €Kùò ]s   ÁBÁBN)úhermes-agentúclaude-designÚp5js)zzRead https://hermes-agent.nousresearch.com/docs/llms.txt once with web_extract. Open a page only to check a fact you show.zœRead this install: the model, how many skills are installed, the connected apps, and what this chat did (tools called, skills loaded, their name and picks).zƒWithin a minute, open it in the preview pane with the title, those facts and three screen headings. Then fill one screen at a time.zxScreen 1, the agent loop: a pulse runs model, tool, result, back to the model, labelled with the tools this chat called.z‡Screen 2, learning: a procedure becomes a skill that loads next time; memory keeps facts across chats. Use the skills this chat loaded.zfScreen 3, out in the world: cron jobs, connectors and messaging, one example each built on their apps.)znvidia-app:nvidia-app)aD  Its tools are mcp__nvidia_app__nvapp_*. If none are listed, check without changing anything whether NVIDIA App is installed and running. Not installed: open https://www.nvidia.com/en-us/software/nvidia-app/ in the preview pane and say how to install it. Not running: say how to start it. Check again each time they say done.zyList the installed games and show them at once. If the driver status shows a newer Game Ready driver, say so in one line.z`Ask in one clarify which preset to apply (Performance, Visual or Recommended), naming the games.z#Apply it, then read each game back.)z!nvidia-broadcast:nvidia-broadcast)ar  Its tools are mcp__nvidia_broadcast__*. If none are listed, check without changing anything whether NVIDIA Broadcast is installed and running. Not installed or too old: open https://www.nvidia.com/en-us/geforce/broadcasting/broadcast-app/ in the preview pane and offer the install as the skill says. Not running: say how to start it. Check again each time they say done.z‚Read the devices and the effects this machine offers, then ask in one clarify what it is for: a meeting, a stream or a noisy room.ziTurn the effects on one at a time. After each, say what to look at or listen for in the Broadcast window.)zblender:blender)z[Drive the open Blender with its mcp__blender__* tools. Never run Blender from the terminal.aÏ  If Blender is not connected (no tools, or get_objects_summary fails), this is a first run: open https://www.blender.org/lab/mcp-server/ in the preview pane and walk them through it in a short list: Blender 5.1 or newer open; drag the page's Drag and Drop into Blender button into Blender twice (the first adds the Blender Lab repository, the second installs the add-on); allow Online access; start the MCP bridge on port 9876. Check again each time they say done.z[Offer three scene ideas in one clarify: two that fit them, one that shows off this machine.a•  First capture their Blender window with get_screenshot_of_window_as_image, copy the image it saved over preview.png and open that in the preview pane, so they watch Hermes work. Then build it in a new scene named Hermes, in camera view, in four calls they can watch: ground and camera, main objects, materials and light, framing. After each, capture the window over preview.png again; the pane reloads it.zÝRender one 1280x720 EEVEE still with render_viewport_to_path, copy the filepath it returns to render.png and open it in the pane. Look at it before you call it done: lit, not black, framed. Fix and re-render once at most.z_Save only the new scene with bpy.data.libraries.write as scene.blend, and the code as scene.py.)r�   )úBCheck the connected apps with manage_connections(action="status").zARead today from them: mail, calendar, messages, tasks. Read only.z^Show a first version early, then fill it in: what needs attention, what changed, what is next.zGOffer a morning cron job that sends the brief. Schedule it only on yes.)zweekly-review-planningr�   )r‘   z.Read the past seven days from them. Read only.zYShow a first version early, then fill it in: meetings, threads, work shipped, open loops.z>End with a short plan for next week built from the open loops.)zapple-reminderszapple-notesrŽ   )z]Ask in one clarify what the reminder and the note should be, with three concrete suggestions.zEMake the reminder in Reminders and the note in Notes with the skills.zXPropose a morning routine as a cron job: what it does and when. Schedule it only on yes.)Úobsidianzllm-wiki)zAAsk which folder holds their notes. Never search the disk for it.z4Read the notes there and find the three main topics.zUWrite an index page and three linked topic pages, each citing the notes it came from.zShow the index page.)úgrounded-citationsr�   r�   zblocked-page-recovery)z|If the label they clicked names a topic, use it. Otherwise offer three guesses from what you know about them in one clarify.z¥Within a minute, open it in the preview pane with the title and the figure already moving: the one mechanism that makes the topic click, which they can drag or tune.z—Research it with citations (load arxiv for a technical topic), then write short sections around the figure. End on the most surprising thing you found.)zyoutube-contentr�   r�   )zAsk for the video link.z"Get the transcript with the skill.z;Pull out the main ideas, each with a timestamp and a quote.z\Show a first version early, then lay the ideas out visually, with one figure where it helps.)z-competitor-news-monitor|product-price-monitorr“   )z\Ask what to watch in one clarify, with three concrete options from what you know about them.z3Run the first check now and report it with sources.zTPropose a daily cron job: when it runs and what it reports. Schedule it only on yes.)r�   zpopular-web-designsz	design-mdr�   )z9If you do not know what the page is for, ask in one line.z-Offer three design directions in one clarify.zGShow a first version early with a p5js hero, then refine the same file.zOffer one variation.)zcodebase-inspectionzarchitecture-diagramÚgithub)z>Ask which repo, as a path or a URL, and ask before reading it.zShow its language breakdown.z'Read its entry points and main modules.zRDraw the architecture page: the modules, how they connect, where to start reading.)rŽ   )z.Also load the skills that fit what they asked.z’If you know what it is, say the first slice in one line and start. If not, ask one short question (a clarify with three concrete options is fine).z6Cut a big ask to a first slice and say so in one line.z+Show a first version early, then refine it.)"Ú__conditional_annotations__r   Ú
__future__r   Úcollections.abcr   r   Údataclassesr   Útypingr   r   Úagent.onboarding_flowr   rz   rr   rY   ÚOWN_IDr   r/   r8   r<   rA   rQ   r   r…   r   rg   r†   r_   rh   rs   r€   r�   )r[   r•   s   0@r"   Ú<module>rœ      s  øðôõ #ç -Ý !ß %çÝ+à€	Ø€	à€à	€ñ �$Ô÷ð ó ðõ õGõ
(õñ
 ØÐ,Ñ.HÐJsØcð
ð4àjØZô'\ñ( ØÐ,©g°lÓ.CÐE_ØRð	
ð SØ[Øcôeñ  ØÐ1±7Ð;MÓ3NÐPvØSð	
ð RØAØXôZñ  ØÐ0±'¸)Ó2DÐFZØ\ð
ð$àRðô1ñ4 ØÐ$ jÐ2DØ<ð
ð [Ø]ØLôNñ ØÐ+¨ZÐ9dØVð
ð [Ø]ØKôMñ ØÐ&¨Ð0bØ_ð
ð
 [Ø;ØVô
Xñ ØÐ,¨gÐ7OØ8ð
ð kØAØKôMñ ØÐ1°7ØPØcð
ð fØ_ØGôIñ ØÐ-¨wÐ8dØJð
ð>àZØLôNñ ØÐ/°ØOØAð
ð
 CØDØQôSñ ØÐ&¨Ð1nØ+ð
ð aØZØ<ô>ñ ØÐ% wÐ0iØIð
ð aØQØIôKðe~&€Ð"ó ~ñ@ Ø
ˆBÑ*Ð,=Ø	7ðð gØIØ	EôG€ñ )4Ó4© �g‰g�tŠm©Ñ4€
ØÐ õbõ
oõ
õ"A÷.
ùòm 5s   Å'F!