1
00:00:00,263 --> 00:00:01,200
Welcome to the show.

2
00:00:01,253 --> 00:00:06,153
James, I wanna start with one command
because this is the whole story: `claude

3
00:00:06,366 --> 00:00:08,154
--plugin-url

4
00:00:08,407 --> 00:00:16,711
https://example.com/my-plugin.zip`.

5
00:00:16,743 --> 00:00:23,428
That's new in Claude Code v2.1.129, and it
sounds tiny, but mate,

6
00:00:23,460 --> 00:00:28,306
this is one of those little flags that
changes how people actually ship stuff.

7
00:00:29,000 --> 00:00:33,732
[questioning tone] Wait -- `--plugin-url`
specifically in v2.1.129?

8
00:00:33,892 --> 00:00:38,937
So before 2.1.129, you couldn't just point
Claude Code at a hosted zip on the

9
00:00:38,973 --> 00:00:39,341
internet?

10
00:00:40,000 --> 00:00:40,400
Right.

11
00:00:40,503 --> 00:00:44,082
Before this, the normal mental model was
local input.

12
00:00:44,222 --> 00:00:48,796
You'd clone a repo, or you'd point Claude
at a folder with `--plugin-dir`.

13
00:00:48,956 --> 00:00:55,757
Then v2.1.128 added support for local
`.zip` files, which was already nicer because

14
00:00:55,777 --> 00:00:56,957
you could package things up.

15
00:00:57,057 --> 00:01:03,199
But 2.1.129 takes the next obvious step:
not just "load this zip from my

16
00:01:03,249 --> 00:01:06,239
machine," but "load this zip from a URL."

17
00:01:06,415 --> 00:01:09,683
Hosted archive becomes a first-class
input.

18
00:01:11,476 --> 00:01:14,437
And "hosted archive" is the phrase that
matters there.

19
00:01:14,527 --> 00:01:18,599
Because a GitHub repo clone and a local
folder feel like setup.

20
00:01:18,879 --> 00:01:21,481
A URL feels like distribution.

21
00:01:21,577 --> 00:01:25,647
Like, drop a release asset on GitHub,
paste a static file link,

22
00:01:25,711 --> 00:01:26,207
done.

23
00:01:27,000 --> 00:01:28,000
Exactly!

24
00:01:28,088 --> 00:01:29,238
That's the shift.

25
00:01:29,531 --> 00:01:34,835
It's the difference between handing
someone a box of parts and handing them a sealed

26
00:01:34,915 --> 00:01:35,555
package.

27
00:01:35,848 --> 00:01:40,751
If you've ever done internal tooling
rollout, you know the old dance: "clone this

28
00:01:40,831 --> 00:01:47,154
repo, put it here, use `--plugin-dir`, no
not THAT folder, the nested

29
00:01:47,234 --> 00:01:48,034
one..."

30
00:01:48,898 --> 00:01:50,998
Absolute shed-floor chaos.

31
00:01:51,174 --> 00:01:57,156
With one pinned URL in a shared config or
a team `CLAUDE.md`,

32
00:01:57,209 --> 00:02:00,991
everyone can load the SAME thing the same
way.

33
00:02:02,000 --> 00:02:06,235
That "one pinned URL in `CLAUDE.md`" is
the detail I'd underline.

34
00:02:06,305 --> 00:02:09,669
Because consistency is the actual
operational win.

35
00:02:09,789 --> 00:02:10,706
Not elegance.

36
00:02:10,866 --> 00:02:15,510
If the whole team references one URL,
you're eliminating the "works on my laptop"

37
00:02:15,556 --> 00:02:16,712
plugin install problem.

38
00:02:17,000 --> 00:02:17,320
Yep.

39
00:02:17,360 --> 00:02:19,717
And for small teams especially, that's
massive.

40
00:02:19,850 --> 00:02:24,197
An internal plugin can live as a single
release asset -- maybe on GitHub,

41
00:02:24,237 --> 00:02:28,197
maybe on a static file host -- and
onboarding stops being a treasure hunt.

42
00:02:28,357 --> 00:02:29,677
One line.

43
00:02:29,767 --> 00:02:30,834
One source.

44
00:02:30,954 --> 00:02:31,874
One version.

45
00:02:32,061 --> 00:02:34,192
It's boring in the best possible way.

46
00:02:35,000 --> 00:02:37,311
[leans in][curious] But let me push on
"one source."

47
00:02:37,411 --> 00:02:39,073
Because the second you say

48
00:02:39,393 --> 00:02:46,033
`https://.../my-plugin.zip`,

49
00:02:46,253 --> 00:02:49,068
you're not really talking about
configuration anymore.

50
00:02:49,188 --> 00:02:52,900
You're talking about fetching code from
the internet and running it as part of your

51
00:02:52,964 --> 00:02:53,739
tooling.

52
00:02:53,811 --> 00:02:55,454
That's a different trust boundary.

53
00:02:56,141 --> 00:02:56,641
Totally.

54
00:02:56,841 --> 00:03:01,115
And that's the tension here -- convenience
versus trust.

