Hi. I think your code snippet:<p><pre><code>  @  (block cd)
  @    (bind v @(get-string (open-command `cd @path &amp;&amp; git remote -v`)))
  @    (next :string `@v`)
  @      (skip)
  vps@a(fetch)
  @      (bind url @(trim-str a))
  @  (end)
</code></pre>
probably just wants to be something like perhaps this:<p><pre><code>  @(next `!cd @path &amp;&amp; git remote -v`)
  vps@\t@url (fetch)
</code></pre>
Match directly into the output of the git command with @(next ...), and extract the url directly: it is delimited by tab from the remote name (which we can use literally or represent using @\t) and by a space from the (fetch) or (push) keyword. Thus we can eliminate the trim-str extra step and variable.<p>Also if v holds a string, `@v` simplifies to v!<p>Another thing is that if we are just marching through data to produce output, and don&#x27;t actually need to collect anything to analyze, we can convert this structure:<p><pre><code>  @(collect)
  ...match...
  @(end)
  @(output)
  @  (repeat)
  ...spew...
  @  (end)
  @(end)
</code></pre>
into:<p><pre><code>  @(repeat)
  ...match...
  @  (output)
  ...spew...
  @  (end)
  @(end)
</code></pre>
It&#x27;s not just shorter, but efficient too if the data is large (it doesn&#x27;t hang on to collected data as it marches through it).<p>Cheers ...