diff --git a/src/cmd/tee.c b/src/cmd/tee.c
new file mode 100644
index 0000000..83db8a0
--- /dev/null
+++ b/src/cmd/tee.c
@@ -0,0 +1,75 @@
+/*
+ * tee-- pipe fitting
+ */
+
+#include <u.h>
+#include <libc.h>
+
+int	uflag;
+int	aflag;
+int	openf[100];
+
+char in[8192];
+
+int	intignore(void*, char*);
+
+void
+main(int argc, char **argv)
+{
+	int i;
+	int r, n;
+
+	ARGBEGIN {
+	case 'a':
+		aflag++;
+		break;
+
+	case 'i':
+		atnotify(intignore, 1);
+		break;
+
+	case 'u':
+		uflag++;
+		/* uflag is ignored and undocumented; it's a relic from Unix */
+		break;
+
+	default:
+		fprint(2, "usage: tee [-ai] [file ...]\n");
+		exits("usage");
+	} ARGEND
+
+	USED(argc);
+	n = 0;
+	while(*argv) {
+		if(aflag) {
+			openf[n] = open(argv[0], OWRITE);
+			if(openf[n] < 0)
+				openf[n] = create(argv[0], OWRITE, 0666);
+			seek(openf[n], 0L, 2);
+		} else
+			openf[n] = create(argv[0], OWRITE, 0666);
+		if(openf[n] < 0) {
+			fprint(2, "tee: cannot open %s: %r\n", argv[0]);
+		} else
+			n++;
+		argv++;
+	}
+	openf[n++] = 1;
+
+	for(;;) {
+		r = read(0, in, sizeof in);
+		if(r <= 0)
+			exits(nil);
+		for(i=0; i<n; i++)
+			write(openf[i], in, r);
+	}
+}
+
+int
+intignore(void *a, char *msg)
+{
+	USED(a);
+	if(strcmp(msg, "interrupt") == 0)
+		return 1;
+	return 0;
+}
