diff --git a/plugins/yarn/_yarn b/plugins/yarn/_yarn
index 382f58a0a..3689ae960 100644
--- a/plugins/yarn/_yarn
+++ b/plugins/yarn/_yarn
@@ -71,7 +71,7 @@ _global_commands=(
   'bin:Displays the location of the yarn bin folder'
   'remove:Remove installed package from dependencies updating package.json'
   'upgrade:Upgrades packages to their latest version based on the specified range'
-  'upgrade-interactive'
+  'upgrade-interactive:Interactively upgrade packages'
 )
 
 _yarn_commands_scripts() {
@@ -81,9 +81,21 @@ _yarn_commands_scripts() {
 }
 
 _yarn_scripts() {
-  local -a scripts
-  scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g'))
-  _describe 'script' scripts
+  local -a commands binaries scripts
+  local -a scriptNames scriptCommands
+  local i runJSON
+
+  runJSON=$(yarn run --json 2>/dev/null)
+  binaries=($(sed -E '/Commands available/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g;s/:/\\:/g;s/,/\n/g' <<< "$runJSON"))
+  scriptNames=($(sed -E '/possibleCommands/!d;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g;s/:/\\:/g;s/,/\n/g' <<< "$runJSON"))
+  scriptCommands=("${(@f)$(sed -E '/possibleCommands/!d;s/.*"hints":\{([^}]+)\}.*/\1/;s/"[^"]+"://g;s/:/\\:/g;s/","/\n/g;s/(^"|"$)//g' <<< "$runJSON")}")
+
+  for (( i=1; i <= $#scriptNames; i++ )); do
+    scripts+=("${scriptNames[$i]}:${scriptCommands[$i]}")
+  done
+
+  commands=($scripts $binaries)
+  _describe 'command' commands
 }
 
 _yarn_global_commands() {
@@ -240,7 +252,8 @@ _yarn() {
 
         run)
           _arguments \
-            '1: :_yarn_scripts'
+            '1: :_yarn_scripts' \
+            '*:: :_default'
         ;;
 
         tag)
@@ -255,6 +268,11 @@ _yarn() {
             '*:: :->team_args'
         ;;
 
+        upgrade-interactive)
+          _arguments \
+            '--latest:use the version tagged latest in the registry:'
+        ;;
+
         version)
           _arguments \
             '--new-version:version:' \
@@ -266,6 +284,10 @@ _yarn() {
           _arguments \
             '1:query:_files'
         ;;
+
+        *) 
+          _default
+        ;;
       esac
     ;;
   esac