Alien-TinyCDB
view release on metacpan or search on metacpan
.claude/skills/kanban-issues-karr-cli/references/setup.md view on Meta::CPAN
refuse and point at `karr sync`. No remote, an unreachable one, or no answer
inside the probe budget lets init through â it has to work offline.
`--new-board` starts an independent board beside the remote's on purpose; the
two will never sync with each other.
## skill
```bash
karr skill install # for the agent dirs found in the current directory (all three if none)
karr skill install --agent claude-code # claude-code, codex, cursor (comma-separated)
karr skill install --global # under $HOME instead
karr skill install --force # overwrite an existing install
karr skill check # exit 1 when an install differs from the bundled files
karr skill update # refresh outdated installs in place
karr skill show # print the bundled SKILL.md
```
Installs `SKILL.md` and `references/*.md` under `.claude/skills/`,
`.agents/skills/` or `.cursor/skills/` (`--global`: `~/.claude/skills`,
`~/.codex/skills`, `~/.cursor/skills`). The target is the current directory â
`skill` takes no `--dir`; `cd` there. Files are written in place, so a
hardlinked skill shared across projects (manage-skills) stays linked.
## completion
```bash
karr completion bash # print a bash completion script
karr completion zsh > "${fpath[1]}/_karr"
karr completion fish | source
.claude/skills/perl-xs/SKILL.md view on Meta::CPAN
static int foo_conn_free(pTHX_ SV *sv, MAGIC *mg) {
FOO_Conn *self = (FOO_Conn *)(void *)mg->mg_ptr;
if (self->conn) { foolib_close(self->conn); foolib_free(self->conn); }
Safefree(self);
return 0;
}
static const MGVTBL Foo_magic = { .svt_free = foo_conn_free };
```
`svt_free` is the destructor, and it is a better one than a Perl method: it fires
when the SV is collected, it still fires during global destruction, and no subclass
can override it away. **An XS object needs no `DESTROY` sub** â not in the XS, not
in the `.pm`.
The vtable address is also the type check. `mg_findext(sv, PERL_MAGIC_ext,
&Foo_magic)` matches only magic carrying that exact vtable, so a hand-blessed
hashref croaks at the boundary instead of segfaulting through an `INT2PTR` cast on
a pointer that was never there. That is the reason to skip `T_PTROBJ`, which stores
the pointer with `sv_setref_pv` and offers neither a free hook nor a real type
check.
.claude/skills/perl-xs/references/objects-and-memory.md view on Meta::CPAN
static int foo_conn_free(pTHX_ SV *sv, MAGIC *mg) {
FOO_Conn *self = (FOO_Conn *)(void *)mg->mg_ptr;
if (self->conn) { foolib_close(self->conn); foolib_free(self->conn); }
Safefree(self);
return 0;
}
static const MGVTBL Foo_magic = { .svt_free = foo_conn_free };
```
`svt_free` runs when the SV is collected. It beats a Perl `DESTROY` on three counts:
it cannot be overridden by a subclass, it still runs during global destruction, and
`CLONE_PARAMS` handling has a place to go (`svt_dup`) if threads ever matter.
The vtable is `static const` and its **address is the type identity** â declare one
per class, never share a vtable between two types.
## Attaching and finding
```c
/* OUTPUT side, in the typemap: bless an SV and hang the pointer off it */
sv_magicext(newSVrv($arg, "Foo"), NULL, PERL_MAGIC_ext,
},
{
"class" : "Dist::Zilla::Plugin::RewriteVersion::Transitional",
"config" : {
"Dist::Zilla::Plugin::RewriteVersion" : {
"add_tarball_name" : 0,
"finders" : [
":ExecFiles",
":InstallModules"
],
"global" : 0,
"skip_version_provider" : 0
},
"Dist::Zilla::Plugin::RewriteVersion::Transitional" : {
"_fallback_version_provider_args" : {},
"fallback_version_provider" : "Git::NextVersion"
},
"Git::NextVersion" : {
"Dist::Zilla::Plugin::Git::NextVersion" : {
"first_version" : "0.001",
"version_by_branch" : 0,
"version" : "2.052"
},
{
"class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional",
"config" : {
"Dist::Zilla::Plugin::BumpVersionAfterRelease" : {
"finders" : [
":ExecFiles",
":InstallModules"
],
"global" : 0,
"munge_makefile_pl" : 1
},
"Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional" : {}
},
"name" : "@Author::GETTY/@Git::VersionManager/BumpVersionAfterRelease::Transitional",
"version" : "0.009"
},
{
"class" : "Dist::Zilla::Plugin::NextRelease",
"name" : "@Author::GETTY/@Git::VersionManager/NextRelease",
name: '@Author::GETTY/@Git::VersionManager/pluginbundle version'
version: '6.037'
-
class: Dist::Zilla::Plugin::RewriteVersion::Transitional
config:
Dist::Zilla::Plugin::RewriteVersion:
add_tarball_name: 0
finders:
- ':ExecFiles'
- ':InstallModules'
global: 0
skip_version_provider: 0
Dist::Zilla::Plugin::RewriteVersion::Transitional:
_fallback_version_provider_args: {}
fallback_version_provider: Git::NextVersion
Git::NextVersion:
Dist::Zilla::Plugin::Git::NextVersion:
first_version: '0.001'
version_by_branch: 0
version_regexp: (?^:^v(.+)$)
Dist::Zilla::Role::Git::Repo:
time_zone: local
name: '@Author::GETTY/@Git::VersionManager/Git::Tag'
version: '2.052'
-
class: Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional
config:
Dist::Zilla::Plugin::BumpVersionAfterRelease:
finders:
- ':ExecFiles'
- ':InstallModules'
global: 0
munge_makefile_pl: 1
Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional: {}
name: '@Author::GETTY/@Git::VersionManager/BumpVersionAfterRelease::Transitional'
version: '0.009'
-
class: Dist::Zilla::Plugin::NextRelease
name: '@Author::GETTY/@Git::VersionManager/NextRelease'
version: '6.037'
-
class: Dist::Zilla::Plugin::Git::Commit
( run in 2.381 seconds using v1.01-cache-2.11-cpan-1236ad508bc )