use std::process::Command;
const PLUGIN_CHANNEL: &str = "plugin:interlink@interlink";
fn main() {
let passthrough: Vec<String> = std::env::args().skip(1).collect();
if let Some(key) = key_path()
&& !key.exists()
{
eprintln!(
"interlinked: warning: no key at {} — run interlink-keygen first",
key.display()
);
}
let mut cmd = Command::new("claude");
cmd.env("INTERLINK_CHANNELS", "1")
.arg("--dangerously-load-development-channels")
.arg(PLUGIN_CHANNEL)
.args(&passthrough);
exec(cmd);
}
fn key_path() -> Option<std::path::PathBuf> {
if let Some(k) = std::env::var_os("INTERLINK_KEY") {
return Some(k.into());
}
std::env::var_os("HOME").map(|h| std::path::PathBuf::from(h).join(".config/interlink/id.key"))
}
#[cfg(unix)]
fn exec(mut cmd: Command) -> ! {
use std::os::unix::process::CommandExt;
let err = cmd.exec(); eprintln!("interlinked: failed to launch claude: {err}");
std::process::exit(127);
}
#[cfg(not(unix))]
fn exec(mut cmd: Command) -> ! {
match cmd.status() {
Ok(status) => std::process::exit(status.code().unwrap_or(1)),
Err(e) => {
eprintln!("interlinked: failed to launch claude: {e}");
std::process::exit(127);
}
}
}