This is a quick way. Put the macros at the top of your tiddler:
\define toc-caption()
<$set name="tv-wikilinks" value="no">
<$transclude field="caption">
<$view field="title"/>{{||$:/core/ui/ViewTemplate/tags}}
</$transclude>
</$set>
\end
\define toc-body(tag,sort:"",itemClassFilter,exclude,path)
<ol class="tc-toc">
<$list filter="""[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] -[[$tag$]] $exclude$""">
<$vars item=<<currentTiddler>> path="""$path$/$tag$""" excluded="""$exclude$ -[[$tag$]]""">
<$set name="toc-item-class" filter="""$itemClassFilter$""" emptyValue="toc-item" value="toc-item-selected">
<li class=<<toc-item-class>>>
<$list filter="[all[current]toc-link[no]]" emptyMessage="<$link><<toc-caption>></$link>">
<<toc-caption>>
</$list>
<$macrocall $name="toc-body" tag=<<item>> sort="""$sort$""" itemClassFilter="""$itemClassFilter$""" exclude=<<excluded>> path=<<path>>/>
</li>
</$set>
</$vars>
</$list>
</ol>
\end
This was just a quick hack of the existing TOC macros. It used to be (I think) that you only had to override toc-caption. Now you have to override the body a little.
Then invoke like <<toc HelloThere>>
As you see, it puts the tags on a separate line. So that may be less than optimal. But it was fast ;-)
-- Mark