►
From YouTube: Experimental Duo CLI
Description
I've been experimenting with how we can improve developer experience by using CLI tools. This was the result of a weekend of hacking away at LLM and agents in go.
A
I
wanted
to
talk
to
you
today
about
a
side
project
that
I've
been
working
on
and
I've
been
really
obsessed
with
this
idea
of
how
to
really
improve
the
command
line.
Experience
for
developers
and
I
was
really
thinking
of
this
project.
That
could
be
an
extension
to
the
git
lab
CLI,
so
it
could
be
like
a
sub
command
set
within
the
gitlab
CLI
and
what
it
would
really
do
is
help
to
improve
the
developer
experience
as
I'm
developing
code.
A
A
You
understand
the
contents
of
any
repository
or
file
so
I'm,
basically
in
this
I'm
in
this
really
random
repository,
which
I've
downloaded
from
the
internet
and
I,
can
just
ask
you
or
explain
to
explain
what
the
main
file
does
so
there's
a
app
dot
Pi
here,
which
I
presume
is
a
main
file,
so
I
can
ask
devote
to
explain
to
me
what
this
does
and,
as
you
can
see,
dios
come
up
with
a
basic
explanation
of
what
it
does.
A
So
it's
told
me
that
this
is
a
flask
API
that
uses
a
sqlite
database
and
retrieves
book
data.
It
has
different
routes.
It
also
explains
me
all
the
various
functions
that
are
there
and
explains
to
me
what
each
of
those
functions
does.
So
it's
a
pretty
detailed
explanation
now,
because
this
is
a
command
line.
Application
I
can
actually
just
pipe
stuff
to
this,
so
I
could
say:
I
could
take
the
same.
Okay,
adapted
pi
and
I
can
say
pipe
that
to
do
explain
and
it
would
do
the
same
thing.
A
So
it
would
explain
to
me
the
contents
of
the
file
just
because
I'm
piping
and
because
it's
a
CLI
I
could
do
that
now.
I
can
also
my
favorite
part
is
that
you
can
also
pipe
errors
to
this.
So
if
I
say,
yeah
I've
got
this
other
program,
which
throws
an
error
right
and
so
I
can
actually
just
pipe
that
error
to
do.
Explain
and
it'll
actually
tell
me
what
the
problem
is
and
how
to
fix
it.
A
And
there
you
go,
it
shows
you
the
problem.
It
tells
you
how
to
fix
it.
It
says:
hey,
there's,
a
problem
with
line
two,
the
divide
function,
you're
doing
a
division
by
zero,
it's
not
allowed,
and
so
you
need
to
fix
that
and
it
actually
gives
you
a
code
relevant
to
this
right.
A
I
want
to
show
you
a
bit
about
what
happens
behind
the
scenes,
I'm
going
to
pass
the
minus
D
flag
to
do,
explain
and
the
minus
D
just
stands
for
debug
and
just
helps
show
what
what's
going
on
behind
the
scenes.
So
if
you
saw
here
what's
happening,
is
we're
sending
the
prompt,
of
course,
with
the
error,
but
we're
also
giving
Duo
access
to
a
bunch
of
tools.
One
of
the
tools
is
a
read
file
tool
which
tells
you
that
hey,
you
could
read
a
file
on
a
file
system.
A
If
you
want
help
debugging,
so
you
could
tell
me
exactly
what
the
problem
is,
and
so
what
Dior
did
is
it
said.
Okay
I
want
to
read
this
file
because
it
saw
that
in
the
error
message
and
then
it
picked
up
that
file
and
the
contents
and
then
once
it
actually
got
the
content
that
could
give
me
a
much
more
detailed
fix
right.
So
it
could
tell
me
exactly
what
the
problem
is.
It
gives
you
the
modified
code
and
tells
me
exactly
how
to
fix
it.
So
that's
do
explain
next
thing.
I
want
show.
A
You
is
dual
review.
Dual
review,
essentially
reviews
your
code
and
there's
a
thorough
code
review
of
your
code
and
also
finds
like
security
issues
or
issues
with
best
practices.
So
I'm
going
to
go
back
to
the
same
repository
and
I'm
going
to
say:
do
a
review
and
I'm
going
to
give
it
the
same
after
Pi
file
and
as
you
see,
it's
reviewed
the
code
and
it's
come
up
with
a
number
of
things.
For
example,
it
said
hey,
this
is
unused
import.
It's
looking
at
issues
with
templates.
A
It's
saying
that
hey,
you
should
use
a
template
engine
instead,
it
it
finds
issues
with
like
SQL
injection.
It
said
that
hey
here
you
should
use
a
parameterized
query
instead,
so
it
looks
at
both
security
and
best
practices.
We
can
also
ask
Dio
review
to
actually
just
generate
a
batch
file
with
the
changes
for
us.
Talk
to
you
about
is
do
convert
so
do
convert
essentially,
is
one
of
my
favorite
functions.
A
It
essentially
helps
you
convert
one
file
from
one
language
to
another,
so
essentially,
what
you
need
to
tell
it
is
which
language
you
want
to
convert
to
and
deal
convert
essentially
converts
that,
and
this
is
really
useful
for
Enterprises,
who
are
trying
to
do
like
Legacy
migration,
for
example.
You
know
you've
got
tons
of
like
cobal
code
or
basic
code
that
you
want
to
convert
to
Modern
languages
such
as
Java
or
go
or
whatever
else
right
and
so
do
convert
can
help.
A
A
And
and
of
course,
I
can
have
a
Duo
right
now
it
is
configured
to
use
any
llm,
so
you
could
configure
it
to
use
openai
or
vertex,
and
so
all
you
need
to
do
is
really,
and
you
could
use
multiple
profiles
which
said
like
parameters
like
models
Etc.
A
So
in
this
case
I
want
to
use
the
gbt4
model,
so
I
can
actually
just
provide
a
profile
which
is
set
up
to
use
gbd4
and
and
that's
what
it's
going
to
do,
So
eventually,
the
idea
is
that
you
know
I
just
goes
to
model
Gateway
and
then
model
Gateway
is,
you
know,
takes
the
most
appropriate
model
to
reply
to
video
right
now,
we're
just
configuring
the
llms
locally
and
that's
what's
happening.
A
So
there
you
see
that
it's
come
up
with
the
test.pi
file,
so
it's
actually
converted
that
code.
We
could
actually
run
the
code
as
well
locally
here
and
it
will
actually
run
right,
so
it
it
converted
that
Cobalt
code,
you
know,
which
is
I,
don't
know
44
lines
into
like
a
short.
Well,
not
so
short
Python
program
which
it
was
able
to
do
up
is
do
generate
I'm.
Quite
a
lazy,
developer
and
I
can
never
remember
things
that
go
into
common
files.
A
I
can
never
remember
what
goes
into
make
file
or
Docker
file,
or
what's
the
Syntax
for
kubernetes
manifest
I
could
never
remember
that
and
so
deal
generator
is,
is
literally
for
that.
So
here,
I've
downloaded
another
random
go
project
from
the
internet
and
the
first
thing
I
notice
is
that
it
doesn't
have
a
make
file.
So
I
can
ask
do
to
do
that
for
me,
so
I
can
say,
do
generate
and
make
file,
and
what
it'll
do
is
it'll
go
ahead
and
speak
to
the
llm
and
figure
out
what
the
make
file
to
be
generated.
A
So
there
you
go
it's
it's
come
up
with
the
make
file.
If
you
see
and
it's
it's
created,
this
build
stage
and
the
Run
stage
and
knows
it's
a
go
application.
So
it's
gone
ahead
and
done
that
now,
let's
say
the
make
file,
all
works,
I'm
ready
to
actually
go
ahead
and
deploy
this
to
kubernetes.
So
now,
I
need
a
Docker
file
so
because
I
need
to
build
a
Docker
container.
So
I
could
just
do
that.
So
I
could
just
say
the
origin
rate
Docker
file.
A
It's
going
to
go
ahead
and
generate
a
Docker
file
for
me.
So
there's
the
docker
file.
It
knows
it's
a
go!
Application!
It's
created
a
Docker
file
for
me
with
the
build
stage,
Etc
right
and
then
I
can
also
ask
it
to
generate
for
me
or
gen
kubernetes,
manifest
now
I,
don't
remember
the
name
of
the
manifesto,
what
it
should
be
called,
but
I
can
say:
I
want
to
kubernetes
deployment
and
service
manifest
right,
so
I
can
just
give
it
those
words
and
it
should
go
ahead
and
generate
the
Manifest.
For
me.
A
And
there
you
go,
it's
got
this
kubernetes
yaml.
If
you
see
it's
got
this
deployment
manifest
and
and
the
service
manifest
as
well.
So
it's
created
both
things
for
me
very
conveniently
and
of
course,
if
I
want
to
create
a
gitlab,
CI,
yaml
and
I,
don't
remember
whether
it
ends
with
a
yml
or
yaml.
A
Unit
test
can
really
help.
You
quickly
write
in
a
tasks
for
code
that
already
exists
so
I'm
in
a
new
repository
here,
and
this
repository
actually
is
a
brand
new
repository
that
I
just
downloaded.
It
has
no
unit
tests
and
I
want
to
take
an
example
which
is
not
trivial,
to
show
you
that
it
could
just
write
a
partial
unit
test
for
you.
So
I
could
actually
go
this
little
books
code
here,
which
is
which
basically
is
just
a
books.
Api
I
could
actually
get
it
to
do.
A
What
to
write
the
unit
test
for
me,
since
you
know
unit
test
for
this
repository,
so
I
could
say:
do
you're
a
test
create
and
then
I'm
going
to
run
it
with
debug
so
that
we
can
see
what's
going
on
and
then
I'm
just
going
to
give
the
part.
So
that's
package
apis,
books,
V1
and
just
for
that
books,
the
the
books
module
it's
gonna,
it's
gonna
go
ahead
and
write
in
a
test
I'm
going
to
go
ahead
and
pause.
This
video
and
I'll
show
you
what
all
it
did.
A
Okay,
so
that
completed.
So
we
actually
asked
the
assistant
to
go
ahead
and
create
us
the
test
file.
It
tells
us
it
creates
a
test
file.
It
also
tells
us
how
to
test
that
specific
file
which
we're
running
excuse
me,
which
you're
running
now,
and
so
we
actually
go
ahead
and
run
the
test
to
make
sure
that
actually
works
and-
and
that's
really
the
power
of
this,
so
we
could
actually
run
the
tests,
because
this
agent
is
running
locally.
A
A
Don't
work
in
the
llm
you'll
see
will
keep
changing
the
test
so
that
tweaking
the
test
so
that
they
actually
start
working,
and
so
here
you
go,
you
got,
we've
actually
got
running
tests
which
have
worked
thanks
to
thanks
to
Deo,
and
the
last
thing
I
want
to
talk
to
you
about
today
is
Gen
doc,
so
gen
dock
essentially
helps
you
generate
docs
for
do
so.
Essentially
you
know
it's.
It's
really
easy
to
generate.
Docs
I've
got
this
python
flask
application
here,
which
doesn't
have
any
doc
strings
at
all.
A
A
And
there
we
go,
we
can
see
that
it's
generated
docs
for
each
of
our
functions,
so
this
is
defined
the
factory
to
find
the
home
page
to
find
the
API
root
and
everything.
So
it's
it's
generated,
really
detailed
documents
document
doc
strings,
including
you
know,
the
return,
statements
or
parameters
and
everything.
So
that's
it
for
duo.
I,
hope
you
like
this
demo
I
would
love
some
feedback.
You
know
what
do
you
use
this
tool?
Do
you
think
it's
useful
really
any
feedback
would
be
appreciated.
Thank
you
for
listening.