55
00:03:01,291 --> 00:03:06,878
This feature makes distribution easier,
but it ALSO makes plugin loading look much

56
00:03:06,926 --> 00:03:08,563
more like remote code intake.

57
00:03:08,856 --> 00:03:12,080
So the safety bar has to go UP, not down.

58
00:03:12,347 --> 00:03:17,520
If a team gets lazy because the install
got easier, they've missed the plot.

59
00:03:18,000 --> 00:03:20,241
"Safety bar goes up" -- that's the line.

60
00:03:20,311 --> 00:03:24,488
Because if I was cautious about a local
plugin from some random repo,

61
00:03:24,728 --> 00:03:28,799
I should be more cautious about a URL that
can change what it serves.

62
00:03:28,895 --> 00:03:30,079
Even if it's a zip.

63
00:03:30,181 --> 00:03:34,000
Especially if people stop thinking and
just copy-paste the command.

64
00:03:35,203 --> 00:03:37,886
Yeah, and this is where my old web-dev
scars kick in.

65
00:03:38,326 --> 00:03:41,481
A clean install flow can lull you into
trust.

66
00:03:41,694 --> 00:03:47,802
It's like a tidy app installer versus a
pile of source files -- the tidy one FEELS

67
00:03:47,922 --> 00:03:48,842
safer.

68
00:03:48,949 --> 00:03:50,125
Doesn't mean it is.

69
00:03:50,425 --> 00:03:55,482
The practical upside is real, but teams
should still care where that archive is

70
00:03:55,551 --> 00:03:59,720
hosted, who controls it, and whether the
version is pinned properly.

71
00:03:59,840 --> 00:04:04,404
Otherwise you're basically saying, "No
worries, mate, we'll just fetch whatever's

72
00:04:04,424 --> 00:04:07,562
there today," and that's how you end up in
the weeds.

73
00:04:08,000 --> 00:04:09,044
Let me try to say it back.

74
00:04:10,695 --> 00:04:17,202
v2.1.128 made plugins easier to package
because local

75
00:04:17,389 --> 00:04:20,800
`.zip` support meant you weren't stuck
with raw folders.

76
00:04:21,360 --> 00:04:28,161
v2.1.129 makes them easier to distribute
because now the zip can live behind a

77
00:04:28,321 --> 00:04:28,881
URL.

78
00:04:29,148 --> 00:04:34,887
So the gain is standardization, but the
risk is you've turned install into network

79
00:04:34,935 --> 00:04:35,447
retrieval.

80
00:04:36,000 --> 00:04:36,560
That's it.

81
00:04:36,580 --> 00:04:37,199
Nicely put.

82
00:04:37,319 --> 00:04:39,355
And distribution changes behavior.

83
00:04:39,451 --> 00:04:44,949
Once a thing is URL-installable, people
start treating it like a product artifact,

84
00:04:44,989 --> 00:04:46,388
not a dev-side folder.

85
00:04:46,481 --> 00:04:50,542
Which, honestly, is probably the right
direction -- as long as they don't forget

86
00:04:50,622 --> 00:04:52,462
it's still code with teeth.

87
00:04:53,067 --> 00:04:57,400
And the reason I think this matters beyond
one flag is what else arrived in

88
00:04:57,520 --> 00:04:59,720
v2.1.129.

89
00:04:59,811 --> 00:05:04,958
Plugin manifests can now declare `themes`
and `monitors` inside an `experimental`

90
00:05:04,991 --> 00:05:05,476
block.

91
00:05:05,540 --> 00:05:07,954
That's not just "here are some tools."

92
00:05:08,018 --> 00:05:12,672
That's tools, plus custom UI color
schemes, plus monitoring hooks,

93
00:05:12,792 --> 00:05:14,271
all in one package.

94
00:05:15,000 --> 00:05:17,952
[questioning tone] Wait -- `themes` and
`monitors` specifically inside

95
00:05:17,992 --> 00:05:19,428
`experimental`?

96
00:05:19,628 --> 00:05:24,112
So a plugin can now shape how the thing
works, how it looks,

97
00:05:24,132 --> 00:05:25,793
and how it's observed...

98
00:05:25,853 --> 00:05:26,989
all bundled together?

99
00:05:28,000 --> 00:05:30,160
Yeah, that's the mental-model change.

100
00:05:30,360 --> 00:05:35,675
A plugin stops being just helper code and
starts looking like a complete experience

101
00:05:35,732 --> 00:05:36,154
bundle.

102
00:05:36,367 --> 00:05:41,030
If a team has one internal plugin for its
workflow, it can potentially ship the

103
00:05:41,070 --> 00:05:45,909
tools people use, the theme they all see,
and the monitoring hooks around that

104
00:05:45,962 --> 00:05:47,984
workflow as one coherent unit.

105
00:05:49,000 --> 00:05:51,399
That "complete experience" phrase is gonna
stick with me.

106
00:05:51,489 --> 00:05:55,161
Because it's cleaner, sure, but it's also
more opinionated.

107
00:05:55,348 --> 00:05:59,002
It's like you're not just giving teammates
a spanner -- you're giving them the whole

108
00:05:59,064 --> 00:06:03,241
workshop layout, the paint on the walls,
and the clipboard that tracks what's

