Sparky-toolbox

A personal agent harness for the NVIDIA DGX Spark, optimized for local models.

(a) Agent task: one run, traced"Add the lab meeting to my calendar, and turn the papermy professor sent into a one-page PDF."1Built-in functiongrep "lab meeting" notes.md→ Thursday 3 pm2Load a toolload_tool("calendar")calendar.add("Lab meeting", Thu 15:00)3Call an isolated subagentreader: "summarize the paper in today's email"Isolated readerown model, prompt and tools; reads the mail and PDFreturns only answers, each with a quote and its source→ answers whose quotes match the source4Load a skillload_skill("pdf")python make_pdf.py summary.md5Answermeeting added · summary.pdf savedevery call: model → gateway (budgets · hooks · approvals) → tool(b) Workflow task: fixed stepsScheduleListenerManualQueue, ordered by priorityStep 1fetch.pyno GPU: runs at onceStep 2summarize.py + modelwaits for its modelStep 3notify.pysends the replythen waits for the next trigger(a) Agent task: one run, traced"Add the lab meeting to my calendar, and turnthe paper my professor sent into a one-pagePDF."1Built-in functiongrep "lab meeting" notes.md→ Thursday 3 pm2Load a toolload_tool("calendar")calendar.add("Lab meeting", Thu 15:00)3Call an isolated subagentreader: "summarize the paper in today'semail"Isolated readerown model, prompt and tools; reads themail and PDFreturns only answers, each with a quoteand its source→ answers whose quotes match the source4Load a skillload_skill("pdf")python make_pdf.py summary.md5Answermeeting added · summary.pdf savedevery call: model → gateway (budgets · hooks · approvals) → tool(b) Workflow task: fixed stepsScheduleListenerManualQueue, ordered by priorityStep 1fetch.pyno GPU: runs at onceStep 2summarize.py + modelwaits for its modelStep 3notify.pysends the replythen waits for the next trigger
(a) One agent run, traced step by step. (b) A workflow task.

Prompt-injection defense

Untrusted contentmail, attachments, webpages, course sitesIsolated subagentown sandbox, model andtoolsanswers only thequestions it was asked,each with a quote and itssourcePlatform checksquestion copied from themain agent's promptquote found word for wordin the sourcenumbers appear in thequotesuspicious answersflaggedMain agentreceives the checkedanswers, not the raw textUntrusted contentmail, attachments, web pages, course sitesIsolated subagentown sandbox, model and toolsanswers only the questions it was asked, each with aquote and its sourcePlatform checksquestion copied from the main agent's promptquote found word for word in the sourcenumbers appear in the quotesuspicious answers flaggedMain agentreceives the checked answers, not the raw text
Untrusted content reaches the main agent only as checked answers.

A verified quote shows where an answer came from, not that it is harmless. The other layers assume the agent can still be misled:

One job at a time

My messagea long requestChat agentjudges that it will take longBuilderdrafts a one-off task with its ownprompt, tools and priorityApproval cardone per proposalPriority queueone large model at a timemy messages preempt at the next toolcallpreempted tasks resume from acheckpointBackground tasksends me the result when doneMy messagea long requestChat agentjudges that it will take longBuilderdrafts a one-off task with its own prompt, tools andpriorityApproval cardone per proposalPriority queueone large model at a timemy messages preempt at the next tool callpreempted tasks resume from a checkpointBackground tasksends me the result when done
The Spark runs one large model at a time, and switching models takes minutes. Long requests become background tasks, so the chat stays free.

Self-extension

1Needs an abilitya task needs a tool, taskor subagent it lacks2Planthe builder draftswhat to build3Approvalan approval card;nothing is built before a yesBuild loop, in an isolated dev area4Developwrite the change5Testfull suite vs. main6Triala real run, live setupfix and retry until every check passes7Shipmerged and deployedIn the catalogloadable from the next run1Needs an abilitya task needs a tool, task or subagent it lacks2Planthe builder drafts what to build3Approvalan approval card; nothing is built before a yesBuild loop, in an isolated dev area4Developwrite the change5Testfull suite vs. main6Triala real run, live setupfix and retry until every check passes7Shipmerged and deployedIn the catalogloadable from the next run
Every proposal needs my approval, and the builder cannot modify platform code, the isolated subagents or other locked tools.

Releases

All projects