109
00:06:03,281 --> 00:06:03,721
happening.

110
00:06:04,975 --> 00:06:06,040
Efficient...

111
00:06:06,060 --> 00:06:07,078
but very hands-on.

112
00:06:08,000 --> 00:06:08,640
Exactly.

113
00:06:08,660 --> 00:06:10,472
And for standardization, that's powerful.

114
00:06:10,592 --> 00:06:13,833
Teams love consistency when they're trying
to reduce drift.

115
00:06:13,973 --> 00:06:17,431
One internal plugin can become the
canonical way work gets done.

116
00:06:17,543 --> 00:06:21,351
Same tools, same interface feel, same
monitoring layer.

117
00:06:21,511 --> 00:06:23,675
Fewer weird local snowflakes.

118
00:06:24,000 --> 00:06:27,436
But the word `experimental` is doing some
heavy lifting there,

119
00:06:27,468 --> 00:06:27,756
yeah?

120
00:06:27,866 --> 00:06:31,910
Because that says these manifest keys are
not locked in yet.

121
00:06:32,070 --> 00:06:35,352
Useful, absolutely -- but not settled.

122
00:06:36,133 --> 00:06:36,478
Right.

123
00:06:36,598 --> 00:06:41,356
`experimental` means authors are getting
new capabilities, but they should expect

124
00:06:41,425 --> 00:06:42,315
schema movement.

125
00:06:42,411 --> 00:06:43,437
That's the trade.

126
00:06:43,557 --> 00:06:47,515
You can build with `themes` and `monitors`
now, but you should do it knowing the

127
00:06:47,577 --> 00:06:49,508
manifest shape may change later.

128
00:06:49,721 --> 00:06:56,618
So if you're writing a plugin, don't
confuse "available in 2.1.129" with "frozen

129
00:06:56,688 --> 00:06:57,259
forever."

130
00:06:58,000 --> 00:07:02,157
And that matters heaps for internal teams,
because once you've got one URL in

131
00:07:02,197 --> 00:07:06,634
`CLAUDE.md` and one bundle that controls
tools, themes, and monitors,

132
00:07:06,734 --> 00:07:09,358
you've increased the blast radius of a
change.

133
00:07:09,571 --> 00:07:13,846
If that schema shifts, or if the bundle
changes unexpectedly,

134
00:07:13,866 --> 00:07:16,082
you're not just breaking one helper
command.

135
00:07:16,202 --> 00:07:19,758
You might be changing the whole feel and
oversight of the workflow.

136
00:07:20,000 --> 00:07:21,679
That's my skeptical take too.

137
00:07:21,799 --> 00:07:26,476
The better distribution gets, the more
temptation there is to centralize everything.

138
00:07:26,516 --> 00:07:30,475
And centralization is great until version
pinning gets sloppy.

139
00:07:30,515 --> 00:07:36,080
The more a plugin can control, the more
careful you need to be about EXACTLY which

140
00:07:36,137 --> 00:07:39,518
bundle you're loading and EXACTLY where it
came from.

141
00:07:40,337 --> 00:07:44,323
Yeah -- cleaner distribution and better
consistency on one hand,

142
00:07:44,385 --> 00:07:46,806
stricter source verification on the other.

143
00:07:46,913 --> 00:07:49,326
Those aren't opposing ideas, by the way.

144
00:07:49,366 --> 00:07:51,047
They're the same maturity curve.

145
00:07:51,154 --> 00:07:54,490
If you want a plugin to act like a proper
packaged experience,

146
00:07:54,538 --> 00:07:56,965
then you treat the package like a proper
artifact.

147
00:07:57,065 --> 00:07:57,604
Pin it.

148
00:07:57,730 --> 00:07:59,366
Verify the source.

149
00:07:59,446 --> 00:08:00,565
Be boring about it.

150
00:08:01,000 --> 00:08:02,601
And I think that's the real headline.

151
00:08:02,701 --> 00:08:05,002
Not just "new flag, neat feature."

152
00:08:05,162 --> 00:08:09,714
It's that Claude Code plugins are edging
from loose extensions toward shippable

153
00:08:09,794 --> 00:08:10,434
bundles.

154
00:08:10,610 --> 00:08:15,152
Once a bundle can arrive by URL and
include tools, `themes`,

155
00:08:15,172 --> 00:08:19,152
and `monitors`, you've basically got the
beginnings of an internal platform

156
00:08:19,207 --> 00:08:20,349
distribution story.

157
00:08:21,137 --> 00:08:22,680
Which is exciting...

158
00:08:22,740 --> 00:08:23,878
and a little spicy.

159
00:08:24,058 --> 00:08:30,749
Because every platform story starts with
convenience, and then eventually somebody

160
00:08:30,809 --> 00:08:36,270
has to ask the un-fun question: who do we
trust to publish the zip?

161
00:08:37,230 --> 00:08:41,306
[short pause] Anyway -- that's the bit I'd
keep chewing on.

162
00:08:41,446 --> 00:08:43,546
See you next time, James.

163
00:08:44,741 --> 00:08:45,521
See you.

